SQL中關於Join、Inner Join、Left Join、Right Join、Full Join、On、 Where區別
阿新 • • 發佈:2021-07-30
前言:
今天主要的內容是要講解SQL中關於Join、Inner Join、Left Join、Right Join、Full Join、On、 Where區別和用法,不用我說其實前面的這些基本SQL語法各位攻城獅基本上都用過。但是往往我們可能用的比較多的也就是左右連線和內連線了,而且對於許多初學者而言不知道什麼時候該用哪種語法進行查詢,並且對於左右,或者內連線查詢的時候關於ON 和Where 的作用也是模糊不清的,說不出其中的一個大概的差別,因此接下來請容我把它們好好描述一遍。
資料庫(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來進行關聯:
對於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的用法就不描述了因為這個咱們用的都比較多,下面說明一下兩者的概念問題:
1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄(以左連線為例)。
2、where條件是在臨時表生成好後,再對臨時表產生的資料進行過濾條件篩選。
結論:on用作於生成臨時表時的條件篩選,where用作於對臨時表中的記錄進行過濾。
總結:
最後我想說的是,有時候我們總認為概念性的東西很簡單而忽視了實踐。其實往往一些基礎性的東西才是我們為往後構造的萬丈高樓的前提,堅持實踐,堅持動手,你會發現許多你沒有想到過的問題喲!