最近在看別人**的時候,總是碰到諸如join on的sql語句,上課那會兒老師也仔細的講過,
單獨的拿出來看的話也是很簡單的,只是放在那樣複雜的sql語句中,閱讀起來還是很費勁。
正好今天不怎麼忙,查查資料在總結一下。
工作中,我們都習慣了只查詢一張表中的資料,如果業務中需要去查詢另外一張表中的資料時,
我們往往習慣於遍歷查詢的資料然後根據外來鍵字段去查詢另外一張表,這樣做沒有什麼問題。
但是當我們需要關聯3張表甚至4張表,或者在一些大型的專案中需要些一些非常複雜的sql語句
的時候我們發現,這樣會使業務層的**非常非常複雜。
這個時候,關聯表查詢就會變得非常重要。
基本定義:
left join (左連線):返回包括左表中的所有記錄和右表中連線字段相等的記錄。
right join (右連線):返回包括右表中的所有記錄和左表中連線字段相等的記錄。
inner join (等值連線):只返回兩個表中連線字段相等的行。
full join (全外連線):返回左右表中所有的記錄和左右表中連線字段相等的記錄。
現在呢舉個例子:
a表
id name
1 小王
2 小李
3 小劉
b表id a_id job
1 2 老師
2 4 程式設計師
select a.name,b.job from a a inner join b b on a.id=b.a_id
只能得到一條記錄
小李 老師
select a.name,b.job from a a left join b b on a.id=b.a_id
三條記錄
小王 null
小李 老師
小劉 null
select a.name,b.job from a a right join b b on a.id=b.a_id
兩條記錄
小李 老師
null 程式設計師
select a.name,b.job from a a full join b b on a.id=b.a_id
四條資料
小王 null
小李 老師
小劉 null
null 程式設計師
以上的具體用法就看你的業務需求了,比如查詢多有人的職業,沒有職業的設定為null,左連線無疑是最
正確的,再比如查詢所有職業對於的人,沒有所對應的人就設定為0.右連線更為正確。
當然在工作的我們會看到關聯好幾張表的情況,這時候我們會多寫幾個join on語句,具體是哪個連線要按
具體的業務而定。
說說左連線吧
select a.name,b.job
from
a a left join b b
(上面是查出兩張表所有的資料,需要哪些資料再根據條件進行篩選就好啦)
on a.id=b.a_id (不太理解這裡的作用 我寫的時候發現返回的資料並不是兩個id相等的而是所有)
where
(篩選的條件)
內連線,左連線,右連線,全外鏈結
菜鳥一枚 最近在看別人 的時候,總是碰到諸如join on的sql語句,上課那會兒老師也仔細的講過,單獨的拿出來看的話也是很簡單的,只是放在那樣複雜的sql語句中,閱讀起來還是很費勁。正好今天不怎麼忙,查查資料在總結一下。工作中,我們都習慣了只查詢一張表中的資料,如果業務中需要去查詢另外一張表中的資...
內連線,左外連線,右外連線,全連線
1.內連線我們通常用的連線,表表連線只顯示交集資料 2.外連線分左外連線 table1 left outer join on table2 和右外連線table1 right outer join on table2 和全連線 table1 full outer join on table2 2.1...
內連線,外連線,左連線,右連線,全連線
連線是指將關聯式資料庫中的兩個表根據內容一定的條件連線成乙個表.內連線是最常用的鏈結,也叫等值鏈結,最常見的格式是 selecta.b.fromta as a tb as b wherea.id b.id 或者 selecta.b.fromtaasainnerjoin tbasb on a.id b...