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);