SQL 語言執行效率經驗談

2021-04-13 05:59:49 字數 2732 閱讀 6070

讀取表1中第2列(col2)資料的總和,且其第1列資料存在於表2的第1列中。

1. 使用in的sql語句:

select sum(col2) from tab1 where col1 in(select col1 from tab2)

2. 使用exists的sql語句:

select sum(col2) from tab1 where exists(select * from tab2 where tab1.col1=tab2.col1)

3. 使用連線的sql語句:

select sum(a.col2) from tab1 a,tab2 b

where a.col1=b.col1

讀取表1中第2列(col2)資料的總和,且其第1列資料不存在於表2的第1列中。

1. 使用not in的sql語句:

select sum(col2) from tab1 where col1 not in(select col1 from tab2)

2. 使用not exists的sql語句:

select sum(col2) from tab1 where not exists(select * from tab2 where

tab1.col1=tab2.col1)

3. 使用外連線的sql語句:

select sum(a.col2) from tab1 a,tab2 b where a.col1=b.col1(+) and b.col1 is null

下面介紹in、not in、exist、not exist在delete和update語句中的效率提高方法。

下面所舉的例子在microsoft sql server 7.0下執行通過,但所推薦的方法在各種大型資料庫上皆適用。下面,我們將建立一些資料庫表和資料,用於舉例說明。我們將分別在表a(ta)中存入 10000條資料,表b(tb)中存入5000條資料。

sql語句如下:

create table ta

(ca int

)create table tb

(ca int

)create table tc

(ca int

)create trigger tra on tc

for insert

asdeclare @mint int

begin

select @mint=1

while (@mint<=5000)

begin

insert into ta values(@mint)

insert into tb values(@mint)

select @mint=@mint+1

endwhile (@mint<=10000)

begin

insert into ta values(@mint)

select @mint=@mint+1

endend

goinsert into tc values(1)

go刪除表a中表a和表b相同的資料

1. 用in的sql語句:

delete from ta where ta.ca in (select ca from tb)

2. 用exists的sql語句:

delete from ta where exists (select * from tb where tb.ca=ta.ca)

3. 使用連線的sql語句:

delete ta from ta,tb where ta.ca=tb.ca

刪除表a中表a存在但表b中不存在的資料

1. 使用in的sql語句:

delete from ta where ta.ca not in (select ca from tb)

2. 使用exists的sql語句:

delete from ta where not exists (select ca from tb where tb.ca=ta.ca)

3. 使用連線的sql語句:

delete ta from ta left outer join tb on ta.ca=tb.ca where tb.ca is null

更新表a中表a和表b相同的資料

1. 使用in的sql語句:

update ta set ca=ca+10000 where ca in (select ca from tb)

2. 使用exists的sql語句:

update ta set ca=ca+10000 where exists (select ca from tb where tb.ca=ta.ca)

3. 使用連線的sql語句:

update ta set ta.ca=ta.ca+10000 from ta,tb where ta.ca=tb.ca

更新表a中表a存在但表b中不存在的資料

1. 使用in的sql語句:

update ta set ca=ca+10000 where ca not in (select ca from tb)

2. 使用exists的sql語句:

update ta set ca=ca+10000 where not exists (select ca from tb where tb.ca=ta.ca)

3. 使用連線的sql語句:

update ta set ta.ca=ta.ca+10000 from ta left outer join tb on ta.ca=tb.ca where tb.ca is null

ASP執行儲存過程經驗談

1,利用sql server游標,這種方法的優點 適用性比較強,效能不是很好.儲存過程如下 create proc sp pageview sql varchar 8000 sql語句 pagecurnum int 1,當前頁,如果為空則為第一頁 pagesize int 10 每頁行數,黑認為10...

跳槽經驗談

每年年初跳槽最多,跳槽是一門學問,也是一種策略。跳槽並不意味著你就能夠取得職業的成功,當面臨跳槽時,如何順利地完成跳槽,從而取得職業的成功呢?以下是一些切身體會,值得大家參考。1 不要指望會一下子能夠跳到多麼好的公司,絕大多數公司都乙個樣子。比如用友 金蝶 亞信 神馬這些公司,其實基本上乙個樣子。2...

程式設計經驗談

不知不覺做軟體已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成為高手的捷徑,但一些基本原則是可以遵循的。紮實的基礎。資料結構 離散數學 編譯原理,這些是所有電腦科學的基礎,如果不掌握他們,很難寫出高水平的程式。據我的觀察,...