查詢課程編號為01的學生比課程編號為02的學生成績高的所有學生的編號
1. 首先建立資料表
建立四張資料表(, 成績表(score))
1. 學生表(students)
1.學生id ---- s_id
2. 學生姓名 ---- s_name
3. 學生生日 ---- s_birth
4. 學生性別 ---- s_sex
2. 教師表(teacher)
1. 教師id ---- t_id
2. 教師姓名 ---- t_name
3. 課程表(course)
1.課程id ---- c_id
2. 課程名 ---- c_name
3. 教師id ----- t_id(與教師表對應, 方便建立資料庫連接)
4. 成績表(score)
1. 學生id ---- s_id(與學生表對應, 方便建立資料庫連接)
2. 課程id ---- c_id(與課程表對應, 方便建立資料庫連接)
3. 學生成績 ----- s_score
============ 表的建立代碼:
1 CREATE TABLE students( 2 s_id VARCHAR(20) PRIMARY KEY, 3 s_name VARCHAR(20) NOT NULL DEFAULT '', 4 s_birth VARCHAR(20) NOT NULL DEFAULT '', 5 s_sex VARCHAR(10) NOT NULL DEFAULT '' 6 ); 7 8 CREATE TABLE course( 9 c_id VARCHAR(20) PRIMARY KEY, 10 c_name VARCHAR(20) NOT NULL DEFAULT '', 11 t_id VARCHAR(20) NOT NULL 12 ); 13 14 CREATE TABLE teacher( 15 t_id VARCHAR(20) PRIMARY KEY, 16 t_name VARCHAR(20) NOT NULL DEFAULT '' 17 ); 18 19 CREATE TABLE score( 20 s_id VARCHAR(20), 21 c_id VARCHAR(20), 22 s_score INT(3), 23 PRIMARY(s_id, c_id) 24 );
2. 匯入資料
匯入資料資訊:insert into ... values(資訊)
============資料匯入代碼
1 INSERT INTO students VALUES('01', '趙雷', '1990-01-01', '男'); 2 INSERT INTO students VALUES('02', '錢電', '1990-12-21', '男'); 3 INSERT INTO students VALUES('03', '孫風', '1990-05-20', '男'); 4 INSERT INTO students VALUES('04', '李云', '1990-12-01', '男'); 5 INSERT INTO students VALUES('05', '周梅', '1991-12-01', '女'); 6 INSERT INTO students VALUES('06', '吳蘭', '1992-03-01', '女'); 7 INSERT INTO students VALUES('07', '鄭竹', '1989-07-01', '女'); 8 INSERT INTO students VALUES('08', '王菊', '1990-01-20', '女'); 9 10 INSERT INTO course VALUES('01', '語文', '02'); 11 INSERT INTO course VALUES('02', '數學', '01'); 12 INSERT INTO course VALUES('03', '英語', '03'); 13 14 INSERT INTO teacher VALUES('01', '張三'); 15 INSERT INTO teacher VALUES('02', '李四'); 16 INSERT INTO teacher VALUES('03', '王五'); 17 18 INSERT INTO score VALUES('01', '01', 80); 19 INSERT INTO score VALUES('01', '02', 90); 20 INSERT INTO score VALUES('01', '03', 99); 21 INSERT INTO score VALUES('02', '01', 70); 22 INSERT INTO score VALUES('02', '02', 60); 23 INSERT INTO score VALUES('02', '03', 80); 24 INSERT INTO score VALUES('03', '01', 80); 25 INSERT INTO score VALUES('03', '02', 80); 26 INSERT INTO score VALUES('03', '03', 80); 27 INSERT INTO score VALUES('04', '01', 50); 28 INSERT INTO score VALUES('04', '02', 30); 29 INSERT INTO score VALUES('04', '03', 20); 30 INSERT INTO score VALUES('05', '01', 76); 31 INSERT INTO score VALUES('05', '02', 87); 32 INSERT INTO score VALUES('06', '03', 31); 33 INSERT INTO score VALUES('06', '01', 34); 34 INSERT INTO score VALUES('07', '02', 89); 35 INSERT INTO score VALUES('07', '03', 98);
效果圖:
course表:

score表:

teacher表:

students表:

3. 處理問題
1. 思路: 我們希望得到如下一張表, 只需要用簡單的select * from table where 01成績>02成績 就能解決問題
---- 我們無法直接將這個直觀表構建出來, 所以我們就可以想到---構建子查詢, 一步一步向外嵌套
| s_id | c_id_01 | c_id_02 | |
| 學生編號 | 課程01的成績 | 課程02的成績 | select * from table where 01>02 |
2. 首先, 我們先把課程為01的學生資訊, 成績尋找出來.
select s_id, c_id, s_score from score where c_id = '01';
輸出結果:

3. 再尋找課程等于02的學生資訊
select s_id, c_id, s_score from score where c_id = '02';
輸出結果:

4. 我們希望把01和02的成績拼成一張表
-------把兩張(分別命名(as)為a, b)表inner join起來, 做一個連接查詢, 并用學生編號(s_id, c_id)給關聯(=)起來(on)
select * from ( select s_id, c_id, s_score from score where c_id = '01' ) as a inner join ( select s_id, c_id, s_score from score where c_id = '02' ) as b on a.s_id = b.c_id
輸出結果:

5. 再帶入條件(where), 我們的條件是學生01科目成績要大于02科目的成績(a.s_score > b.s_score), 并且需要的是學生的編號(* = a.s_id(或者b.s_id,兩者一樣隨便取一個))
select a.s_id from
(
select s_id, c_id, s_score FROM score where c_id = '01'
) as a
inner join
(
select s_id, c_id, s_score FROM score where c_id = '02'
) as b on a.s_id = b.c_id
where a.s_score > b.s_score
輸出結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/228956.html
標籤:MySQL
上一篇:Python34-02_資料庫----資料庫條件查詢
下一篇:shell創建資料庫的腳本
