一、多表關聯
兩表關聯必須得有一個關聯字段
-
14245353-d2b14f4a1941f56b.png
下圖中的 cst_id 為 us 和 cu 里面的共同關聯字段
關聯方法
- where
- 第一步 拿兩表數據做笛卡爾乘積
-
第二步 根據where條件進行篩選
14245353-ce69b5417f6685e2.png
- join
- 原理
- 第一步 先用on條件進行數據篩選
-
第二步 滿足條件的顯示,不滿足條件的丟棄
14245353-b94521c5accf8bf4.png
- 內連接
-
只顯示滿足條件的數據 用 join 或者 inner join 進行連接
14245353-67a3b5c0a639bb66.png
- 格式
select * from 表1 join 表2 on 連接條件
3. 左連接 left join
左表為主表,左表中所有數據都顯示,右表中只顯示滿足條件的數據,如若右表沒有數據,則用null表示。
格式
- select * from 表1 left join 表2 on 連接條件
-
右連接 right join
右表為主表,右表中所有數據都顯示,左表中只顯示滿足條件的數據,如若左表沒有數據,則用null表示
14245353-aaba22bfb2d58c33.png
14245353-447976955158ec07.png
格式
- select * from 表1 right join 表2 on 連接條件
二、嵌套
21、查詢成績高于學號為“109”、課程號為“3-105”的成績的所有記錄。
SELECT * FROM scores
WHERE degree>(SELECT MAX(degree) FROM scores
WHERE sno='109')AND cno='3-105';
22、查詢和學號為108的同學同年出生的所有學生的Sno、Sname和Sbirthday列。
SELECT sbirthday FROM students
WHERE sno='108';
SELECT sno,sname,sbirthday FROM students
WHERE sbirthday =(SELECT sbirthday FROM students
WHERE sno='108');
23、查詢“張旭“教師任課的學生成績。
SELECT tno FROM teachers
WHERE tname ='張旭'; -- 根據姓名查找tno
SELECT cno FROM courses
WHERE tno=(SELECT tno FROM teachers
WHERE tname ='張旭'); -- 根據上一步的 tno 查找 cno
SELECT degree FROM scores
WHERE cno = (SELECT cno FROM courses
WHERE tno=(SELECT tno FROM teachers
WHERE tname ='張旭')); -- 根據上一步的cno展示degree