內 左 右 全連線查詢

2021-09-17 02:59:49 字數 1885 閱讀 8766

sql中的連線查詢有inner join(內連線)、left join(左連線)、right join(右連線)、full join(全連線)四種方式,它們之間其實並沒有太大區別,僅僅是查詢出來的結果有所不同。

例如我們有兩張表:

orders表通過外來鍵id_p和persons表進行關聯。

我們使用inner join對兩張表進行連線查詢,sql如下:

select p.lastname, p.firstname, o.orderno

from persons p

inner join orders o

on p.id_p=o.id_p and 1=1  --用and連線多個條件

order by p.lastname

此種連線方式orders表中id_p欄位在persons表中找不到匹配的,則不會列出來。

注意:單純的select * from a,b是笛卡爾乘積。比如a表有5條資料,b表有3條資料,那麼最後的結果有5*3=15條資料。

但是如果對兩個表進行關聯:select * from a,b where a.id = b.id 意思就變了,此時就等價於:

select * from a inner join b on a.id = b.id。即就是內連線。

但是這種寫法並不符合規範,可能只對某些資料庫管用,如sqlserver。推薦最好不要這樣寫。最好寫成inner join的寫法。

我們使用left join對兩張表進行連線查詢,sql如下:

select p.lastname, p.firstname, o.orderno

from persons p

left join orders o

on p.id_p=o.id_p

order by p.lastname

查詢結果如下:

可以看到,左表(persons表)中lastname為bush的行的id_p欄位在右表(orders表)中沒有匹配,但查詢結果仍然保留該行。

我們使用right join對兩張表進行連線查詢,sql如下:

select p.lastname, p.firstname, o.orderno

from persons p

right join orders o

on p.id_p=o.id_p

order by p.lastname

查詢結果如下:

orders表中最後一條記錄id_p字段值為65,在左表中沒有記錄與之匹配,但依然保留。

我們使用full join對兩張表進行連線查詢,sql如下:

select p.lastname, p.firstname, o.orderno

from persons p

full join orders o

on p.id_p=o.id_p

order by p.lastname

查詢結果如下:

查詢結果是left join和right join的並集。

這些連線查詢的區別也僅此而已。

SQL左 右 內 全連線

典型的聯接運算,包括在查詢語句中使用像 或 之類的比較運算子。內聯接使用比較運算子根據每個表共有的列的值匹配兩個表中的行。例如,檢索表 a 和 b 表中 id 與 pid 相同的項,查詢語句如下所示 select a.b.from a inner join b on a.id b.pid 查詢結果如...

左右內連線

例表a aid adate 1 a1 2 a2 3 a3 表bbid bdate 1 b1 2 b2 4 b4 兩個表a,b相連線,要取出id相同的字段 select from a inner join b on a.aid b.bid這是僅取出匹配的資料.此時的取出的是 1 a1 b1 2 a2 ...

資料庫外連線(左 右 全) 內連線

1sql指令碼 0表資料 1左外連線 應用 結果 2右外連線 應用 結果 3全外連線 測試sql 4內連線 測試sql 結果 1 sql指令碼 set foreign key checks 0 table structure for clazz drop table if exists clazz ...