內連線組合兩張表,並且基於兩張表中的關聯關係來連線它們。使用內連線需要指定表中哪些字段組成關聯關係,並且需要指定基於什麼條件進行連線。內連線的語法如下:
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 左連 教父說...