為了從兩個表中獲取資料,我們有時會用JOIN將兩個表連線起來。通常有以下幾種連線方式:
JOIN or INNER JOIN(內連線) : 這兩個是相同的,要求兩邊表同時有對應的資料,返回行,任何一邊缺失資料就不顯示。
LEFT JOIN(左外連線):即使右邊的表中沒有匹配,也從左表返回所有的行。
RIGHT JOIN(右外連線):即使左邊的表中沒有匹配,也從右表返回所有的行。
FULL JOIN(全外連線):只要其中一個表中存在匹配就返回行。
如例,有grade表(課程號sn,分數scroe,學號id),student表(學號id,學生姓名name),要查詢學生的姓名和成績
當JOIN或是INNER JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
join
grade
as
g
on
s.id = g.id
或者
SELECT
s.
name
,g.sn,g.score
from
student
as
s
inner
join
grade
as
g
on
s.id = g.id
結果集如下
當LEFT JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
left
join
grade
as
g
on
s.id = g.id
結果集如下
當RIGHT JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
right
join
grade
as
g
on
s.id = g.id
結果集如下
當FULL JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
full
join
grade
as
g
on
s.id = g.id
結果集如下
注意,兩個表連線時用on,在使用left join(right join或full join)時,on與where的區別是:
on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄
where條件是在臨時表生成好後再對臨時表進行過濾的條件,這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。如下圖,
on條件為黃色部分
SELECT
s.
name
,g.sn,g.score
from
student
as
s
left
join
grade
as
g
on
s.id = g.id
and
score =90
SELECT
s.
name
,g.sn,g.score
from
student
as
s
left
join
grade
as
g
on
s.id = g.id
where
score =90
下面看下SQL中join的各種用法
1.自然連線(natural join)
自然連線將表中具有相同名稱的列自動進行匹配,自然連線不必指定任何同等連線條件也不能認為指定哪些列需要被匹配,自然連線得到的結果表中,兩表中名稱相同的列只出現一次。
select
*
from
employee natural
join
department;
2.內連線(inner join):產生的結果是A和B的交集(相同列裡面的相同值)
內連線查詢能將左表和右表中能關聯起來的資料連線後返回,返回的結果就是兩個表中所有相匹配的資料。
select
*
from
TableA
as
A
inner
join
TableB B
on
A.PK = B.PK;
select
*
from
TableA
as
A
inner
join
TableB B
on
A.PK > B.PK;
3.外連線(outer join)
內連線是要顯示兩張表的記憶體,而外連線不要求如此,外連線可以依據連線表保留左表,右表或全部表的行為而分為左外連線右外連線和全連線。
select
*
from
TableA
as
A
left
(
right
/
full
)
join
TableB
as
B
on
A.PA = B.PK;
Full Join:產生的結果是A和B的並集(如果沒有相同的值會用null作為值)
Left Join:產生表A的完全集,而B表中匹配的則有值(沒有匹配的則以null值取代)
Right Join:產生表B的完全集,而A表中匹配的則有值(沒有匹配的則以null值取代)
4.交叉連線(cross join)
又稱笛卡爾連線,交叉連線返回兩個集合的笛卡爾積。
select
*
from
TableA
cross
join
TableB;
參考連結:http://mazhuang.org/2017/09/11/joins-in-sql/
總結
以上所述是小編給大家介紹的SQL語句中不同的連線join及join的用法,希望對大家有所幫助。