實際的專案,存在多張表的關聯關係。不可能在一張表裡面就能檢索出所有資料。如果沒有表連線的話,那麼我們就需要非常多的操作。比如需要從a表找出限制性的條件來從b表中檢索資料。不但需要分多表來操作,而且效率也不高。比如書中的例子:
複製** **如下:
select fid
from t_customer
where fname='mike'
這個sql語句返回2,也就是姓名為mike 的客戶的fid值為2,這樣就可以到t_order中檢索fcustomerid等於2 的記錄:
複製** **如下:
select fnumber,fprice
from t_order
where fcustomerid=2
下面我們詳細來看看表連線。表連線有多種不同的型別,有交叉連線(cross join)、內連線(inner join)、外連線(outter join)。
(1)內連線(inner join):內連線組合兩張表,並且只獲取滿足兩表連線條件的資料。
複製** **如下:
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
注:在大多數資料庫系統中,inner join中的inner是可選的,inner join 是預設的連線方式。
在使用表連線的時候可以不侷限於只連線兩張表,因為有很多情況下需要聯絡許多表。例如,t_order表同時還需要連線t_customer和t_ordertype兩張表才能檢索到所需要的資訊,編寫如下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
inner join t_ordertype
on t_order.ftypeid= t_ordertype.fid
(2)交叉連線(cross join):交叉連線所有涉及的表中的所有記錄都包含在結果集中。可以採用兩種方式來定義交叉連線,分別是隱式和顯式的連線。
下面看看隱式的例子:
複製** **如下:
select t_customer.fid, t_customer.fname, t_customer.fage,
t_order.fid, t_order.fnumber, t_order.fprice
from t_customer, t_order
使用顯式的連線則需要使用cross join,例子如下:
複製** **如下:
select t_customer.fid, t_customer.fname, t_customer.fage,
t_order.fid, t_order.fnumber, t_order.fprice
from t_customer
cross join t_order
(3)外連線(outter join):內部連線只獲取滿足連線條件的資料,而對於外部連線來說,主要是解決這樣的一種場景。滿足條件的資料檢索出來,這個沒有疑問,外部連線還會檢索另一部分資料,那就是將不滿足條件的資料以null來填充。先來看一下外連線的分類:左外部連線(left outer join)、右外部連線(right outer join)和全外部連線(fullouter join)。
i、左外部連線(left outer join):前頭也說了,將不滿足條件的資料以null來填充。那麼具體是哪些需要以null來填充呢,對於左外連線來說的話,連線條件當中,如果出現滿足條件的左表的資料在右表中沒有相應匹配時,需要把相應的右表字段填充null值。也就是說左外部連線的主體是左表,右表來配合。
複製** **如下:
select o.fnumber,o.fprice,o.fcustomerid,
c.fname,c.fage
frogcwpuxm t_order o
left outer join t_cgcwpuxustomer c
on o.fcustomerid=c.fid
注:如果使用左外部連線的話,通過where語句能過濾其中不符合的資料
複製** **如下:
select o.fnumber,o.fprice,o.fcustomerid,
c.fname,c.fage
from t_order o
left outer join t_customer c
on o.fcustomerid=c.fid
where o.fprice>=150
ii、右外部連線(right outer join):右外部連線與左外連部接相反,將會被填充null值的是左表的字段。也就是說右外部連線的主體是右表,左表來配合。
複製** **如下:
select www.cppcns.como.fnumber,o.fprice,o.fcustomerid,
c.fname,c.fage
from t_order o
right outer join t_customer c
on o.fcustomerid=c.fid
注:同左外連線一樣,可以使用where語句進行過濾
iii、全外部連線(fullouter join):全外部連線是左外部連線和右外部連線的合集。也就是既包括左外部連線的結果集,也包括右外程式設計客棧部連線的結果集。
複製** **如下:
select o.fnumber,o.fprice,o.fcustomerid,
c.fname,c.fage
from t_order o
full outer join t_customer c
on o.fcustomerid=c.fid
其結果相當於:
複製** **如下:
select o.fnumber,o.fprice,o.fcustomerid,
c.fname,c.fage
from t_order o
left outer join t_customer c
on o.fcustomerid=c.fid
union
select o.fnumber,o.fprice,o.fcu
c.fname,c.fage
from t_order o
right outer join t_customer c
on o.fcustomerid=c.fid
本文標題: sql表連線查詢使用方法(sql多表連線查詢)
本文位址:
sql 表連線查詢
自連線查詢 要求查詢學生表中和吳剛同乙個 地的學生的所有訊息 select t1.from student1 t1,student1 t2 where t1.origin t2.origin and t2.name 吳剛 兩表間不等值連線查詢 select st.name st.birthday n...
sql基礎 sql連線查詢
這兩天在專案中寫連線查詢的時候突然回憶了一下各種連線查詢的語法 結果等,發現自己出了經常用的left join on 和等值連線以外其他的都不是很確定,於是乎就看看了相關的資料便有了這篇博文。sql 92標準所定義的from子句的連線語法格式為 fromjoin tablejoin typejoin...
SQL 連線查詢
連線查詢是指乙個查詢同時涉及到兩個及以上的表。包括 等值連線,自然連線,非等值連線,自身連線,外連線,復合查詢.等.color red size large 1.等值連線 於非等值連線 size color 查詢每個學生及選課的情況 select student.sc.from student,sc...