SQL表連線的幾種方式

2021-06-09 23:40:17 字數 1582 閱讀 7240

一、關係代數

合併資料集合的理論基礎是關係代數,它是由e.f.codd於2023年提出的。

在關係代數的形式化語言中,用表、或者資料集合表示關係或者實體,用行表示元組,用列表示屬性

關係代數包含以下8個關係運算子 1.

選取:返回滿足指定條件的行。 2.

投影:從資料集合中返回指定的列。 3.

笛卡爾積:是關係的乘法,它將分別來自兩個資料集合中的行以所有可能的方式進行組合。 4.

5.交:返回兩個資料集合所共有的行。 6.

差:返回只屬於乙個資料集合的行。 7.

連線:在水平方向上合併兩個表,其方法是:將兩個表中在共同資料項上相互匹配的那些行合併起來。 8.

除:返回兩個資料集之間的精確匹配。

此外,作為一種實現現代關係代數運算的方法,sql還提供了:

子查詢:類似於連線,但更靈活;在外部查詢中,方式可以使用表示式、列表或者資料集合的地方都可以使用子查詢的結果。

二、連線型別

在關係代數中,連線運算是由乙個笛卡爾積運算和乙個選取運算構成的。首先用笛卡爾積完成對兩個資料集合的乘運算,然後對生成的結果集合進行選取運算,確保只把分別來自兩個資料集合並且具有重疊部分的行合併在一起。連線的全部意義在於在水平方向上合併兩個資料集合(通常是表),並產生乙個新的結果集合,其方法是將乙個資料來源中的行與另乙個資料來源中和它匹配的行組合成乙個新元組。

sql提供了多種型別的連線方式,它們之間的區別在於:從相互交疊的不同資料集合中選擇用於連線的行時所採用的方法不同。

連線方式

結果

內連線只連線匹配的行

左外連線

包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行

右外連線

包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行

全外連線

包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行

交叉連線

生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將乙個資料來源中的每個行與另乙個資料來源的每個行都一一匹配

如果from子句指定了多於乙個表引用,則查詢會連線來自多個表的行。連線條件指定各列之間(每個表至少一列)進行連線的關係。因為正在比較連線條件中的列,所以它們必須具有一致的資料型別。

select語句的from子句可以指定以下幾種型別的連線

from子句關鍵字

相應的結果集

inner join

僅對滿足連線條件的cross中的列

left outer join

乙個表滿足條件的行,和另乙個表的所有行

right outer join

與left相同,但兩個表的角色互換

full outer join

left outer 和 right outer中所有行的超集

cross join

笛卡爾乘積(所有可能的行對)

sql表連線的幾種方式

這裡有兩張表tablea和tableb,分別是姓名表和年齡表,用於我們例子的測試資料 tablea id name 1 t1 2 t2 4t4 tableb id age 1 18 2 203 19 在開發中我們的業務需求有時候是複雜的,多張表聯合查詢的時候是有多種方式的,面對不同的需求,靈活使用不...

sql表連線的幾種方式

這裡有兩張表tablea和tableb,分別是姓名表和年齡表,用於我們例子的測試資料 tablea idname1t1 2t24t4 tableb idage118 220319 在開發中我們的業務需求有時候是複雜的,多張表聯合查詢的時候是有多種方式的,面對不同的需求,靈活使用不同的表連線方式,那麼...

sql表連線的幾種方式

這裡有兩張表tablea和tableb,分別是姓名表和年齡表,用於我們例子的測試資料 表連線有幾種?sql表連線分成外連線 內連線和交叉連線。一.外連線 概述 外連線包括三種,分別是左外連線 右外連線 全外連線。對應的sql關鍵字 left right full outer join,通常我們都省略...