六 SQL 表連線 內連線

2021-10-13 13:07:08 字數 3489 閱讀 3124

內連線組合兩張表,並且基於兩張表中的關聯關係來連線它們。使用內連線需要指定表中哪些字段組成關聯關係,並且需要指定基於什麼條件進行連線。內連線的語法如下:

inner join table_name on condition
其中table_name 為被關聯的表名,condition則為進行連線時的條件。

如:檢索所有的客戶姓名為mike的客戶的訂單號以及訂單**:

select fnumber,fprice from t_order inner join t_customer on fcustomerid= t_customer.fid where t_customer.fname="tom"
執行結果:

fnumber fprice

k001 100.00

k002 200.00

t003 300.00

t001 300.00

在這個sql 語句中,首先列出了組成結果集所需要的列名,而後則是在from 關鍵字後指定需要的表,在inner join關鍵字後指明要被連線的表,而在on關鍵字後則指定了進行連線時所使用的條件。

由於t_customer和t_order表中都有名稱為fid的列,所以在on關鍵字後的條件中使用fid欄位的時候必須顯示的指明這裡使用fid欄位屬於哪個表。

如:下面的sql語句執行時,會報出「列名fid不明確」的錯誤資訊:

select fnumber,fprice from t_order inner join t_customer on fcustomerid= fid where t_customer.fname="tom"
select語句後的字段列表中不能存在有歧義的字段,如:下面的sql語句執行會出錯:

select fid,fnumber,fprice from t_order inner join t_customer on fcustomerid= t_customer.fid where t_customer.fname="tom"
必須為fid欄位顯式的指定所屬的表,修正後的sql語句如下:

select t_order.fid,fnumber,fprice from t_order inner join t_customer on  fcustomerid= t_customer.fid where t_customer.fname="tom"
執行結果:

fid fnumber fprice

1 k001 100.00

2 k002 200.00

3 t003 300.00

6 t001 300.00

為了避免列名歧義並且提高可讀性,建議使用表連線時,要顯式列所屬的表,如下:

select t_order.fid,t_order.fnumber,t_order.fprice from t_order inner join t_customer on t_order.fcustomerid= t_customer.fid where t_customer.fname="tom"
指定列所屬的表後,就可以引用同名的字段了

select t_order.fid,t_order.fnumber,t_order.fprice,t_customer.fid,t_customer.fname,t_customer.fage 

from t_order inner join t_customer on t_order.fcustomerid= t_customer.fid

在大多數資料庫系統中,inner join中的inner是可選的,inner join是預設的連線方式。

select t_order.fid,t_order.fnumber,t_order.fprice,t_customer.fid,t_customer.fname,t_customer.fage

from t_order join t_customer

on t_order.fcustomerid= t_customer.fid

執行結果:

fid fnumber fprice fid fname fage

1 k001 100.00 1 tom 21

2 k002 200.00 1 tom 21

3 t003 300.00 1 tom 21

4 n002 100.00 2 mike 24

5 n003 500.00 3 jack 30

6 t001 300.00 4 tom 25

為了明確指定字段所屬的表,上面的sql語句中多次出現了t_order、t_customer,當欄位比較多的時候這樣的sql語句看起來非常繁雜,所以可以使用表別名來簡化sql語句的編寫

如:下面的sql語句就與上面的sql語句是等價的:

select o.fid,o.fnumber,o.fprice,c.fid,c.fname,c.fage

from t_order o join t_customer c on o.fcustomerid= c.fid

執行結果:

fid fnumber fprice fid fname fage

1 k001 100.00 1 tom 21

2 k002 200.00 1 tom 21

3 t003 300.00 1 tom 21

4 n002 100.00 2 mike 24

5 n003 500.00 3 jack 30

6 t001 300.00 4 tom 25

表連線的使用不侷限於連線兩張表,也可以多表連線

如:檢索每張訂單的訂單號、**、客戶姓名、訂單型別等資訊,由於客戶資訊和訂單型別資訊是儲存在另外的表中的,因此需要同時連線t_customer和t_ordertype兩張表才能檢索到所需要的資訊,編寫如下sql語句即可:

inner join t_ordertype on t_order.ftypeid= t_ordertype.fid
執行結果:

fnumber fprice fname fname

k001 100.00 tom marketorder

k002 200.00 tom marketorder

t003 300.00 tom limitorder

n002 100.00 mike limitorder

n003 500.00 jack stoplimit order

t001 300.00 tom stop order

六 SQL 表連線 交叉連線

與內連線比起來,交叉連線非常簡單,因為它不存在on子句。交叉連線會將涉及到的所有表中的所有記錄都包含在結果集中。交叉連線,定義方式分為隱式連線和顯式連線。隱式連線 只要在select語句的from語句後將要進行交叉連線的表名列出即可,這種方式可以被幾乎任意資料庫系統支援。如 將t customer表...

六 SQL 表連線 全外部連線

全外部連線並不是所有資料庫系統都支援,最常使用的mysql就不支援全外部連線。全外部連線 是左外部連線和右外部連線的合集,因為即使在右表中不存在匹配連線條件的資料,左表中的所有記錄也將被放到結果集中,同樣即使在左表中不存在匹配連線條件的資料,右表中的所有記錄也將被放到結果集中。如 使用全外部連線查詢...

SQL 內連線,外連線

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