使用外連線引發的一點思考

2022-05-02 20:48:14 字數 3770 閱讀 3766

外連線查詢想必是不用多講了

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之間的交換資源時...