SQL中的內連線、左連線、右連線、全連線、交叉連線
sql連線查詢可分為三大類:內連線、外連線、交叉連線。外連線又可分為左連線,右連線,全連線。
我們最常用的應該是內連線,多表聯合查詢的時候使用的諸如“select * from a,b where a.uid=b.uid;”這就是一個典型內連線查詢的例子,實際上這句與“select * form a inner join b on a.uid=b.uid”是等價的,後者逼格明顯高了許多。下面來詳細說一說。
舉例資料庫表如下:
1.內連線
獲取兩個表的公共部分,即右表中滿足與左表間查詢條件的對應項。
1.1.等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。
1.2.不等值連線
1.3.自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。
總結:內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。
select * from book as a,stu as b where a.sutid = b.stuid select * from book as a inner join stu as b on a.sutid = b.stuid //這裡的join可省略
內連線查詢到滿足where 或者 on 後面查詢條件的並且不存在NULL值列的資料。
2.外連結
2.1.左聯接:左邊的表不加限制,即以左表為基準,將a.stuid = b.stuid的資料進行連線,查詢到的滿足條件的項全部顯示,而左表中存在,對應右表不存在的項,將左表資料顯示,對應右表中查不到的結果列設為NULL:
select * from book as a left join stu as b on a.sutid = b.stuid
2.2.右連線:右邊的表不加限制,即以右表為基準,將a.stuid = b.stuid的資料進行連線,查詢到滿足條件的項全部顯示,而右表中存在,對應左表中不存在的項,將右表資料顯示,對應的左表查中不到的結果列設為NULL:
select * from book as a right join stu as b on a.sutid = b.stuid
2.3.全連線:兩個表都不加限制,即完整外部聯接,返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列設為NULL。如果表之間有匹配行,則整個結果集行包含基表的資料值。實際上就是,顯示兩個表的所有對應的資料列,而在另一個表找不到對應資料的,就設為NULL。
select * from book as a full outer join stu as b on a.sutid = b.stuid
外連線允許NULL值,定好基準表後,基準表資料全部要查詢到,而不滿足在where 或 on 後查詢條件的非基準表資料也要返回,返回值為NULL。
3.交叉連線
交叉連線:交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。
select * from book as a cross join stu as b order by a.id
交叉連線好理解,就是左表每一項都與右表每一項做連線,不存在NULL值。