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