數據庫之左連接(left join )、右連接(right join)、內連接(inner join)


在我們開發中會經常用到數據庫的左連接和右連接,他們的區別可以概括爲一句話來表示:即左連接where隻影響右表,右連接where隻影響到左表

數據庫中的左連接(left join)和右連接(right join)區別

一、左連接(Left Join)

select * from table1 Left Join table2 where table1.ID = table2.ID

左連接後的檢索結果是顯示table1的所有數據和table2中滿足where 條件的數據,即 Left Join影響到的是右邊的表

二、右連接(Right Join)

select * from table1 Right Join table2 where table1.ID = table2.ID

檢索結果是table2的所有數據和table1中滿足where 條件的數據,即 Right Join影響到的是左邊的表。

三、內連接(inner join)

select * FROM table1 INNER JOIN table2 ON table1.ID = table2.ID

上面sql與下面sql功能一樣:

 select * from table1,table2 where table1.id=table2.id

四、其他內容:

1、WHERE子句中使用的連接語句,在數據庫語言中,被稱爲隱性連接。INNER JOIN……ON子句產生的連接稱爲顯性連接。(其他JOIN參數也是顯性連接)WHERE 和INNER JOIN產生的連接關係,沒有本質區別,結果也一樣。但是隱性連接隨着數據庫語言的規範和發展,已經逐漸被淘汰,比較新的數據庫語言基本上已經拋棄了隱性連接,全部採用顯性連接了。

2、無論怎麼連接,都可以用join子句,但是連接同一個表的時候,注意要定義別名,否則產生錯誤

(1)inner join:理解爲“有效連接”,兩張表中都有的數據纔會顯示

(2)left join:理解爲“以左爲主”,比如on a.field=b.field,則顯示a表中存在的全部數據及a\b中都有的數據,A中有、B沒有的數據以null顯示

(3) right join:理解爲“以右爲主”,比如on a.field=b.field,則顯示B表中存在的全部數據及a\b中都有的數據,B中有、A沒有的數據以null顯示

(4)full join:理解爲“全連接”,兩張表中所有數據都顯示,實際就是inner +(left-inner)+(right-inner)

3、一般要使得數據庫查詢語句性能好點遵循以下原則:

(1)在做表與表的連接查詢時,以大表爲主,小表爲輔

(2)不使用表別名,通過字段前綴區分不同表中的字段

(3)查詢條件中的限制條件要寫在表連接條件前

(4)儘量使用索引的字段做爲查詢條件

完。

如果你看到了這裏,覺得文章寫得不錯就給個贊,關注公衆號,可訂閱更多幹貨?如果你覺得那裏值得改進的,請給我留言,一定會認真查詢,修正不足,謝謝!
公衆號:學軟件開發就這麼簡單

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章