本章的內容為SQL的鏈接:
1.內連接
2.外連接
3.交叉鏈接
案例表:Students表和Class表
Students:
Class:
內連接:
說明:內連接為典型的鏈接運算,使用=或<>之類的比較運算符,包括相等鏈接和自然鏈接。將多表共有的列匹配相同的行。
其中,內連接分為:隱式内連接和顯示內連接。
隱式內連接:使用逗號將兩個表鏈接起來,在where中指定鏈接條件。
SELECT * FROM dbo.Student s, dbo.Class c WHERE s.ClassId=c.ClassId
顯示內連接:使用inner join或join的方式鏈接表,在on中指定鏈接條件。
SELECT * FROM dbo.Student s JOIN dbo.Class c ON c.ClassId = s.ClassId
SELECT * FROM dbo.Student s INNER JOIN dbo.Class c ON c.ClassId = s.ClassId
隱式鏈接和顯式鏈接的區別:
1.在語法上有區別,在結果上沒有區別。
2.顯式鏈接更加直觀和易於理解。
3.顯式鏈接明確指定鏈接關係,使得鏈接關係更加明確清晰。隱式鏈接沒有。
4.簡單的表連接隱式鏈接更爲方便,複雜的表連接使用顯式鏈接邏輯更爲清晰。
隱式鏈接和顯式鏈接的區別:
沒有區別,inner join等同於join等同於where。
外連接:
說明:外連接包括左連接、右連接和全連接,其中左連接返回左表行,右連接返回右表行,全連接返回左右表的所有行。
左鏈接:將兩表或多表關聯起來,返回左表所有行和右表條件匹配的行。
SELECT * FROM dbo.Students s LEFT JOIN dbo.Class c on s.ClassId=c.ClassId
結果:返回左表所有的行和對應的右表匹配的行,右表沒有匹配的行,則為null值。
右鏈接:將兩表或多表關聯起來,返回右表所有行和左表條件匹配的行。
SELECT * FROM dbo.Students s RIGHT JOIN dbo.Class c on s.ClassId=c.ClassId
結果:返回右表的所有行和對應的左表匹配行,左表沒有匹配的行,則為null值。
全連接:將兩表或多表關聯起來,返回左表和右表所有行。
SELECT * FROM dbo.Students s FULL JOIN dbo.Class c ON c.ClassId = s.ClassId
結果:返回左右表所有匹配的行,沒有匹配的行則為null值。
交叉鏈接(迪卡爾積查詢):
說明:
1.不依賴任何條件來匹配行,而是返回所有可能的組合行。
2.不接where條件,返回的行數為A表的所有行*B表的所有行(A*B行)。
3.如果接where條件,則會選擇所選取的表匹配的行*另一個表的所有行。
和全連接一樣,分為隱式和顯式的區別。
隱式交叉鏈接:使用逗號將兩個表鏈接起來,不帶on子句。
SELECT * FROM dbo.Students s, dbo.Class c WHERE s.Name='熊大'
顯式交叉鏈接:使用cross join的方式鏈接表,後面不能帶on子句。
SELECT * FROM dbo.Students s CROSS JOIN dbo.Class c WHERE s.Name='熊大'
結果:class表一共有四條數據,students查詢一條數據,最終結果出現四條數據。