iT邦幫忙

0

練習 MySQL 經典題

  • 分享至 

  • xImage
  •  

超經典MySQL練習50題,做完這些你的SQL就過關了

IDE: IntellJ IDEA (可快速生成 Markdown)


第一題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, 學生.s_birth AS 生日, 學生.s_sex AS 性別, 成績表01.s_score AS 課程01分數, 成績表02.s_score AS 課程02分數
FROM Student 學生
JOIN Score 成績表01
ON 學生.s_id = 成績表01.s_id AND 成績表01.c_id = 01
JOIN Score 成績表02
ON 學生.s_id = 成績表02.s_id AND 成績表02.c_id = 02
WHERE 成績表01.s_score > 成績表02.s_score;
編號 姓名 生日 性別 課程01分數 課程02分數
02 錢電 1990-12-21 70 60
04 李雲 1990-08-06 50 30

第二題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, 學生.s_birth AS 生日, 學生.s_sex AS 性別, 成績表01.s_score AS 課程01分數, 成績表02.s_score AS 課程02分數
FROM Student 學生
JOIN Score 成績表01
ON 學生.s_id = 成績表01.s_id AND 成績表01.c_id = 01
JOIN Score 成績表02
ON 學生.s_id = 成績表02.s_id AND 成績表02.c_id = 02
WHERE 成績表01.s_score < 成績表02.s_score;
編號 姓名 生日 性別 課程01分數 課程02分數
01 趙雷 1990-01-01 80 90
05 周梅 1991-12-01 76 87

第三題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, ROUND(AVG(成績表.s_score), 2) as 平均成績
FROM Student 學生
JOIN Score 成績表
ON 學生.s_id = 成績表.s_id
GROUP BY 學生.s_id
HAVING 平均成績 > 60;
編號 姓名 平均成績
01 趙雷 89.67
02 錢電 70.00
03 孫風 80.00
05 周梅 81.50
07 鄭竹 93.50

附加題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, SUM(成績表.s_score) as 總分
FROM Student 學生
JOIN Score 成績表
ON 學生.s_id = 成績表.s_id
GROUP BY 學生.s_id
HAVING 總分 > 200;
編號 姓名 總分
01 趙雷 269
02 錢電 210
03 孫風 240

第四題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, ROUND(AVG(成績表.s_score), 2) as 平均成績
FROM Student 學生
LEFT JOIN Score 成績表 # 用 LEFT JOIN 才能取出平均成績為 NULL 的學生
ON 學生.s_id = 成績表.s_id
GROUP BY 學生.s_id
HAVING 平均成績 < 60 OR 平均成績 IS NULL;
編號 姓名 平均成績
04 李雲 33.33
06 吳蘭 32.50
08 王菊 null

第五題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, COUNT(成績表.c_id) AS 選課總數, SUM(成績表.s_score) AS 總成績
FROM Student 學生
LEFT JOIN Score 成績表
ON 學生.s_id = 成績表.s_id
GROUP BY 學生.s_id;
編號 姓名 選課總數 總成績
01 趙雷 3 269
02 錢電 3 210
03 孫風 3 240
04 李雲 3 100
05 周梅 2 163
06 吳蘭 2 65
07 鄭竹 2 187
08 王菊 0 null

第六題

SELECT COUNT(老師.t_name) AS 個數
FROM Teacher 老師
WHERE 老師.t_name LIKE "李%";
個數
1

第七題
因為張三老師教數學,這題換句話說,也就是在問哪些同學有修過數學,數學的 c_id 是 02,如果張三教多堂課就不適用了!

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, 學生.s_birth AS 生日, 學生.s_sex AS 性別
FROM Student 學生
JOIN Score 成績表
ON 學生.s_id = 成績表.s_id
WHERE 成績表.c_id = 02;
編號 姓名 生日 性別
01 趙雷 1990-01-01
02 錢電 1990-12-21
03 孫風 1990-05-20
04 李雲 1990-08-06
05 周梅 1991-12-01
07 鄭竹 1989-07-01

第八題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, 學生.s_birth AS 生日, 學生.s_sex AS 性別
FROM Student 學生
WHERE 學生.s_id NOT IN (
    SELECT 成績表.s_id
    FROM Score 成績表
    JOIN Course 課程
    ON 成績表.c_id = 課程.c_id
    WHERE 課程.t_id = (
        SELECT 老師.t_id
        FROM Teacher 老師
        WHERE 老師.t_name LIKE "張%"
        ));
編號 姓名 生日 性別
06 吳蘭 1992-03-01
08 王菊 1990-01-20

第九題

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, 學生.s_birth AS 生日, 學生.s_sex AS 性別
FROM Student 學生
JOIN Score 成績表01
ON 學生.s_id = 成績表01.s_id AND 成績表01.c_id = 01
JOIN Score 成績表02
ON 學生.s_id = 成績表02.s_id AND 成績表02.c_id = 02
編號 姓名 生日 性別
01 趙雷 1990-01-01
02 錢電 1990-12-21
03 孫風 1990-05-20
04 李雲 1990-08-06
05 周梅 1991-12-01

第十題
MySQL 沒有差集語法 (╯•̀ὤ•́)╯

SELECT 學生.s_id AS 編號, 學生.s_name AS 姓名, 學生.s_birth AS 生日, 學生.s_sex AS 性別
FROM Student 學生, Score 成績表01
WHERE 學生.s_id = 成績表01.s_id AND 成績表01.c_id = 01 AND 成績表01.s_id NOT IN (
    SELECT 成績表02.s_id
    FROM Student 學生, Score 成績表02
    WHERE 學生.s_id = 成績表02.s_id AND 成績表02.c_id = 02);
編號 姓名 生日 性別
06 吳蘭 1992-03-01

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言