天天看點

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