一、內串連(inner join)
內串連通過where語句的串連條件先把所有要串連的表一個個的拼接成一個“大表”,如果中間有別的條件限制,可以通過限制條件,縮減表的列數和行數後,繼續和別的表串連。串連的最後,是一些查詢條件,用來限制這個“大表”的行數。 如果串連中,有任何一個表不匹配串連條件,那麼該行資料將不會出現在“大表”中。 例子:
--老文法
select b.mc, a.zxyy_mc
from dm_zxyy a, dj_ztzx b
where b.yy_dm = a.zxyy_dm --sql-92標準
select b.mc, a.zxyy_mc
from dm_zxyy a inner join dj_ztzx b
on a.zxyy_dm=b.yy_dm 以上兩個sql的功能相同,sql標準的文法有所不同.二、外串連(out join)
外串連的類型有三種:左外串連、右外串連、全外串連,內串連可以刪除原表中的一些行,外串連可以保留這些行中的一部分。 (一)、左外串連
1、串連條件寫在where子句中。括弧中的加法符號(+)寫在串連條件的右邊。這就指定了一個作外串連。串連條件中有多個子句時,加法符號必須寫在每個子句的右邊。‘+’相當於一個給右邊表一個萬能行,來匹配左邊的表進行‘內串連’。 例子:
--老文法
select a.*, b.*
from tab1 a, tab2 b
where a.sn = b.sn(+)
a.tx > b.tx(+)
order by a.sn
--SQL92標準
select a.*, b.*
from tab1 a left outer join tab2 b
on a.sn = b.sn(+)
a.tx > b.tx(+)
order by a.sn 以上兩個sql的功能相同,sql標準的文法有所不同. (二)、右外串連
與左外串連相似,不做介紹。 (三)、全外串連
1、全外串連實際上是對兩個分別進行左右串連後,再將結果集聯合到一塊形成的。
2、進行聯合的兩個結果集的列必須相同。
3、全外串連的文法:
左外串連
union
右外串連
4、union只能有一個order by子句,並且它必須位於union的最後一行中。這個子句按指定順序對union所有行進行排序。
5、union聯合時,會重複資料刪除的行,而不論重複的行是否來自同一個表。
三、union與union all
(一)、union與串連的區別
1、union將兩個表的行合并到一個表中,並不對這些行做任何更改,並重複資料刪除的行,而不論這些重複行是否來自同一個表。 例子:
--union聯集查詢
select a1,b1,c1
from tab1
union
select a2,b2,c2
from tab2 --串連查詢
select t1.*,t2.*
from tab1 t1,tab2 t2
where a.id=b.id (二)、union與union all的區別
1、與union非常相似,唯一的區別是union all不重複資料刪除的行,也不對行進行自動排序。
2、union all比union省計算資源,應盡量使用union all。