mySql內連線,左外連線和右外連線,
1.使用連線查詢的場景
將多張表進行記錄的連線查詢(按照某個欄位指定的條件進行資料的拼接);
進行資料的拼接(兩張表的內容顯示在一個結果表中 使用連線查詢)
最終的結果是:記錄數有可能變化,欄位數一定會增加(至少兩張表的合併)
意義:在使用者檢視資料的時候,顯示的資料來自於多張表
連線查詢的分類 4類
內連線 inner join
內連線 【掌握】 ---拼接查詢結果
內部有聯絡,使用內連線
格式: [inner] join ----inner可省
結果:
從左表中取出每一條記錄,去右表中與所有的記錄進行匹配;
匹配必須是某個條件是左表中與右表中相同,才會保留結果,否則不保留;
基本語法:
左表 [inner] join 右表
on 左表.欄位 = 右表.欄位;
注意事項:
1、on 表示連線條件;條件欄位代表相同的業務含義
(如 stu.cid 和 cla.id)
學生stu表中的班級cid 和 班級cla表中的id
2、內連線可以沒有連線條件,沒有on之後的內容,
這時候系統會保留所有結果(笛卡爾集)
3、內連線可以使用where 代替 on
通常不用where,因為where沒有on效率高
on指匹配到第一條成功的就結束,其他不匹配;
若沒有,不進行匹配
而where會一直匹配,進行判斷
4、通常使用欄位別名 表別名
在查詢資料的時候,不同表有同名欄位,
這時候需要加上表名才能區分,
而若表名太長,使用表別名
若不想使用預設的欄位名 可以通過[as] 設定欄位別名
外連線
外連線 【掌握】--以某一張表為基表 進行相關查詢
outer join 以某張表為主,取出裡面的所有記錄,
然後每條與另外一張表進行連線,
不管能不能匹配上條件,最終都會保留,
能匹配,正確保留;
不能匹配其他表的欄位都置空null
分類:分為兩種 左連線,右連線
left join 左外連線---左連線,以左表為主
right join 右外連線---右連線,以右表為主
基本語法:
左表 left/right join 右表
on 左表.欄位 = 右表.欄位;------條件必須有
交叉連線
交叉連線【幾乎不用】
基本不用這個連線查詢
cross join:從一張表中迴圈取出每一條記錄,
每條記錄都會去另一張表中進行匹配;
匹配結果一定保留(無條件匹配)------笛卡爾集;
而連線就會增加(保留),形成的結果就是笛卡爾集;
基本語法:
左表 cross join 右表;
等價於 from 左表,右表;------沒有條件
笛卡爾集沒有意義,應該儘量避免(交叉連線沒用)
存在的價值:
保證連線的結構的完整性
自然連線
自然連線【很少用】
natural join 自然連線 就是系統自動匹配連線條件
系統以欄位名字作為匹配模式(同名欄位作為欄位,多個同名欄位都作為條件)
自然連線:可以分為 自然內連線 和 自然外連線
內連線 natural left join 自然左外連線
其實:內連線和外連線都可以模擬自然連線,使用同名欄位,合併欄位
左表 left/ right inner join 右表 on using(欄位名)
-----使用同名欄位,合併欄位
--自然內連線
select * from stu natural join cla;
--自然左外連線
select * from stu natural left join cla;
--外連線模擬自然左外連線
select * from stu left join cla using(id);