MySQL 50 道經典練習題及答案

目錄

一、數據表設計與初始化

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;非常道…