第一章 分组查询
1.GROUP BY子句
请编写 SQL 语句,查询教师表 teachers,统计不同年龄教师的人数,并将结果按照年龄从大到小排列,返回列名显示为 age_count。
SELECT age,count(age) as age_count
FROM teachers
group by age
order by age desc
请编写 SQL 语句,查询教师表 teachers 和课程表 courses,统计每个老师教授课程的数量,并将结果按课程数量降序排列,课程数量相同时按教师姓名升序排列,返回老师姓名和课程数量,分别命名为 teacher_name 和 course_count。
SELECT t.name as teacher_name,count(c.teacher_id) as course_count
FROM teachers t
left join courses c on t.id=c.teacher_id
group by (t.id)
order by course_count desc, teacher_name asc;
2.HAVING 子句
请编写 SQL 语句,从 teachers 表中,筛选出同一国家的教师平均年龄大于所有教师平均年龄的国家,并获取这些国家的所有教师信息。
select * from teachers where country in (
select country from teachers group by country having avg(age) >
(select avg(age) from teachers )
)
第二章 简单子查询
1.SELECT 语句中的子查询
请编写 SQL 语句,查询 courses 表和 teachers 表,查询 'Big Data' 课程对应的老师姓名。
SELECT t.name
FROM teachers t
WHERE t.id=(
SELECT c.teacher_id
FROM courses c
WHERE c.name='Big Data'
)
2.INSERT 语句中的子查询
请编写 SQL 语句,将教师表 teachers 中年龄大于 20(不包括 20) 的教师的数据复制到与它结构相同的空表 teachers_bkp 表中。
INSERT INTO teachers_bkp
SELECT *
FROM teachers
WHERE age>20
3.UPDATE 语句中的子查询
学校教务处排课时发现教师 Western Venom 创建的课程有误,现紧急需要将该教师创建的课程名称修改为 Java,请你使用相关的 SQL 语句完成。(课程中例题需收费)
UPDATE `courses`
SET `name` = 'Java'
WHERE `teacher_id` = (
SELECT `id`
FROM `teachers`
WHERE `name` = 'Western Venom'
);
4.DELETE 语句中的子查询
请编写 SQL 语句,删除教师表 teachers 中在 2020 年前(不包括 2020 年)创建过课程的教师。
DELETE FROM teachers
WHERE id in(
SELECT teacher_id
FROM courses
WHERE created_at<'2020-01-01'
)