工作面試必備:SQL 中的各種連接 JOIN 的區別總結!
前言
盡管大多數開發者在日常工作中經常用到Join操作,如Inner Join、Left Join、Right Join等,但在面對特定查詢需求時,選擇哪種Join類型以及如何使用On和Where子句往往成為一大挑戰。特別是對于初學者而言,這些概念可能顯得抽象且難以區分。在實際應用中,錯誤地使用Join類型或混淆On與Where子句的功能,都可能導致數據查詢結果的不準確或遺漏關鍵信息。
今天大姚給大家講解一下SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、Where區別和用法。
SQL連接JOIN圖解
圖片
數據庫表結構和對應數據
本文咱們用的是MS Sql Server作為數據操作示例。
Students 學生表:
圖片
Class 班級表:
圖片
Join(where聯立查詢)
概念:用于兩表或多表之間數據聯立查詢。
select * from Students s,Class c where s.ClassId=c.ClassId
圖片
Inner Join(內連接查詢)
概念:與Join相同,兩表或多表之間聯立查詢數據,因此我們在使用多表join查詢的時候既可以使用where關聯,也可以是inner join關聯查詢。
select * from Students s inner join Class c on s.ClassId=c.ClassId
圖片
Left Join(左連接查詢)
概念:以左表中的數據為主,即使與右表中的數據不匹配也會把左表中的所有數據返回。
select * from Students s left join Class c on s.ClassId=c.ClassId
圖片
Right Join(右連接查詢)
概念:與Left Join的用法相反,是以右表中的數據為主,即使左表中不存在匹配數據也會把右表中所有數據返回。
select * from Students s right join Class c on s.ClassId=c.ClassId
圖片
Full Join(全連接查詢)
概念:返回表中所有的數據數據,無論匹配與否。
select * from Students s Full JOIN Class c on s.ClassId=c.ClassId
圖片
On、Where的異同
這兩個概念中也是絕大多數人無法區分到底它們兩者之間有何區別,我什么時候使用On,什么時候使用Where,下面將分別展示兩者的異同。
On條件的作用:
ON的使用無論是左右內全都使用到了On來進行關聯!
對于inner join 的作用就是起到了與where相同的作用條件篩選:
select * from Students s inner join Class c on s.ClassId=c.ClassId and s.Sex='男'
圖片
對于左右連接而言,無論查詢條件是否滿足都會返回對應所指向的那邊的所有數據:
select * from Students s left join Class c on s.ClassId=c.ClassId and s.Sex='男'
圖片
對于Full Join 而言無論,只有同時滿足的時候才會返回全部關聯的數據,假如有一方不滿足返回以左邊的表數據為基準返回:
--全連接
select * from Students s full join Class c on s.ClassId=c.ClassId
--全連接加on查詢
select * from Students s full join Class c on s.ClassId=c.ClassId and s.Sex='男'
圖片
圖片
WHERE條件的作用:
WHERE條件在臨時表生成后的過濾階段應用,對最終結果進行篩選。此時LEFT JOIN的“保留左表所有記錄”特性已失效,WHERE 會過濾掉不符合條件的行(包括左表記錄),如下所示:
僅返回右表
ClassId=1
的匹配記錄,左表中無匹配的記錄會被過濾掉。
select * from Students s left join Class c on s.ClassId=c.ClassId WHERE c.ClassId=1
區別總結:
一句話概括:ON用作于生成臨時表時的條件篩選,WHERE用作于對臨時表中的記錄進行過濾。
- ON條件是在生成臨時表時使用的條件,它不管ON中的條件是否為真,都會返回左邊表中的記錄(以左連接為例)。
- WHERE條件是在臨時表生成好后,再對臨時表產生的數據進行過濾條件篩選。