SQL的四種連線(內連線,外連線)

2021-08-11 16:22:35 字數 1737 閱讀 9289

一,內連線(inner join)

內連線(inner join):分顯式的和隱式的,返回連線表中符合連線條件和查詢條件的資料行。(所謂的連線表就是資料庫在做查詢形成的中間表)。

1.隱式的內連線

沒有inner join,形成的中間表為兩個表的笛卡爾積。

select o.id,o.order_number,c.id,c.name

from customers c,orders o

where c.id=o.customer_id;

2.顯示的內連線

一般稱為內連線,有inner join,形成的中間表為兩個表經過on條件過濾後的笛卡爾積。

select o.id,o.order_number,c.id,c.name

from customers c inner join orders o on c.id=o.customer_id;

二,外連線(左外,右外,全外)

外連不但返回符合連線和查詢條件的資料行,還返回不符合條件的一些行。

1.左外連線(left outer join)

左向外聯接的結果集包括 left outer子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
select o.id,o.order_number,o.customer_id,c.id,c.name

from orders o left outer join customers c on c.id=o.customer_id;

2.右外連線(right outer join)

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
select o.id,o.order_number,o.customer_id,c.id,c.name

from orders o right outer join customers c on c.id=o.customer_id;

3.全外連線(full outer join)

完整外部聯接返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。
select o.id,o.order_number,o.customer_id,c.id,c.name

from orders o full outer join customers c on c.id=o.customer_id;

三,聯合查詢(union/union all)

union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select語句中的列的順序必須相同。

select column_name(s) from table_name1

union

select column_name(s) from table_name2

union 與 unionall區別在於是否剔除重複的查詢資料

SQL 內連線,外連線

假設一堆男女在教堂,有夫婦有單身的,假設男為左表,女為右表 教父說 結了婚的人請出去,結了婚的人請手拉手,於是結了婚的男女站了起來,這就是inner 內連 教父說 男的並且和這些男的結婚的女的請出去,結了婚的人請手拉手,於是,結了婚的夫婦手拉手出去,單身的男的也出去了。這就是 left 左連 教父說...

SQL 內連線 外連線

通過where 或者 inner join保留表中的一部分,最直觀就是說 表在選擇投影後,得到的各個元組內的元素都不會是空的。inner join 表中至少乙個匹配時,返回行。左連線 即使右表中沒有匹配,也從左表中返回所有行。因次,元組中的元素若有來自右表,則該元素為空。右連線 即使左表中沒有匹配,...

sql連線(內連線 外連線 全連線)

現有table for report 1和table for report 2,詳情如下 table for report 1有num欄位,c1,c2,c3欄位。資料如下 num c1 c2 c3 1 15001346690 11 12 13 2 13329921100 21 22 23 3 189...