濰坊做網(wǎng)站的電話seo網(wǎng)站有優(yōu)化培訓(xùn)班嗎
MySQL講義第 43 講——select 查詢之查詢練習(xí)(一)
文章目錄
- MySQL講義第 43 講——select 查詢之查詢練習(xí)(一)
- 1、查詢【C102】課程比【C103】課程分數(shù)低的學(xué)生的信息、課程及分數(shù)
- 2、查詢平均成績高于80分的學(xué)生的學(xué)號、姓名和平均成績
- 3、查詢每個學(xué)生高于平均成績的課程,顯示學(xué)號,姓名,課程名及分數(shù)
- 4、查詢平均成績低于 70 分的學(xué)生的學(xué)號、姓名和平均成績(包含沒有選課的學(xué)生)
- 5、查詢所有學(xué)生的學(xué)號、姓名、選課門數(shù)以及所選課程的總成績
- 6、查詢【姓劉】的學(xué)生人數(shù)
- 7、查詢選修了【鐘南山】老師課程的學(xué)生信息
- 8、查詢沒有選修【鐘南山】老師課程的學(xué)生信息
- 9、查詢選修了編號為【C102】和【C103】課程的學(xué)生信息
- 10、查詢選修了編號為【C102】而沒有選修編號為【C103】課程的學(xué)生信息
以下查詢使用到四張表,分別是:student、teacher、course 和 score,表結(jié)構(gòu)如下:
CREATE TABLE student(s_id char(5) primary key,s_name char(20),birth datetime,phone char(20),addr varchar(100)
);INSERT INTO student
VALUES('S2011','張曉剛','1999-12-3','13163735775','信陽市'),
('S2012','劉小青','1999-10-11','13603732255','新鄉(xiāng)市'),
('S2013','曹夢德','1998-2-13','13853735522','鄭州市'),
('S2014','劉艷','1998-6-24','13623735335','鄭州市'),
('S2015','劉巖','1999-7-6','13813735225','信陽市'),
('S2016','劉若非','2000-8-31','13683735533','開封市'),
('S2021','董雯花','2000-7-30','13533735564','開封市'),
('S2022','周華建','1999-5-25','13243735578','鄭州市'),
('S2023','特朗普','1999-6-21','13343735588','新鄉(xiāng)市'),
('S2024','奧巴馬','2000-10-17','13843735885','信陽市'),
('S2025','周健華','2000-8-22','13788736655','開封市'),
('S2026','張學(xué)有','1998-7-6','13743735566','鄭州市'),
('S2031','李明博','1999-10-26','13643732222','鄭州市'),
('S2032','達芬奇','1999-12-31','13043731234','鄭州市');CREATE TABLE teacher(t_id char(5) primary key,t_name char(20),job_title char(20),phone char(20)
);INSERT INTO teacher
VALUES('T8001','歐陽修','教授','13703735666'),
('T8002','華羅庚','教授','13703735888'),
('T8003','鐘南山','教授','13703735675'),
('T8004','錢學(xué)森','教授','13703735638'),
('T8005','李白','副教授','13703735828'),
('T8006','孔子','教授','13703735457'),
('T8007','王安石','副教授','13703735369');CREATE TABLE course(c_id char(4) primary key,c_name char(20),t_id char(5)
);INSERT INTO course
VALUES('C101','古代文學(xué)','T8001'),
('C102','高等數(shù)學(xué)','T8002'),
('C103','線性代數(shù)','T8002'),
('C104','臨床醫(yī)學(xué)','T8003'),
('C105','傳染病學(xué)','T8003'),
('C106','大學(xué)物理','T8004'),
('C107','詩歌欣賞','T8005'),
('C108','教育學(xué)','T8006'),
('C109','刑事訴訟法','T8007'),
('C110','經(jīng)濟法','T8007');CREATE TABLE score(s_id char(5),c_id char(4),score int,primary key(s_id, c_id)
);INSERT INTO score
VALUES('S2011','C102',84),('S2011','C105',90),('S2011','C106',79),('S2011','C109',65),
('S2012','C101',67),('S2012','C102',52),('S2012','C107',55),('S2012','C108',86),
('S2013','C102',97),('S2013','C103',68),('S2013','C104',66),('S2013','C105',68),
('S2014','C102',90),('S2014','C103',85),('S2014','C104',77),('S2014','C105',96),
('S2015','C101',69),('S2015','C102',66),('S2015','C107',88),('S2015','C108',69),
('S2016','C101',65),('S2016','C102',69),('S2016','C107',82),('S2016','C108',56),
('S2021','C102',72),('S2021','C103',90),('S2021','C104',90),('S2021','C105',57),
('S2022','C102',88),('S2022','C103',93),('S2022','C109',47),('S2022','C110',62),
('S2023','C102',68),('S2023','C103',86),('S2023','C109',56),('S2023','C110',91),
('S2024','C102',87),('S2024','C103',97),('S2024','C109',80),('S2024','C110',81),
('S2025','C102',61),('S2025','C105',62),('S2025','C106',87),('S2025','C109',82),
('S2026','C102',59),('S2026','C105',48),('S2026','C106',90),('S2026','C109',73);
基于以上數(shù)據(jù),完成如下查詢:
1、查詢【C102】課程比【C103】課程分數(shù)低的學(xué)生的信息、課程及分數(shù)
SQL 語句如下:
---############### 方法一:使用子查詢 #######################################
SELECT t_c102.s_id,s.s_name,t_c102.c102_score,t_c103.c103_score
FROM(SELECT s_id, score AS c102_scoreFROM scoreWHERE c_id = 'C102') t_c102 JOIN(SELECT s_id, score AS c103_scoreFROM scoreWHERE c_id = 'C103') t_c103ON t_c102.s_id = t_c103.s_idJOIN student sON s.s_id = t_c102.s_id
WHEREt_c102.c102_score < t_c103.c103_score
;
+-------+-----------+------------+------------+
| s_id | s_name | c102_score | c103_score |
+-------+-----------+------------+------------+
| S2021 | 董雯花 | 72 | 90 |
| S2022 | 周華建 | 88 | 93 |
| S2023 | 特朗普 | 68 | 86 |
| S2024 | 奧巴馬 | 87 | 97 |
+-------+-----------+------------+------------+
4 rows in set (0.00 sec)
---############### 方法二:使用自連接 #######################################
SELECTs.s_id,s.s_name,s_t102.score AS t102_score,s_t102.score AS t103_score
FROMstudent s JOIN score s_t102 ON s.s_id = s_t102.s_id AND s_t102.c_id = 'C102'JOIN score s_t103ON s_t102.s_id = s_t103.s_id AND s_t103.c_id = 'C103'
WHEREs_t102.score < s_t103.score
;
+-------+-----------+------------+------------+
| s_id | s_name | t102_score | t103_score |
+-------+-----------+------------+------------+
| S2021 | 董雯花 | 72 | 72 |
| S2022 | 周華建 | 88 | 88 |
| S2023 | 特朗普 | 68 | 68 |
| S2024 | 奧巴馬 | 87 | 87 |
+-------+-----------+------------+------------+
4 rows in set (0.00 sec)
2、查詢平均成績高于80分的學(xué)生的學(xué)號、姓名和平均成績
SQL 語句如下:
SELECT s.s_id,s.s_name,AVG(sc.score) AS avg_score
FROMstudent s JOIN score scON s.s_id = sc.s_id
GROUP BYs.s_id
HAVINGavg_score > 80
;
+-------+-----------+-----------+
| s_id | s_name | avg_score |
+-------+-----------+-----------+
| S2014 | 劉艷 | 87.0000 |
| S2024 | 奧巴馬 | 86.2500 |
+-------+-----------+-----------+
2 rows in set (0.04 sec)
3、查詢每個學(xué)生高于平均成績的課程,顯示學(xué)號,姓名,課程名及分數(shù)
SQL 語句如下:
SELECTs.s_id,s.s_name,c.c_id,c.c_name,sc.score,t_avg.avg_score
FROM (SELECT s.s_id, AVG(sc.score) AS avg_scoreFROM student s JOIN score sc ON s.s_id = sc.s_idGROUP BY s.s_id) t_avg JOIN score scON t_avg.s_id = sc.s_idJOIN student sON s.s_id = sc.s_idJOIN course cON c.c_id = sc.c_id
WHEREsc.score > t_avg.avg_score
;
+-------+-----------+------+-----------------+-------+-----------+
| s_id | s_name | c_id | c_name | score | avg_score |
+-------+-----------+------+-----------------+-------+-----------+
| S2011 | 張曉剛 | C102 | 高等數(shù)學(xué) | 84 | 79.5000 |
| S2011 | 張曉剛 | C105 | 傳染病學(xué) | 90 | 79.5000 |
| S2012 | 劉小青 | C101 | 古代文學(xué) | 67 | 65.0000 |
| S2012 | 劉小青 | C108 | 教育學(xué) | 86 | 65.0000 |
| S2013 | 曹夢德 | C102 | 高等數(shù)學(xué) | 97 | 74.7500 |
| S2014 | 劉艷 | C102 | 高等數(shù)學(xué) | 90 | 87.0000 |
| S2014 | 劉艷 | C105 | 傳染病學(xué) | 96 | 87.0000 |
| S2015 | 劉巖 | C107 | 詩歌欣賞 | 88 | 73.0000 |
| S2016 | 劉若非 | C102 | 高等數(shù)學(xué) | 69 | 68.0000 |
| S2016 | 劉若非 | C107 | 詩歌欣賞 | 82 | 68.0000 |
| S2021 | 董雯花 | C103 | 線性代數(shù) | 90 | 77.2500 |
| S2021 | 董雯花 | C104 | 臨床醫(yī)學(xué) | 90 | 77.2500 |
| S2022 | 周華建 | C102 | 高等數(shù)學(xué) | 88 | 72.5000 |
| S2022 | 周華建 | C103 | 線性代數(shù) | 93 | 72.5000 |
| S2023 | 特朗普 | C103 | 線性代數(shù) | 86 | 75.2500 |
| S2023 | 特朗普 | C110 | 經(jīng)濟法 | 91 | 75.2500 |
| S2024 | 奧巴馬 | C102 | 高等數(shù)學(xué) | 87 | 86.2500 |
| S2024 | 奧巴馬 | C103 | 線性代數(shù) | 97 | 86.2500 |
| S2025 | 周健華 | C106 | 大學(xué)物理 | 87 | 73.0000 |
| S2025 | 周健華 | C109 | 刑事訴訟法 | 82 | 73.0000 |
| S2026 | 張學(xué)有 | C106 | 大學(xué)物理 | 90 | 67.5000 |
| S2026 | 張學(xué)有 | C109 | 刑事訴訟法 | 73 | 67.5000 |
+-------+-----------+------+-----------------+-------+-----------+
22 rows in set (0.00 sec)
4、查詢平均成績低于 70 分的學(xué)生的學(xué)號、姓名和平均成績(包含沒有選課的學(xué)生)
SQL 語句如下:
SELECTs_id,s_name,'該學(xué)生沒有選課' AS avg_score
FROMstudent
WHEREs_id NOT IN(SELECT DISTINCT s_id FROM score)
UNION
SELECT s.s_id,s.s_name,AVG(sc.score) AS avg_score
FROMstudent s JOIN score scON s.s_id = sc.s_id
GROUP BYs.s_id
HAVINGavg_score > 80
;
+-------+-----------+-----------------------+
| s_id | s_name | avg_score |
+-------+-----------+-----------------------+
| S2031 | 李明博 | 該學(xué)生沒有選課 |
| S2032 | 達芬奇 | 該學(xué)生沒有選課 |
| S2014 | 劉艷 | 87.000000000 |
| S2024 | 奧巴馬 | 86.250000000 |
+-------+-----------+-----------------------+
4 rows in set (0.00 sec)
5、查詢所有學(xué)生的學(xué)號、姓名、選課門數(shù)以及所選課程的總成績
SQL 語句如下:
SELECTs_id,s_name,0 AS cnt_course,0 AS sum_score
FROMstudent
WHEREs_id NOT IN(SELECT DISTINCT s_id FROM score)
UNION
SELECT s.s_id,s.s_name,COUNT(*) AS cnt_course,SUM(sc.score) AS sum_score
FROMstudent s JOIN score scON s.s_id = sc.s_id
GROUP BYs.s_id
;
+-------+-----------+------------+-----------+
| s_id | s_name | cnt_course | sum_score |
+-------+-----------+------------+-----------+
| S2031 | 李明博 | 0 | 0 |
| S2032 | 達芬奇 | 0 | 0 |
| S2011 | 張曉剛 | 4 | 318 |
| S2012 | 劉小青 | 4 | 260 |
| S2013 | 曹夢德 | 4 | 299 |
| S2014 | 劉艷 | 4 | 348 |
| S2015 | 劉巖 | 4 | 292 |
| S2016 | 劉若非 | 4 | 272 |
| S2021 | 董雯花 | 4 | 309 |
| S2022 | 周華建 | 4 | 290 |
| S2023 | 特朗普 | 4 | 301 |
| S2024 | 奧巴馬 | 4 | 345 |
| S2025 | 周健華 | 4 | 292 |
| S2026 | 張學(xué)有 | 4 | 270 |
+-------+-----------+------------+-----------+
14 rows in set (0.01 sec)
6、查詢【姓劉】的學(xué)生人數(shù)
SQL 語句如下:
SELECTcount(*) AS cnt_student
FROMstudent
WHEREs_name LIKE '劉%';
+-------------+
| cnt_student |
+-------------+
| 4 |
+-------------+
1 row in set (0.01 sec)
7、查詢選修了【鐘南山】老師課程的學(xué)生信息
SQL 語句如下:
SELECTs_id,s_name,birth,phone,addr
FROMstudent
WHEREs_id IN(SELECT s_idFROM scoreWHERE c_id IN (SELECT c_idFROM courseWHERE t_id =(SELECT t_id FROM teacherWHERE t_name = '鐘南山')))
;
+-------+-----------+---------------------+-------------+-----------+
| s_id | s_name | birth | phone | addr |
+-------+-----------+---------------------+-------------+-----------+
| S2011 | 張曉剛 | 1999-12-03 00:00:00 | 13163735775 | 信陽市 |
| S2013 | 曹夢德 | 1998-02-13 00:00:00 | 13853735522 | 鄭州市 |
| S2014 | 劉艷 | 1998-06-24 00:00:00 | 13623735335 | 鄭州市 |
| S2021 | 董雯花 | 2000-07-30 00:00:00 | 13533735564 | 開封市 |
| S2025 | 周健華 | 2000-08-22 00:00:00 | 13788736655 | 開封市 |
| S2026 | 張學(xué)有 | 1998-07-06 00:00:00 | 13743735566 | 鄭州市 |
+-------+-----------+---------------------+-------------+-----------+
6 rows in set (0.01 sec)
8、查詢沒有選修【鐘南山】老師課程的學(xué)生信息
SQL 語句如下:
SELECTs_id,s_name,birth,phone,addr
FROMstudent
WHEREs_id NOT IN --和上一題相比,把這個地方修改為 NOT IN,其他不變(SELECT s_idFROM scoreWHERE c_id IN (SELECT c_idFROM courseWHERE t_id =(SELECT t_id FROM teacherWHERE t_name = '鐘南山')))
;
+-------+-----------+---------------------+-------------+-----------+
| s_id | s_name | birth | phone | addr |
+-------+-----------+---------------------+-------------+-----------+
| S2012 | 劉小青 | 1999-10-11 00:00:00 | 13603732255 | 新鄉(xiāng)市 |
| S2015 | 劉巖 | 1999-07-06 00:00:00 | 13813735225 | 信陽市 |
| S2016 | 劉若非 | 2000-08-31 00:00:00 | 13683735533 | 開封市 |
| S2022 | 周華建 | 1999-05-25 00:00:00 | 13243735578 | 鄭州市 |
| S2023 | 特朗普 | 1999-06-21 00:00:00 | 13343735588 | 新鄉(xiāng)市 |
| S2024 | 奧巴馬 | 2000-10-17 00:00:00 | 13843735885 | 信陽市 |
| S2031 | 李明博 | 1999-10-26 00:00:00 | 13643732222 | 鄭州市 |
| S2032 | 達芬奇 | 1999-12-31 00:00:00 | 13043731234 | 鄭州市 |
+-------+-----------+---------------------+-------------+-----------+
8 rows in set (0.00 sec)
9、查詢選修了編號為【C102】和【C103】課程的學(xué)生信息
SQL 語句如下:
SELECTs_id,s_name,birth,phone,addr
FROMstudent
WHEREs_id in(SELECT s_idFROM scoreWHERE c_id = 'C102') ANDs_id in(SELECT s_idFROM scoreWHERE c_id = 'C103')
;
+-------+-----------+---------------------+-------------+-----------+
| s_id | s_name | birth | phone | addr |
+-------+-----------+---------------------+-------------+-----------+
| S2013 | 曹夢德 | 1998-02-13 00:00:00 | 13853735522 | 鄭州市 |
| S2014 | 劉艷 | 1998-06-24 00:00:00 | 13623735335 | 鄭州市 |
| S2021 | 董雯花 | 2000-07-30 00:00:00 | 13533735564 | 開封市 |
| S2022 | 周華建 | 1999-05-25 00:00:00 | 13243735578 | 鄭州市 |
| S2023 | 特朗普 | 1999-06-21 00:00:00 | 13343735588 | 新鄉(xiāng)市 |
| S2024 | 奧巴馬 | 2000-10-17 00:00:00 | 13843735885 | 信陽市 |
+-------+-----------+---------------------+-------------+-----------+
6 rows in set (0.01 sec)
10、查詢選修了編號為【C102】而沒有選修編號為【C103】課程的學(xué)生信息
SQL 語句如下:
SELECTs_id,s_name,birth,phone,addr
FROMstudent
WHEREs_id IN(SELECT s_idFROM scoreWHERE c_id = 'C102') ANDs_id NOT IN(SELECT s_idFROM scoreWHERE c_id = 'C103')
;
+-------+-----------+---------------------+-------------+-----------+
| s_id | s_name | birth | phone | addr |
+-------+-----------+---------------------+-------------+-----------+
| S2011 | 張曉剛 | 1999-12-03 00:00:00 | 13163735775 | 信陽市 |
| S2012 | 劉小青 | 1999-10-11 00:00:00 | 13603732255 | 新鄉(xiāng)市 |
| S2015 | 劉巖 | 1999-07-06 00:00:00 | 13813735225 | 信陽市 |
| S2016 | 劉若非 | 2000-08-31 00:00:00 | 13683735533 | 開封市 |
| S2025 | 周健華 | 2000-08-22 00:00:00 | 13788736655 | 開封市 |
| S2026 | 張學(xué)有 | 1998-07-06 00:00:00 | 13743735566 | 鄭州市 |
+-------+-----------+---------------------+-------------+-----------+
6 rows in set (0.00 sec)