MySQL50 вопросов_вопросов с 36 по 40

база данных
MySQL50 вопросов_вопросов с 36 по 40

MySQL50-10-Вопросы 36-40

В этой статье представлены темы 36–40. Задействованными точками знаний являются запросы на соединение с несколькими таблицами, и необходимо указать различные условия. 5 тем:

  • Найдите название, название курса и оценку любого курса, набравшего 70 или более баллов.
  • Узнать о неудачных курсах
  • Запросите номер учащегося и имя учащегося, номер курса которого равен 01 и чья оценка за курс больше или равна 80.
  • Количество студентов на курс
  • Запросите информацию об учениках с наивысшими оценками и их оценках среди учеников, прошедших курсы, преподаваемые учителем «Чжан Сан».

Тема 36

требования темы

Найдите название, название курса и оценку любого курса, набравшего 70 или более баллов.

Процесс анализа

Оценка за курс: Оценка

Название курса: Курс

Имя: Студент

Реализация SQL

select 
	s.s_name
	,c.c_name
	,sc.s_score
from Score sc   -- 成绩表
join Student s  -- 学生信息表
on sc.s_id = s.s_id
join Course c  -- 课程表
on sc.c_id = c.c_id
where sc.s_score > 70
group by s.s_name, c.c_name, sc.s_score;

тема 37

требования темы

Узнать о неудачных курсах

Процесс анализа

  • Ошибка: s_score меньше 60 баллов, что соответствует s_score в таблице Score.
  • Курс: Таблица курсов

Реализация SQL

select
	sc.c_id
	,c.c_name
	,sc.s_score
from Score sc
join Course c
on sc.c_id = c.c_id
where sc.s_score < 60;

тема 38

требования темы

Запросите номер учащегося и имя учащегося, чей номер курса равен 01 и чья оценка за курс больше или равна 80.

Процесс анализа

  • Идентификатор курса: Score, c_id
  • Оценки за курс: Score, s_score
  • Идентификатор и имя учащегося: Студент, s_id, s_name

Реализация SQL

select 
	sc.s_id
	,s.s_name
	,sc.s_score
from Score sc   -- 成绩表
join Student s  -- 学生信息表
on sc.s_id = s.s_id
join Course c  -- 课程表
on sc.c_id = c.c_id
where c.c_id = 01
and sc.s_score >= 80;

тема 39

требования темы

Количество студентов на курс

Процесс анализа

Определить количество студентов на каждом курсе напрямую по c_id в Score

Реализация SQL

select 
	c_id
	,count(s_id)
from Score 
group by c_id;

Если вы хотите подключиться к имени класса:

-- 报错!!!
select 
	sc.c_id
	,c.c_name
	,count(sc.s_id)
from Score sc
join Course c
group by sc.c_id;

ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.c.c_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Решение состоит в том, чтобы объединить запрос с нашими предыдущими результатами в виде временной таблицы и таблицы курса:

select 
	c.c_name  课程名称
	,c.c_id  课程编号
	,t.num  人数
from Course c
join(select 
   		 c_id
    	,count(s_id)  num
  	from Score 
  	group by c_id)t   -- 上面结果的临时表
on c.c_id = t.c_id;

тема 40

требования темы

Запросите информацию об учениках с наивысшими оценками и их оценках среди учеников, прошедших курсы, преподаваемые учителем «Чжан Сан».

Процесс анализа

Учитель Чжан Сан: Учитель

Курс: Курс

Оценка: Оценка

Информация о студенте: Студент

Эта тема включает в себя 4 таблицы, нам нужен запрос на объединение нескольких таблиц

Реализация SQL

1. Давайте узнаем, какие курсы вел г-н Чжан Сан

select 
	c.c_id
	,c.c_name
from Course c
join Teacher t
on c.t_id = t.t_id
where t.t_name = '张三';

2. Узнайте, кто сдавал математику

select 
	sc.s_id
	,sc.s_score
from Score sc
left join Course c
on sc.c_id = c.c_id
left join Teacher t
on c.t_id = t.t_id
where t.t_name = '张三';

3. Найдите наивысший балл оценки с помощью функции max.

select
	max(sc.s_score) 
from Score sc
left join Course c
on sc.c_id = c.c_id
left join Teacher t
on c.t_id = t.t_id
where t.t_name = '张三';

4. Подключите таблицу Student, чтобы узнать информацию о студенте.

select
	s.*
	,sc.s_score
	,sc.c_id
	,c.c_name
from Student s
left join Score sc
on s.s_id = sc.s_id
left join Course c
on sc.c_id = c.c_id
where sc.s_score in (select max(sc.s_score)    -- 最大值90分的确定
                    from Score sc
                    left join Course c
                    on sc.c_id = c.c_id
                    left join Teacher t
                    on c.t_id = t.t_id
                    where t.t_name = '张三');