一、多表關(guān)聯(lián)
兩表關(guān)聯(lián)必須得有一個(gè)關(guān)聯(lián)字段
-
14245353-d2b14f4a1941f56b.png
下圖中的 cst_id 為 us 和 cu 里面的共同關(guān)聯(lián)字段
關(guān)聯(lián)方法
- where
- 第一步 拿兩表數(shù)據(jù)做笛卡爾乘積
-
第二步 根據(jù)where條件進(jìn)行篩選
14245353-ce69b5417f6685e2.png
- join
- 原理
- 第一步 先用on條件進(jìn)行數(shù)據(jù)篩選
-
第二步 滿足條件的顯示,不滿足條件的丟棄
14245353-b94521c5accf8bf4.png
- 內(nèi)連接
-
只顯示滿足條件的數(shù)據(jù) 用 join 或者 inner join 進(jìn)行連接
14245353-67a3b5c0a639bb66.png

- 格式
select * from 表1 join 表2 on 連接條件
3. 左連接 left join
左表為主表,左表中所有數(shù)據(jù)都顯示,右表中只顯示滿足條件的數(shù)據(jù),如若右表沒有數(shù)據(jù),則用null表示。

格式
- select * from 表1 left join 表2 on 連接條件
-
右連接 right join
右表為主表,右表中所有數(shù)據(jù)都顯示,左表中只顯示滿足條件的數(shù)據(jù),如若左表沒有數(shù)據(jù),則用null表示
14245353-aaba22bfb2d58c33.png
14245353-447976955158ec07.png
格式
- select * from 表1 right join 表2 on 連接條件
二、嵌套

21、查詢成績高于學(xué)號(hào)為“109”、課程號(hào)為“3-105”的成績的所有記錄。
SELECT * FROM scoresWHERE degree>(SELECT MAX(degree) FROM scores WHERE sno='109')AND cno='3-105';
22、查詢和學(xué)號(hào)為108的同學(xué)同年出生的所有學(xué)生的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、查詢“張旭“教師任課的學(xué)生成績。
SELECT tno FROM teachers WHERE tname ='張旭'; -- 根據(jù)姓名查找tno
SELECT cno FROM coursesWHERE tno=(SELECT tno FROM teachers WHERE tname ='張旭'); -- 根據(jù)上一步的 tno 查找 cno
SELECT degree FROM scores WHERE cno = (SELECT cno FROM coursesWHERE tno=(SELECT tno FROM teachers WHERE tname ='張旭')); -- 根據(jù)上一步的cno展示degree






