天天看點

SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

前言:

  今天主要的内容是要講解SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別和用法,不用我說其實前面的這些基本SQL文法各位攻城獅基本上都用過。但是往往我們可能用的比較多的也就是左右連接配接和内連接配接了,而且對于許多初學者而言不知道什麼時候該用哪種文法進行查詢,并且對于左右,或者内連接配接查詢的時候關于ON 和Where 的作用也是模糊不清的,說不出其中的一個大概的差别,是以接下來請容我把它們好好描述一遍。

資料庫(MS Sql Server)表結構和對應資料:

Students 學生表:

SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

Class 班級表:

SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

Join(where聯立查詢):

概念:用于兩表或多表之間資料聯立查詢

select * from Students s,Class c where s.ClassId=c.ClassId
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

 

Inner Join(内連接配接查詢):

概念:與Join相同,兩表或多表之間聯立查詢資料,是以我們在使用多表join查詢的時候既可以使用where關聯,也可以是inner join關聯查詢

select * from Students s inner join  Class c  on s.ClassId=c.ClassId
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

Left Join(左連接配接查詢):

概念:以左表中的資料為主,即使與右表中的資料不比對也會把左表中的所有資料傳回

select * from Students s left join  Class c  on s.ClassId=c.ClassId
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

Right Join(右連接配接查詢):

概念:與Left Join的用法相反,是以右表中的資料為主,即使左表中不存在比對資料也會把右表中所有資料傳回

select * from Students s right join  Class c  on s.ClassId=c.ClassId
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

Full Join(全連接配接查詢):

概念:傳回表中所有的資料資料,無論比對與否

select * from Students s Full JOIN  Class c  on s.ClassId=c.ClassId
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

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='男'
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

對于左右連接配接而言,無論查詢條件是否滿足都會傳回對應所指向的那邊的所有資料:

select * from Students s left join  Class c  on s.ClassId=c.ClassId and s.Sex='男'        
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

對于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='男' 
      
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別
SQL中關于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where差別

Where的用法就不描述了因為這個咱們用的都比較多,下面說明一下兩者的概念問題:

1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會傳回左邊表中的記錄(以左連接配接為例)。

2、where條件是在臨時表生成好後,再對臨時表産生的資料進行過濾條件篩選。

結論:on用作于生成臨時表時的條件篩選,where用作于對臨時表中的記錄進行過濾。

總結:

  最後我想說的是,有時候我們總認為概念性的東西很簡單而忽視了實踐。其實往往一些基礎性的東西才是我們為往後構造的萬丈高樓的前提,堅持實踐,堅持動手,你會發現許多你沒有想到過的問題喲!

作者:追逐時光者

作者簡介:一個熱愛程式設計,善于分享,喜歡學習、探索、嘗試新事物,新技術的程式猿。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如果該篇文章對您有幫助的話,可以點一下右下角的【♥推薦♥】,希望能夠持續的為大家帶來好的技術文章,文中可能存在描述不正确或錯誤的地方,歡迎指正、補充,不勝感激 !