在數據庫查詢中,經常會用到兩個有關聯的表進行查詢,需要把兩個表中的數據按照某些條件查出來,這時就可以使用連接查詢
連接查詢分為三種:內連接、外連接和交叉連接
1. 內連接
內連接inner join ,和join是一個東西,join是inner join的簡寫。 例如: select * from TestA a inner join TestB b on a.id = b.aId
內連接是返回被連接表(a表和b表)中所有的列,包括重復列
在實際使用中,可能連接查詢會應用在a表與b表的數據關系是一對多(比如一個學生可以選擇好多門課),b表對a表是一對一這樣的關系查詢中,此時,查詢結果的行數是一對一那張表(b表)中符合查詢條件的行數
2. 外連接
外連接分為: 左(外)連接、右(外)連接、全連接
左(外)連接 left (outer) join,左連接是以左邊表為主表,右邊表為輔表,返回左表中的所有行,如果左表中的行在右表中沒有匹配行,那么結果中右表的列返回空值。如果左表和右表的數據關系是一對多的關系,那么查詢結果中,左表可能會有重復數據。
右(外)連接 right (outer) join,右外連接和左外連接正好相反,右外連接是以右表為主表,左表為輔表,會返回右表中的所有行,如果右表中的行在左表中沒有匹配行,那么結果中左表的列返回空值。如果右表與左表是一對多關系,那么查詢結果中,右表可能有重復數據。
全連接 full join,全連接就是把左表和右表的數據全部都查詢出來,如果左表的行在右表中沒有匹配行,那么結果中右表的列返回空值,如果右表的行在左表中沒有匹配行,那么結果中左表中的列返回空值。
3. 交叉連接
交叉連接 cross join,使用交叉連接時,如果不帶where條件,那么查詢結果返回的就是著名的笛卡爾積,也就是左表中的每一條數據都會逐條與右表中每一條數據進行匹配,查詢結果返回的行數是左表行數與右表行數的乘積。
帶where條件時,返回的就是符合條件的行數
總結:
左連接:以左表為主,左邊表的數據肯定會完整展示(可能會有重復),右表沒對應的就是null;
右連接:以右表為主,右表數據肯定會完整展示(可能會有重復),左表沒對應的就是null;
全連接:兩個表的數據都會完整展示(也可能會有重復數據);
交叉連接:不帶where條件時查詢結果就是笛卡爾積