1. 程式人生 > >SQL中,表之間的左聯和右聯是什麼意思

SQL中,表之間的左聯和右聯是什麼意思

定義:

左聯: 首先取出a表中所有資料,然後再加上與a,b匹配的的資料

內聯:兩個表a,b相連線,要取出id相同的欄位

右聯:指的是首先取出b表中所有資料,然後再加上與a,b匹配的的資料


表關聯是在SQL中非常常用的東西

join全連線:查詢左表(主表)和右表(子表)都存在的資料

left join左聯接:查詢左表(主表)為查詢全集,右表(子表)存在的關聯出來,不存在的為NULL。

right join右連線:剛好和left join相反

full join全集關聯:相當於把left join 和right join 綜合起來,即左表(主表)和右表(子表)關聯,如果能關聯到的顯示,如果左有右表沒有,則右表顯示NULL,如果右表有左表沒有 則左表顯示NULL

舉個例子,你現在有兩張表,學生表和成績表

學生表中有兩列資料:學生ID和學生姓名,成績表中有三列資料,成績ID、學生ID和總分數

假設學生表中有三行資料,ID為1,2,3,姓名分別為張三,李四,趙五

假設成績表中也有三行資料:成績ID為1,2,3,學生ID為 2,3,5,成績為60,85,90

如果你寫 select * from 學生表 a join 成績表 b on a.學生ID=b.學生ID

會出現學生ID為2,3的兩條資料

如果你寫 select * from 學生表 a left join 成績表 b on a.學生ID=b.學生ID

會出現學生

ID為1,2,3的三條資料,但學生ID為1的那條資料關聯到的成績表資訊全為NULL

如果你寫 select * from 學生表 a  right join 成績表 b on a.學生ID=b.學生ID

會出現學生ID為2,3,5的三條資料,但學生ID為5的那條資料關聯到的學生表資訊全為NULL

如果你寫 select * from 學生表 a  full join 成績表 b on a.學生ID=b.學生ID

會出現學生ID為1,2,3,5的全部資料,但學生ID為5的那條資料關聯到的學生表資訊全為NULL,學生ID為1的那條資料關聯到的成績表資訊全為NULL

左聯就是左表作為主表,左連線where隻影向右表,右聯與之相反。

select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID
左連線後的檢索結果是顯示tbl1的所有資料和tbl2中滿足where 條件的資料。
簡言之 Left Join影響到的是右邊的表


1 .WHERE子句中使用的連線語句,在資料庫語言中,被稱為隱性連線。INNER JOIN……ON子句產生的連線稱為顯性連線。(其他JOIN引數也是顯性連線)WHERE INNER JOIN產生的連線關係,沒有本質區別,結果也一樣。但是!比較新的資料庫語言基本上已經拋棄了隱性連線,全部採用顯性連線了。

一般要使得資料庫查詢語句效能好點遵循一下原則:
在做表與表的連線查詢時,大表在前,小表在
不使用表別名,通過欄位字首區分不同表中的欄位
查詢條件中的限制條件要寫在表連線條件前
儘量使用索引的欄位做為查詢條件