# 复杂查询
-- 查询所有课程成绩小于60分学生的学号、姓名
select 学号, 姓名 from student where 学号 in (select 学号 from score group by 学号 having max(成绩) < 60);
-- 查询没有学全所有课的学生的学号、姓名
select 学号,count(课程号) 选修课程数 from score GROUP BY 学号;
select count(*) 课程总数 from course;
select 学号,姓名 from student where 学号 in (select 学号 from score GROUP BY 学号 HAVING count(课程号) < (select count(*) from course));
-- 查询出只选修了两门课程的全部学生的学号和姓名
select 学号,姓名 from student where 学号 in (select 学号 from score GROUP BY 学号 HAVING count(课程号) = 2);
# 日期查询
-- 1990年出生的学生名单
select current_date; -- 2023-02-23
select current_time; -- 10:47:40
select year('2023-02-23'); -- 2023
select month('2023-02-23'); -- 2
select day('2023-02-23'); -- 23
select DAYNAME('2023-02-23'); -- Thursday
select 姓名 from student where year(出生日期) = '1990';
-- 查询各科成绩前两名的记录
select 课程号,max(成绩) as 最大成绩 from score GROUP BY 课程号;
select * from score where 课程号 = '0001' ORDER BY 成绩 desc limit 2;
(select * from score where 课程号 = '0001' ORDER BY 成绩 desc limit 2)
union all
(select * from score where 课程号 = '0002' ORDER BY 成绩 desc limit 2)
union all
(select * from score where 课程号 = '0003' ORDER BY 成绩 desc limit 2)
union all
(select * from score where 课程号 = '0004' ORDER BY 成绩 desc limit 2);
-- 查询各学生的年龄(精确到月份)
select 学号 ,timestampdiff(month ,出生日期 ,now())/12 from student ;
-- 查询本月过生日的学生
select * from student where month(出生日期)= month(current_date);