目录

一、数据表设计与初始化

1. 数据表结构说明

2. 建表语句

3. 插入测试数据

二、练习题及答案

1. 查询 "01" 课程比 "02" 课程成绩高的学生的信息及课程分数

2. 查询同时存在 "01" 课程和 "02" 课程的情况

3. 查询存在 "01" 课程但可能不存在 "02" 课程的情况 (不存在时显示为 null)

4. 查询不存在 "01" 课程但存在 "02" 课程的情况

5. 查询平均成绩大于等于 60 分的同学的学生编号、姓名和平均成绩

6. 查询在 SC 表存在成绩的学生信息

7. 查询所有同学的学生编号、姓名、选课总数、所有课程的总成绩 (没成绩的显示为 null)

8. 查询「李」姓老师的数量

9. 查询学过「张三」老师授课的同学的信息

10. 查询没有学全所有课程的同学的信息

11. 查询至少有一门课与学号为 "01" 的同学所学相同的同学的信息

12. 查询和 "01" 号的同学学习的课程完全相同的其他同学的信息

13. 查询没学过 "张三" 老师讲授的任一门课程的学生姓名

14. 查询两门及以上不及格课程的同学的学号、姓名及其平均成绩

15. 检索 "01" 课程分数小于 60,按分数降序排列的学生信息

16. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

17. 查询各科成绩最高分、最低分、平均分、及格率等统计信息

18. 按各科平均成绩排序,显示排名(Score 重复时保留名次空缺)

19. 按各科平均成绩排序,显示排名(Score 重复时不保留名次空缺)

20. 查询学生的总成绩并排名(总分重复时保留名次空缺)

21. 查询学生的总成绩并排名(总分重复时不保留名次空缺)

22. 统计各科成绩各分数段人数及百分比

23. 查询各科成绩前三名的记录

24. 查询每门课程被选修的学生数

25. 查询出只选修两门课程的学生学号和姓名

26. 查询男生、女生人数

27. 查询名字中含有「风」字的学生信息

28. 查询同名同性学生名单,并统计同名人数

29. 查询 1990 年出生的学生名单

30. 查询每门课程的平均成绩,按平均成绩降序、课程编号升序排列

31. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩

32. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数

33. 查询所有学生的课程及分数情况(含没成绩、没选课的学生)

34. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

35. 查询不及格的课程

36. 查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名

37. 求每门课程的学生人数

38. 成绩不重复时,查询选修「张三」老师所授课程的学生中成绩最高的学生信息及成绩

39. 成绩有重复时,查询选修「张三」老师所授课程的学生中成绩最高的学生信息及成绩

40. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

41. 查询每门课程成绩最好的前两名

42. 统计每门课程的学生选修人数(超过 5 人的课程才统计)

43. 检索至少选修两门课程的学生学号

44. 查询选修了全部课程的学生信息

45. 查询各学生的年龄(只按年份计算)

46. 按出生日期计算年龄(当前月日 < 出生月日则年龄减一)

47. 查询本周过生日的学生

48. 查询下周过生日的学生

49. 查询本月过生日的学生

50. 查询下月过生日的学生


一、数据表设计与初始化

1. 数据表结构说明

本次练习涉及 4 张核心表,分别用于存储学生、课程、教师及成绩信息,表结构如下:

  • 学生表(Student):包含学生编号(SId)、姓名(Sname)、出生年月(Sage)、性别(Ssex)
  • 课程表(Course):包含课程编号(CId)、名称(Cname)、教师编号(TId)
  • 教师表(Teacher):包含教师编号(TId)、姓名(Tname)
  • 成绩表(SC):包含学生编号(SId)、课程编号(CId)、分数(score)

2. 建表语句

-- 学生表
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)
); -- 课程表
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10)
);-- 教师表
create table Teacher(TId varchar(10),Tname varchar(10)
);-- 成绩表
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1)
);

3. 插入测试数据

-- 学生表数据
insert into Student values('01' , '赵雷' , '1990-01-01' , '男'); 
insert into Student values('02' , '钱电' , '1990-12-21' , '男'); 
insert into Student values('03' , '孙风' , '1990-12-20' , '男'); 
insert into Student values('04' , '李云' , '1990-12-06' , '男'); 
insert into Student values('05' , '周梅' , '1991-12-01' , '女'); 
insert into Student values('06' , '吴兰' , '1992-01-01' , '女'); 
insert into Student values('07' , '郑竹' , '1989-01-01' , '女'); 
insert into Student values('09' , '张三' , '2017-12-20' , '女'); 
insert into Student values('10' , '李四' , '2017-12-25' , '女'); 
insert into Student values('11' , '李四' , '2012-06-06' , '女'); 
insert into Student values('12' , '赵六' , '2013-06-13' , '女'); 
insert into Student values('13' , '孙七' , '2014-06-01' , '女'); -- 课程表数据
insert into Course values('01' , '语文' , '02'); 
insert into Course values('02' , '数学' , '01'); 
insert into Course values('03' , '英语' , '03');-- 教师表数据
insert into Teacher values('01' , '张三'); 
insert into Teacher values('02' , '李四'); 
insert into Teacher values('03' , '王五'); -- 成绩表数据
insert into SC values('01' , '01' , 80); 
insert into SC values('01' , '02' , 90); 
insert into SC values('01' , '03' , 99); 
insert into SC values('02' , '01' , 70); 
insert into SC values('02' , '02' , 60); 
insert into SC values('02' , '03' , 80); 
insert into SC values('03' , '01' , 80); 
insert into SC values('03' , '02' , 80); 
insert into SC values('03' , '03' , 80); 
insert into SC values('04' , '01' , 50); 
insert into SC values('04' , '02' , 30); 
insert into SC values('04' , '03' , 20); 
insert into SC values('05' , '01' , 76); 
insert into SC values('05' , '02' , 87); 
insert into SC values('06' , '01' , 31); 
insert into SC values('06' , '03' , 34); 
insert into SC values('07' , '02' , 89); 
insert into SC values('07' , '03' , 98);

二、练习题及答案

1. 查询 "01" 课程比 "02" 课程成绩高的学生的信息及课程分数

-- 思路:将SC表按课程号01和02分别查询后连接,筛选01成绩>02成绩的记录
SELECT s.*, sc1.score AS '01课程分数', sc2.score AS '02课程分数'
FROM Student s
JOIN SC sc1 ON s.SId = sc1.SId AND sc1.CId = '01'
JOIN SC sc2 ON s.SId = sc2.SId AND sc2.CId = '02'
WHERE sc1.score > sc2.score;

2. 查询同时存在 "01" 课程和 "02" 课程的情况

-- 思路:通过子查询筛选同时选修01和02课程的学生ID,再关联查询
SELECT *
FROM SC sc1
WHERE sc1.CId = '01' 
AND EXISTS (SELECT 1 FROM SC sc2 WHERE sc2.SId = sc1.SId AND sc2.CId = '02'
);

3. 查询存在 "01" 课程但可能不存在 "02" 课程的情况 (不存在时显示为 null)

-- 思路:左连接01课程和02课程的成绩,保留01存在的所有记录
SELECT sc1.SId, sc1.CId AS '01课程', sc1.score AS '01分数', sc2.CId AS '02课程', sc2.score AS '02分数'
FROM SC sc1
LEFT JOIN SC sc2 ON sc1.SId = sc2.SId AND sc2.CId = '02'
WHERE sc1.CId = '01';

4. 查询不存在 "01" 课程但存在 "02" 课程的情况

-- 思路:筛选选修02课程的学生,且排除同时选修01课程的学生
SELECT *
FROM SC sc
WHERE sc.CId = '02'
AND sc.SId NOT IN (SELECT SId FROM SC WHERE CId = '01');

5. 查询平均成绩大于等于 60 分的同学的学生编号、姓名和平均成绩

-- 思路:按学生分组计算平均分,筛选平均分>=60的记录
SELECT s.SId, s.Sname, AVG(sc.score) AS 平均成绩
FROM Student s
JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname
HAVING AVG(sc.score) >= 60;

6. 查询在 SC 表存在成绩的学生信息

-- 思路:查询SC表中存在的学生ID对应的学生信息(去重)
SELECT DISTINCT s.*
FROM Student s
JOIN SC sc ON s.SId = sc.SId;

7. 查询所有同学的学生编号、姓名、选课总数、所有课程的总成绩 (没成绩的显示为 null)

-- 思路:左连接学生表和成绩表,按学生分组统计(没选课的学生也保留)
SELECT s.SId, s.Sname, COUNT(sc.CId) AS 选课总数, SUM(sc.score) AS 总成绩
FROM Student s
LEFT JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname;

8. 查询「李」姓老师的数量

-- 思路:筛选姓名以"李"开头的教师,统计数量
SELECT COUNT(*) AS 李姓老师数量
FROM Teacher
WHERE Tname LIKE '李%';

9. 查询学过「张三」老师授课的同学的信息

-- 思路:关联教师、课程、成绩表,筛选张三老师的课程对应的学生
SELECT DISTINCT s.*
FROM Student s
JOIN SC sc ON s.SId = sc.SId
JOIN Course c ON sc.CId = c.CId
JOIN Teacher t ON c.TId = t.TId
WHERE t.Tname = '张三';

10. 查询没有学全所有课程的同学的信息

-- 思路:先获取总课程数,再统计学生选课数,筛选小于总课程数的学生
SELECT s.*
FROM Student s
LEFT JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname, s.Sage, s.Ssex
HAVING COUNT(DISTINCT sc.CId) < (SELECT COUNT(*) FROM Course);

11. 查询至少有一门课与学号为 "01" 的同学所学相同的同学的信息

-- 思路:先获取01号学生的课程,再筛选选修了这些课程的其他学生
SELECT DISTINCT s.*
FROM Student s
JOIN SC sc ON s.SId = sc.SId
WHERE sc.CId IN (SELECT CId FROM SC WHERE SId = '01')
AND s.SId != '01';

12. 查询和 "01" 号的同学学习的课程完全相同的其他同学的信息

-- 思路:对比学生选课数和01号相同,且所有课程都在01号的课程列表中
SELECT s.*
FROM Student s
WHERE s.SId != '01'
AND (SELECT COUNT(*) FROM SC WHERE SId = s.SId) = (SELECT COUNT(*) FROM SC WHERE SId = '01')
AND NOT EXISTS (SELECT 1 FROM SC sc1 WHERE sc1.SId = s.SId AND sc1.CId NOT IN (SELECT CId FROM SC WHERE SId = '01')
);

13. 查询没学过 "张三" 老师讲授的任一门课程的学生姓名

-- 思路:排除学过张三老师课程的学生
SELECT Sname
FROM Student
WHERE SId NOT IN (SELECT DISTINCT sc.SIdFROM SC scJOIN Course c ON sc.CId = c.CIdJOIN Teacher t ON c.TId = t.TIdWHERE t.Tname = '张三'
);

14. 查询两门及以上不及格课程的同学的学号、姓名及其平均成绩

-- 思路:筛选不及格(<60)的课程,按学生分组统计数量>=2,计算平均分
SELECT s.SId, s.Sname, AVG(sc.score) AS 平均成绩
FROM Student s
JOIN SC sc ON s.SId = sc.SId
WHERE sc.score < 60
GROUP BY s.SId, s.Sname
HAVING COUNT(sc.CId) >= 2;

15. 检索 "01" 课程分数小于 60,按分数降序排列的学生信息

-- 思路:筛选01课程且分数<60的记录,关联学生信息并排序
SELECT s.*, sc.score
FROM Student s
JOIN SC sc ON s.SId = sc.SId
WHERE sc.CId = '01' AND sc.score < 60
ORDER BY sc.score DESC;

16. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

-- 思路:用窗口函数计算每个学生的平均分,关联所有课程成绩
SELECT s.SId, s.Sname, MAX(CASE WHEN sc.CId = '01' THEN sc.score END) AS 语文,MAX(CASE WHEN sc.CId = '02' THEN sc.score END) AS 数学,MAX(CASE WHEN sc.CId = '03' THEN sc.score END) AS 英语,AVG(sc.score) OVER (PARTITION BY s.SId) AS 平均成绩
FROM Student s
LEFT JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname
ORDER BY 平均成绩 DESC;

17. 查询各科成绩最高分、最低分、平均分、及格率等统计信息

-- 思路:按课程分组,用CASE统计各分数段人数,计算百分比
SELECT c.CId, c.Cname,COUNT(sc.SId) AS 选修人数,MAX(sc.score) AS 最高分,MIN(sc.score) AS 最低分,AVG(sc.score) AS 平均分,-- 及格率(>=60)SUM(CASE WHEN sc.score >= 60 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS 及格率,-- 中等率(70-80)SUM(CASE WHEN sc.score BETWEEN 70 AND 80 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS 中等率,-- 优良率(80-90)SUM(CASE WHEN sc.score BETWEEN 80 AND 90 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS 优良率,-- 优秀率(>=90)SUM(CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS 优秀率
FROM Course c
JOIN SC sc ON c.CId = sc.CId
GROUP BY c.CId, c.Cname
ORDER BY 选修人数 DESC, c.CId ASC;

18. 按各科平均成绩排序,显示排名(Score 重复时保留名次空缺)

-- 思路:用RANK()窗口函数(重复排名后有空缺)
SELECT CId, 平均成绩,RANK() OVER (ORDER BY 平均成绩 DESC) AS 排名
FROM (SELECT CId, AVG(score) AS 平均成绩FROM SCGROUP BY CId
) AS 科平均;

19. 按各科平均成绩排序,显示排名(Score 重复时不保留名次空缺)

-- 思路:用DENSE_RANK()窗口函数(重复排名后无空缺)
SELECT CId, 平均成绩,DENSE_RANK() OVER (ORDER BY 平均成绩 DESC) AS 排名
FROM (SELECT CId, AVG(score) AS 平均成绩FROM SCGROUP BY CId
) AS 科平均;

20. 查询学生的总成绩并排名(总分重复时保留名次空缺)

-- 思路:计算学生总分,用RANK()排名
SELECT SId, 总成绩,RANK() OVER (ORDER BY 总成绩 DESC) AS 排名
FROM (SELECT SId, SUM(score) AS 总成绩FROM SCGROUP BY SId
) AS 总分数;

21. 查询学生的总成绩并排名(总分重复时不保留名次空缺)

-- 思路:计算学生总分,用DENSE_RANK()排名
SELECT SId, 总成绩,DENSE_RANK() OVER (ORDER BY 总成绩 DESC) AS 排名
FROM (SELECT SId, SUM(score) AS 总成绩FROM SCGROUP BY SId
) AS 总分数;

22. 统计各科成绩各分数段人数及百分比

-- 思路:按课程分组,用CASE统计各分数段人数,计算百分比
SELECT c.CId, c.Cname,-- [100-85]人数及百分比SUM(CASE WHEN sc.score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS '[100-85]',SUM(CASE WHEN sc.score BETWEEN 85 AND 100 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS '[100-85]%',-- [85-70]人数及百分比SUM(CASE WHEN sc.score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS '[85-70]',SUM(CASE WHEN sc.score BETWEEN 70 AND 85 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS '[85-70]%',-- [70-60]人数及百分比SUM(CASE WHEN sc.score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS '[70-60]',SUM(CASE WHEN sc.score BETWEEN 60 AND 70 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS '[70-60]%',-- [60-0]人数及百分比SUM(CASE WHEN sc.score < 60 THEN 1 ELSE 0 END) AS '[60-0]',SUM(CASE WHEN sc.score < 60 THEN 1 ELSE 0 END)/COUNT(sc.SId) AS '[60-0]%'
FROM Course c
JOIN SC sc ON c.CId = sc.CId
GROUP BY c.CId, c.Cname;

23. 查询各科成绩前三名的记录

-- 思路:用ROW_NUMBER()按课程分组排序,取前3名
SELECT *
FROM (SELECT sc.*,ROW_NUMBER() OVER (PARTITION BY CId ORDER BY score DESC) AS 名次FROM SC sc
) AS 排名表
WHERE 名次 <= 3;

24. 查询每门课程被选修的学生数

-- 思路:按课程分组统计学生数
SELECT CId, COUNT(SId) AS 学生数
FROM SC
GROUP BY CId;

25. 查询出只选修两门课程的学生学号和姓名

-- 思路:按学生分组统计选课数=2的记录
SELECT s.SId, s.Sname
FROM Student s
JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname
HAVING COUNT(sc.CId) = 2;

26. 查询男生、女生人数

-- 思路:按性别分组统计人数
SELECT Ssex, COUNT(*) AS 人数
FROM Student
GROUP BY Ssex;

27. 查询名字中含有「风」字的学生信息

-- 思路:用LIKE匹配含"风"的姓名
SELECT *
FROM Student
WHERE Sname LIKE '%风%';

28. 查询同名同性学生名单,并统计同名人数

-- 思路:按姓名和性别分组,筛选人数>=2的记录
SELECT Sname, Ssex, COUNT(*) AS 同名人数
FROM Student
GROUP BY Sname, Ssex
HAVING COUNT(*) >= 2;

29. 查询 1990 年出生的学生名单

-- 思路:提取出生年份=1990的学生(Sage为datetime类型)
SELECT *
FROM Student
WHERE YEAR(Sage) = 1990;

30. 查询每门课程的平均成绩,按平均成绩降序、课程编号升序排列

-- 思路:按课程分组计算平均分,指定排序规则
SELECT CId, AVG(score) AS 平均成绩
FROM SC
GROUP BY CId
ORDER BY 平均成绩 DESC, CId ASC;

31. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩

-- 思路:按学生分组计算平均分,筛选>=85的记录
SELECT s.SId, s.Sname, AVG(sc.score) AS 平均成绩
FROM Student s
JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname
HAVING AVG(sc.score) >= 85;

32. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数

-- 思路:关联课程表筛选"数学",再筛选分数<60的记录
SELECT s.Sname, sc.score
FROM Student s
JOIN SC sc ON s.SId = sc.SId
JOIN Course c ON sc.CId = c.CId
WHERE c.Cname = '数学' AND sc.score < 60;

33. 查询所有学生的课程及分数情况(含没成绩、没选课的学生)

-- 思路:用左连接保留所有学生,即使没选课/没成绩
SELECT s.SId, s.Sname, c.Cname, sc.score
FROM Student s
LEFT JOIN SC sc ON s.SId = sc.SId
LEFT JOIN Course c ON sc.CId = c.CId
ORDER BY s.SId, c.CId;

34. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

-- 思路:筛选分数>70的记录,关联学生和课程名称
SELECT s.Sname, c.Cname, sc.score
FROM Student s
JOIN SC sc ON s.SId = sc.SId
JOIN Course c ON sc.CId = c.CId
WHERE sc.score > 70;

35. 查询不及格的课程

-- 思路:筛选分数<60的记录,关联课程名称
SELECT sc.SId, c.Cname, sc.score
FROM SC sc
JOIN Course c ON sc.CId = c.CId
WHERE sc.score < 60;

36. 查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名

-- 思路:筛选01课程且分数>80的记录,关联学生信息
SELECT s.SId, s.Sname
FROM Student s
JOIN SC sc ON s.SId = sc.SId
WHERE sc.CId = '01' AND sc.score > 80;

37. 求每门课程的学生人数

-- 思路:同24题,按课程分组统计学生数
SELECT CId, COUNT(SId) AS 学生人数
FROM SC
GROUP BY CId;

38. 成绩不重复时,查询选修「张三」老师所授课程的学生中成绩最高的学生信息及成绩

-- 思路:先找到张三老师的课程,再筛选这些课程的最高成绩对应的学生
SELECT s.*, sc.score, c.Cname
FROM Student s
JOIN SC sc ON s.SId = sc.SId
JOIN Course c ON sc.CId = c.CId
JOIN Teacher t ON c.TId = t.TId
WHERE t.Tname = '张三'
AND sc.score = (SELECT MAX(score) FROM SC sc2JOIN Course c2 ON sc2.CId = c2.CIdWHERE c2.TId = t.TId
);

39. 成绩有重复时,查询选修「张三」老师所授课程的学生中成绩最高的学生信息及成绩

-- 思路:用窗口函数RANK()取最高成绩(含并列)
SELECT *
FROM (SELECT s.*, sc.score, c.Cname,RANK() OVER (ORDER BY sc.score DESC) AS 排名FROM Student sJOIN SC sc ON s.SId = sc.SIdJOIN Course c ON sc.CId = c.CIdJOIN Teacher t ON c.TId = t.TIdWHERE t.Tname = '张三'
) AS 排名表
WHERE 排名 = 1;

40. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

-- 思路:自连接SC表,筛选分数相同但课程不同的记录
SELECT DISTINCT sc1.SId, sc1.CId, sc1.score
FROM SC sc1
JOIN SC sc2 ON sc1.score = sc2.score AND sc1.CId != sc2.CId AND sc1.SId = sc2.SId;

41. 查询每门课程成绩最好的前两名

-- 思路:按课程分组排序,取前2名(含并列可能用DENSE_RANK())
SELECT *
FROM (SELECT sc.*,DENSE_RANK() OVER (PARTITION BY CId ORDER BY score DESC) AS 名次FROM SC sc
) AS 排名表
WHERE 名次 <= 2;

42. 统计每门课程的学生选修人数(超过 5 人的课程才统计)

-- 思路:按课程分组统计人数,筛选人数>5的记录
SELECT CId, COUNT(SId) AS 选修人数
FROM SC
GROUP BY CId
HAVING COUNT(SId) > 5;

43. 检索至少选修两门课程的学生学号

-- 思路:按学生分组统计选课数>=2的记录
SELECT SId
FROM SC
GROUP BY SId
HAVING COUNT(CId) >= 2;

44. 查询选修了全部课程的学生信息

-- 思路:筛选选课数等于总课程数的学生
SELECT s.*
FROM Student s
JOIN SC sc ON s.SId = sc.SId
GROUP BY s.SId, s.Sname, s.Sage, s.Ssex
HAVING COUNT(DISTINCT sc.CId) = (SELECT COUNT(*) FROM Course);

45. 查询各学生的年龄(只按年份计算)

-- 思路:用当前年份减去出生年份(假设当前年份为2023,或用YEAR(CURDATE()))
SELECT SId, Sname, YEAR(CURDATE()) - YEAR(Sage) AS 年龄
FROM Student;

46. 按出生日期计算年龄(当前月日 < 出生月日则年龄减一)

-- 思路:判断当前月日与出生月日,调整年龄计算
SELECT SId, Sname,CASE WHEN DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(Sage, '%m%d') THEN YEAR(CURDATE()) - YEAR(Sage) - 1ELSE YEAR(CURDATE()) - YEAR(Sage)END AS 年龄
FROM Student;

47. 查询本周过生日的学生

-- 思路:提取生日月日,判断是否在当前周(本周从周一到周日)
SELECT *
FROM Student
WHERE WEEKOFYEAR(DATE_FORMAT(Sage, CONCAT(YEAR(CURDATE()), '-%m-%d'))) = WEEKOFYEAR(CURDATE());

48. 查询下周过生日的学生

-- 思路:判断生日周为当前周+1
SELECT *
FROM Student
WHERE WEEKOFYEAR(DATE_FORMAT(Sage, CONCAT(YEAR(CURDATE()), '-%m-%d'))) = WEEKOFYEAR(CURDATE()) + 1;

49. 查询本月过生日的学生

-- 思路:提取生日月份,与当前月份一致
SELECT *
FROM Student
WHERE MONTH(Sage) = MONTH(CURDATE());

50. 查询下月过生日的学生

-- 思路:提取生日月份,与当前月份+1一致(12月的下月为1月)
SELECT *
FROM Student
WHERE MONTH(Sage) = CASE WHEN MONTH(CURDATE()) = 12 THEN 1 ELSE MONTH(CURDATE()) + 1 END;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93752.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93752.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93752.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电竞护航小程序搭建三角洲俱乐部护航派单小程序开发游戏派单系统定制开发

成品系统&#xff0c;可以快速搭建。功能概述&#xff1a;商家入驻、老板点单、快捷发单、自定义发单、发单列表、管事入驻、订单审核裁决、打手入驻、打手排行榜、邀请排行榜、账户充值、余额提现、成为客服等

MYSQL-增删查改CRUD

目录 &#x1f33f;前言&#xff1a; &#x1f33f;增-C-Create-新增 &#x1f9ca;单行数据全列插入 &#x1f34b;‍&#x1f7e9;语法&#xff1a; &#x1f34b;‍&#x1f7e9;演示&#xff1a; &#x1f9ca;指定列插入 &#x1f34b;‍&#x1f7e9;语法&#xf…

【Loss学习笔记】Focal loss、QFL、DFL、VFL——目标检测定位损失函数详解

文章目录Focal loss&#xff08;2018 ICCV &#xff0c;RetinaNet&#xff09;1、Focal Loss 提出背景问题一&#xff1a;正负样本数量不均衡问题问题二&#xff1a;难分类/易分类样本数量不均衡问题对两个问题的解决2、正负样本数量不均衡问题的解决&#xff1a;Focal loss 的…

nertctl使用了解

测试了几个容器&#xff0c;似乎未对k8s的containerd产生影响&#xff0c;都能访问 再次测试&#xff0c;containerd发生了重启&#xff0c;nrtdctl启动的容器都没了 #### sealos 创建containerd集群 sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.29…

三、k8s 1.29 之 资源清单

一、什么是资源 资源(Resources) 是指集群中可被分配、管理和调度的各种实体,既包括计算、存储、网络等基础设施资源,也包括 K8s 自身定义的 API 对象(如 Pod、Deployment 等)。这些资源是 K8s 调度和管理工作负载的核心基础。 Kubernetes 中的资源本质上是 “可被操作的…

React中常用的Hook(useEffect、useRef、useMemo、useNavigate、useParams)

React hook1&#xff1a;useEffect 在编程中&#xff0c;副作用是指函数或表达式在执行过程中对外部环境产生影响的行为。例如&#xff1a; 修改外部变量&#xff08;如全局变量、DOM、API 请求、设置定时器等&#xff09; 什么是纯函数&#xff1f; // 纯函数&#xff1a;输入…

关联规则挖掘1:Apriori算法

目录 一、Apriori算法核心原理 1. 基本概念 2. Apriori性质 二、完整案例计算&#xff08;超市购物数据&#xff09; ​步骤1&#xff1a;按字母序重排每笔交易​ ​步骤2&#xff1a;统计频繁1-项集&#xff08;min_support40%&#xff09;​​ ​步骤3&#xff1a;生成…

基于 C++ 线程池的多线程目标检测后处理系统设计与实现

在实际的智能视频分析系统中,目标检测(如 YOLOv5)只是第一步。检测结果往往需要进行后续处理:画框、报警、推流、日志记录等。这些操作如果在检测主线程中同步执行,会严重拖慢整体推理速度。 本文将带你从零实现一个基于 C++ 模板线程池的异步后处理系统,实现“检测与后…

Java并发容器详解

1. JUC并发容器概述 Java集合容器框架主要有四大类别&#xff1a;List、Set、Queue、Map。常见的ArrayList、LinkedList、HashMap等容器都是非线程安全的。 Java提供了同步容器&#xff08;如Vector、Hashtable、SynchronizedList&#xff09;通过synchronized实现同步&#xf…

SpringAI系列---【SpringA集成OllamaI如何先调用向量库,再把查到的结果一起传给大模型?】

SpringAI如何先调用向量库&#xff0c;再把查到的结果一起传给大模型&#xff1f; 1.引入pom <dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></depend…

告别“测试滞后”:AI实时测试工具在敏捷开发中的落地经验

告别“测试滞后”&#xff1a;AI实时测试工具在敏捷开发中的落地经验 在敏捷开发的“快速迭代”节奏中&#xff0c;测试环节常常成为“拖后腿”的短板。某互联网公司的敏捷团队曾陷入这样的循环&#xff1a;2周迭代周期中&#xff0c;开发用10天完成功能&#xff0c;留给测试的…

K8S-Pod资源对象

一、K8S架构与组件1、K8S架构k8s 总体架构采用了经典的 maste/slave 架构模式&#xff0c;分 master 节点和 worker 节点&#xff0c;节点可以是虚拟机也可以是物理机。K8S组件 master 节点组件Kube-apiserver 用于暴露 Kubernetes API&#xff0c;任何资源请求或调用操作都是通…

PyTorch API 5

文章目录torch.compiler延伸阅读torch.fft快速傅里叶变换辅助函数torch.func什么是可组合的函数变换&#xff1f;为什么需要可组合的函数变换&#xff1f;延伸阅读torch.futurestorch.fx概述编写转换函数图结构快速入门图操作直接操作计算图使用 replace_pattern() 进行子图重写…

基于决策树模型的汽车价格预测分析

一、整体流程概览这份代码实现了一个完整的机器学习预测流程&#xff0c;核心目标是通过汽车的各项特征预测其价格。整体流程分为 6 个主要步骤&#xff1a;模拟生成汽车数据集&#xff08;含价格标签&#xff09;数据预处理&#xff08;清洗、编码、特征选择&#xff09;探索性…

0基础安卓逆向原理与实践:第2章:编程基础与工具链

第2章:编程基础与工具链 2.1 Java编程基础 2.1.1 Java语言特性 Java是安卓应用开发的主要语言,具有以下核心特性: mindmaproot((Java特性))面向对象封装继承多态抽象平台无关字节码JVM一次编译到处运行内存管理自动垃圾回收堆栈管理引用类型安全性字节码验证安全管理器访…

深入理解JVM内存结构:从字节码执行到垃圾回收的全景解析

&#x1f9e0; 深入理解JVM内存结构&#xff1a;从字节码执行到垃圾回收的全景解析 #JVM内存模型 #Java性能优化 #垃圾回收机制 #并发编程一、JVM内存结构全景图二、线程共享区域详解 2.1 堆&#xff08;Heap&#xff09;—— 对象生存的宇宙 存储内容&#xff1a; 所有new创建…

用 C++ 构建高性能测试框架:从原型到生产实战指南

用 C 构建高性能测试框架&#xff1a;从原型到生产实战指南 ​C 测试框架的关键价值​&#xff1a;当你的测试需要每秒处理百万级交易&#xff0c;微秒级延迟要求已成为常态时&#xff0c;Python GC 的暂停便是不可接受的奢侈。 本文将深入探讨如何用 C 构建兼具灵活性和高性能…

【C语言16天强化训练】从基础入门到进阶:Day 4

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、洛谷刷题、C/C基础知识知识强化补充、C/C干货分享&学习过程记录 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人…

C语言:字符函数与字符串函数(1)

在编程的过程中&#xff0c;我们经常会遇到需要处理字符和字符串的情况&#xff0c;为了方便操作字符和字符串&#xff0c;C语言标准库中提供了一系列库函数&#xff0c;接下来我们就学习一下这些函数。 目录 1. 字符分类函数 2. 字母转换函数 3. strlen函数的使用和模拟实现…

数据结构与算法系列(大白话模式)小学生起点(一)

出身&#xff0c;并不重要 &#xff01;&#xff01;&#xff01;&#xff01;只要有恒心&#xff0c;有毅力&#xff0c;肯于付出与学习&#xff0c;皆会取得相应的成就&#xff01;天道酬勤&#xff0c;天行健&#xff0c;君子当自强不息&#xff01;道可道&#xff0c;非常道…