外連線查詢想必是不用多講了
left outer join:以等號左邊的表為標準,對等號右邊的表按條件進行過濾
right outer join:原理同上
full outer join:這個我相信大家和我一樣都很少用到了,以上兩種連線查詢結果的並集
舉個例子來說說
有兩個表:#tb1(id,scourse ,sclass ,sbook)、#tb2(id,sclass ,steacher,sbook),我的目的是想得到乙個這樣的結果(sclass,scourse,sbook,steacher)。很自然的我就想到利用外連線,**如下:(沒有問題)
**create
table
#tb1(
id int
identity(1
,1) primary
key,
scourse
varchar(30
),sclass
varchar(30
),sbook
varchar(30
))insert
into
#tb1
select
'cs001',
'cl001',
'bo001
'union
select
'cs002',
'cl002',
'bo002
'union
select
'cs003',
'cl003',
'bo003
'create
table
#tb2(
id int
identity(1
,1) primary
key,
sclass
varchar(30
),steacher
varchar(30
),sbook
varchar(30
))insert
into
#tb2
select
'cl001',
'te001',
'bo001
'union
select
'cl002',
'te002',
'bo002
'union
select
'cl004',
'te004',
'bo004
'union
select
'cl001',
'te003',
'bo002
'select
*from
#tb1
select
*from
#tb2
select
a.id,a.scourse,a.sclass,a.sbook,steacher
from
#tb1 a
left
join
#tb2 b
ona.sclass
=b.sclass
anda.sbook
=b.sbook
現在的結果:
sclass scourse sbook steacher
cl001 cs001 bo001 te001
cl002 cs002 bo002 te002
cl003 cs003 bo003 null
到這裡,一切都很好。我期望的結果相當於在表#tb1中增加一列steacher,並且最終結果的記錄條數與#tb1的記錄條數要一致
我對上面的**稍加修改,改變一下#tb2的記錄
**create
table
#tb1(
id int
identity(1
,1) primary
key,
scourse
varchar(30
),sclass
varchar(30
),sbook
varchar(30
))insert
into
#tb1
select
'cs001',
'cl001',
'bo001
'union
select
'cs002',
'cl002',
'bo002
'union
select
'cs003',
'cl003',
'bo003
'create
table
#tb2(
id int
identity(1
,1) primary
key,
sclass
varchar(30
),steacher
varchar(30
),sbook
varchar(30
))insert
into
#tb2
select
'cl001',
'te001',
'bo001
'union
select
'cl002',
'te002',
'bo002
'union
select
'cl004',
'te004',
'bo004
'union
select
'cl001',
'te003',
'bo002
'union
select
'cl001',
'te003',
'bo001
'union
select
'cl001',
'te004',
'bo001
'select
*from
#tb1
select
*from
#tb2
select
a.id,a.scourse,a.sclass,a.sbook,steacher
from
#tb1 a
left
join
#tb2 b
ona.sclass
=b.sclass
anda.sbook
=b.sbook
我就簡單的給#tb2增加了幾條記錄
現在的結果:
sclass scourse sbook steacher
cl001 cs001 bo001 te001
cl001 cs001 bo001 te003
cl001 cs001 bo001 te004
cl002 cs002 bo002 te002
cl003 cs003 bo003 null
現在可以看出來為什麼外連線查詢時結果比預想的多了吧
由於#tb2按要求:#tb1.sclass=#tb2
.sclass
and#tb1.sbook
=#tb2.sbook過濾後得到的結果不是唯一的
所以在處理這樣的情況時需要先處理#tb2,使其按條件#tb1.sclass=#tb2
.sclass
and#tb1.sbook
=#tb2.sbook過濾後結果唯一才能達到預期效果
ps:任何時候都要認真分析你所操作的物件,並且動手實踐去了解你所使用的物件
隨身WiFi引發的一點思考
1.只需插入一台可上網的電腦,即可將電腦的網路變成wifi,這時其他裝置就可以連線網路上網。2.對於台式電腦,一般是使用乙太網,也就是插網線上網,但是在沒有網線的情況下,使用隨身wifi連線無線網路也能上網。這裡有兩個問題需要注意 作業系統和驅動。作業系統一般是 windows mac os和lin...
遞迴的一點思考
廢話不說,直接上 searchtree delete int x,searchtree t else if t left null 沒有兒子的情況也包含了,因為t right 為null else else if x t element t right delete x,t right else t...
一點BPXA的思考
懂的人自然懂。bpxa功能配置 這個概念現在還有印象,記錄下來 一,bpxa是用於bp使用第三方資源的。如使用oracle資料庫,就是在xa裡配置。它的特徵是以開頭 二,bpxa有自己的kcxp佇列。這個佇列是自己的,還是寄生在已有的kcxp佇列中,無影響。三,bpxa在配置kcbp之間的交換資源時...