sql中的連線查詢有inner join(內連線)、left join(左連線)、right join(右連線)、full join(全連線)四種方式,它們之間其實並沒有太大區別,僅僅是查詢出來的結果有所不同。
例如我們有兩張表:
orders表通過外來鍵id_p和persons表進行關聯。
我們使用inner join對兩張表進行連線查詢,sql如下:
select p.lastname, p.firstname, o.orderno此種連線方式orders表中id_p欄位在persons表中找不到匹配的,則不會列出來。from persons p
inner join orders o
on p.id_p=o.id_p and 1=1 --用and連線多個條件
order by p.lastname
注意:單純的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 ...