1. 程式人生 > >SQL左、右、內、全連線

SQL左、右、內、全連線

1.前言

本文將實現兩表的多種連線方式,先存在兩個表如下所示:

2.內聯接

典型的聯接運算,包括在查詢語句中使用像 =  或 <> 之類的比較運算子。內聯接使用比較運算子根據每個表共有的列的值匹配兩個表中的行。

例如,檢索 a 和 b 表中 a 表中 id 與 b 表中 pid 相同的項,查詢語句如下所示:

select a.*,b.* from a inner join b on a.id=b.pid

查詢結果如下所示:

3.外連線

外聯接可以是左向外聯接、右向外聯接或完整外部聯接。在 FROM子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:

3.1 左外連線(左連線)

左向外聯接的結果集包括  LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

例如將之前的表 a 的 id 與表 b 的 pid 進行左連線,查詢語句如下所示:

select a.*,b.* from a left join b on a.id=b.pid

查詢結果如下所示:

3.2 右外連線(右連線)

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。

例如將之前的表 a 的 id 與表 b 的 pid 進行右連線,查詢語句如下所示:

select a.*,b.* from a right join b on a.id=b.pid

查詢結果如下所示:

3.3 完全連線(全連線)

select a*,b.* from a full join b on a.id=b.pid

查詢結果如下所示:

其結果與以下查詢語句等價:

select  a.*,b.* from a left outer join b on a.id=b.pid
union
select a.*,b.* from a right outer join b on a.id=b.pid