sql的内连接、左连接、右连接
?多表聯查時,有些數據沒有對應另一個表的數據,即對應為空。
內連接:僅選出兩張表中互相匹配的記錄,有對應為空的則篩選出去,這些數據就不會被搜索出來。內連接是兩個表中都必須有連接字段的對應值的記錄,數據才能檢索出來。
語法:select 字段 from 表1 inner join 表2?on 條件;
select * from 表1,表2where?條件? ? from后面直接寫兩個表名,這樣寫等價于內連接 如果不寫?where?條件,相當于笛卡爾積,即輸出表1所有數據對應表2所有數據的結果。
外連接:包括左連接、右連接等。
? ? ? ? 左連接:會保留一部分對應為空的數據,語法為select 字段 from 表1 left join 表2?on 條件,只返回左表(即表1)中不符合連接條件單符合查詢條件的數據行,即所有表1的數據。
? ? ? ? 右連接:和左連接相反,會保留一部分對應為空的數據,語法為select 字段 from 表1 right join 表2?on 條件,只返回右表(即表2)中不符合連接條件單符合查詢條件的數據行,即所有表2的數據。
WHERE條件放在ON后面查詢的結果是不一樣的。
ON條件:是過濾兩個鏈接表笛卡爾積形成中間表的約束條件。
WHERE條件:在有ON條件的SELECT語句中是過濾中間表的約束條件。在沒有ON的單表查詢中,是限制物理表或者中間查詢結果返回記錄的約束。在兩表或多表連接中是限制連接形成最終中間表的返回結果的約束。
從這里可以看出,將WHERE條件移入ON后面是不恰當的。推薦的做法是:
ON只進行連接操作,WHERE只過濾中間表的記錄。
此段轉自:深入理解SQL的四種連接-左外連接、右外連接、內連接、全連接 - New.Young - 博客園
eg:
學生表
班級表
?學生表的classid和班級表的id對應,關系為多對一??
內連接:
select * from student inner join classes on student.classid=classes.id結果:
左連接(推薦):?
select * from student left join classes on student.classid=classes.id結果:
可見,左表的數據是全的?
右連接:
select * from student right join classes on student.classid=classes.id結果:
可見右表的數據是全的
總結
以上是生活随笔為你收集整理的sql的内连接、左连接、右连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ora257 linux,ORA-002
- 下一篇: sql怎么实现2个表连接_多表上SQL连