資料
庫版本:
oracle9i
連線n個表,至少需要n-1個連線條件。例如:連線三個表,至少需要兩個連線條件。
表testa,testb,testc, 各有
a, b 兩列
a b
001
10a
002
20a
a b
001
10b
003
30b ab
001
10c
004
40c
連線分為兩種:內連線與外連線。
a
.內連線
內連線,即最常見的等值連線,例:
select
*
fromtesta,testb
wheretesta.a=testb.a
結果 a
b a
b 001
10a
001
10b
b.
外連線
外連線分為左外連線,右外連線和全外連線。 1.
左外連線
left outer join
或者left join
左外連線就是在等值連線的基礎上加上主表中的未匹配資料,例:
select
*
fromtesta
leftouterjointestb
ontesta.a=testb.a
oracle
支援另一種寫法
select
*
fromtesta,testb
wheretesta.a=testb.a(+)
結果: a
b ab
00110a
00110b
00210b
三個表做左外連線
select
*
fromtesta
leftouterjointestb
ontesta.a=testb.a
leftouterjointestc
ontesta.a=testc.a
oracle
支援的另外一種寫法
select
*
fromtesta,testb,testc
wheretesta.a=testb.a(+)
andtesta.a=testc.a(+)
結果: a
b a
b a
b 001
10a
001
10b
001
10c
002
20a
2.右外連線
right outer join
或者right join
右外連線是在等值連線的基礎上加上被連線表的不匹配資料
select
*
fromtesta
rightouterjointestb
ontesta.a=testb.a
oracle
支援的另一種寫法
select
*
fromtesta,testb
wheretesta.a(+)=testb.a
結果: a
b a
b 001
10a
001
10b
003
30b
3.
全外連線
full outer join
或者full join
全外連線是在等值連線的基礎上將左表和右表的未匹配資料都加上
select
*
fromtesta
fullouterjointestb
ontesta.a=testb.a
全外連線的等價寫法,對同一表先做左連線,然後右連線
select
testa.*,testb.*
fromtesta
leftouterjointestb
ontesta.a=testb.a
union
selecttesta.*,testb.*
fromtestb
leftouterjointesta
ontesta.a=testb.a
結果: a
b a b
001
10a
001
10b
002
20a
003
30b
內連線(inner join)就是將根據檢索條件將滿足條件的資料選擇出來,oracle首先用第一張表的第一條資料去掃瞄另一張表的所有資料,如果遇到符合條件的資料就加入到結果集中。直到檢索完第二張表的所有資料。然後用第一張表的第二條資料,重複剛才的動作,直到以第一張的最後一條資料。其關鍵字是
join
,可以使用
using
關鍵字和
on 關鍵字。oracle中預設的連線是內連線。
外連線(outer join)是根據需要將表中某些不符合選擇條件的資料也列舉出來,根據選擇標準的不同分為左連線、右連線和滿外連線。
自然連線(natural join)是由oracle自行決定哪些列作為連線的條件。oracle是這麼確定的 : 將不同表中的那些具有相同名稱和資料型別的字段用相等的條件連線起來。
自連線(self join)中,oracle將乙個表的乙個映象當作另乙個表,你可以像使用兩個表一樣使用這乙個表。
交叉連線(cross join)是兩個表的笛卡爾積,即不做任何條件限制,他們的結果集的資料的條數是兩個表的資料條數的乘積。
在使用關鍵字join進行不同的表連線時:-》使用using子句指定等值連線中需要用到的列;
-》使用on子句指定額外的連線條件;
-》使用and增加連線條件;
SQL 聯合查詢
use xsgl go select from student select from cause select from exam 聯合查詢 join on 預設為inner,如果有right or left 那麼就指的是外聯,outer 可以不寫 1.最長見為內聯 table1 inner jo...
sql聯合查詢
sql查詢 多表聯合查詢 將具有相同的字段的查詢結果合併為乙個表 關鍵字 union 例項 查詢subs表 select subs id,prefix,acc nbr,cust id,user id,acct id,price plan id,area id,update date from sub...
SQL 聯合查詢
a表 aaa bbb ccc 1a 1b 1c 2a 2b 2c 3a 3b 3c b表 aaa bbb ddd 1a 1b 1d 4a 4b 4d 1 union union all all 表示將查詢的所有結果都合併到結果集中,若不加all會將重複的行只保留一行 sql view plain c...