锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓銆佷笉鍚堢悊鐨勭儲寮曡璁?
銆銆渚嬶細琛╮ecord鏈?20000琛岋紝璇曠湅鍦ㄤ笉鍚岀殑绱㈠紩涓嬶紝涓嬮潰鍑犱釜 SQL鐨勮繍琛屾儏鍐碉細
銆銆1.鍦╠ate涓婂緩鏈変竴闈炰釜緹ら泦绱㈠紩
select count(*) from record where date >
''19991201'' and date < ''19991214''and amount >
2000 (25縐?
select date,sum(amount) from record group by date
(55縐?
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'') (27縐?
銆銆鍒嗘瀽錛?
銆銆date涓婃湁澶ч噺鐨勯噸澶嶅鹼紝鍦ㄩ潪緹ら泦绱㈠紩涓嬶紝鏁版嵁鍦ㄧ墿鐞嗕笂闅忔満瀛樻斁鍦ㄦ暟鎹〉涓婏紝鍦ㄨ寖鍥存煡鎵炬椂錛屽繀欏繪墽琛屼竴嬈¤〃鎵弿鎵嶈兘鎵懼埌榪欎竴鑼冨洿鍐呯殑鍏ㄩ儴琛屻?
銆銆2.鍦╠ate涓婄殑涓涓兢闆嗙儲寮?br />select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000 錛?4縐掞級
select date,sum(amount) from record group by date
錛?8縐掞級
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'')錛?4縐掞級
銆銆鍒嗘瀽錛?
銆銆鍦ㄧ兢闆嗙儲寮曚笅錛屾暟鎹湪鐗╃悊涓婃寜欏哄簭鍦ㄦ暟鎹〉涓婏紝閲嶅鍊間篃鎺掑垪鍦ㄤ竴璧鳳紝鍥犺屽湪鑼冨洿鏌ユ壘鏃訛紝鍙互鍏堟壘鍒拌繖涓寖鍥寸殑璧鋒湯鐐癸紝涓斿彧鍦ㄨ繖涓寖鍥村唴鎵弿鏁版嵁欏碉紝閬垮厤浜嗗ぇ鑼冨洿鎵弿錛屾彁楂樹簡鏌ヨ閫熷害銆?
銆銆3.鍦╬lace錛宒ate錛宎mount涓婄殑緇勫悎绱㈠紩
select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000 錛?6縐掞級
select date,sum(amount) from record group by date
錛?7縐掞級
select count(*) from record where date >
''19990901'' and place in (''BJ, ''SH'')錛?lt; 1縐掞級
銆銆鍒嗘瀽錛?
銆銆榪欐槸涓涓笉寰堝悎鐞嗙殑緇勫悎绱㈠紩錛屽洜涓哄畠鐨勫墠瀵煎垪鏄痯lace錛岀涓鍜岀浜屾潯SQL娌℃湁寮曠敤place錛屽洜姝や篃娌℃湁鍒╃敤涓婄儲寮曪紱絎笁涓猄QL浣跨敤浜唒lace銆?br />
銆銆4.鍦╠ate錛宲lace錛宎mount涓婄殑緇勫悎绱㈠紩
select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000(< 1縐?
select date,sum(amount) from record group by date
錛?1縐掞級
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'')錛?lt; 1縐掞級
銆銆鍒嗘瀽錛?
銆銆榪欐槸涓涓悎鐞嗙殑緇勫悎绱㈠紩銆傚畠灝哾ate浣滀負鍓嶅鍒楋紝浣挎瘡涓猄QL閮藉彲浠ュ埄鐢ㄧ儲寮曪紝騫朵笖鍦ㄧ涓鍜岀涓変釜SQL涓艦鎴愪簡绱㈠紩瑕嗙洊錛屽洜鑰屾ц兘杈懼埌浜嗘渶浼樸?
銆銆5.鎬葷粨錛?
銆銆緙虹渷鎯呭喌涓嬪緩绔嬬殑绱㈠紩鏄潪緹ら泦绱㈠紩錛屼絾鏈夋椂瀹冨茍涓嶆槸鏈浣崇殑錛涘悎鐞嗙殑绱㈠紩璁捐瑕佸緩绔嬪湪瀵瑰悇縐嶆煡璇㈢殑鍒嗘瀽鍜岄嫻嬩笂銆備竴鑸潵璇達細
銆銆鈶?鏈夊ぇ閲忛噸澶嶅箋佷笖緇忓父鏈夎寖鍥存煡璇?
銆銆錛坆etween, >,< 錛?gt;=,< =錛夊拰order by銆乬roup by鍙戠敓鐨勫垪錛屽彲鑰冭檻寤虹珛緹ら泦绱㈠紩錛?
銆銆鈶?緇忓父鍚屾椂瀛樺彇澶氬垪錛屼笖姣忓垪閮藉惈鏈夐噸澶嶅煎彲鑰冭檻寤虹珛緇勫悎绱㈠紩錛?
銆銆鈶?緇勫悎绱㈠紩瑕佸敖閲忎嬌鍏抽敭鏌ヨ褰㈡垚绱㈠紩瑕嗙洊錛屽叾鍓嶅鍒椾竴瀹氭槸浣跨敤鏈棰戠箒鐨勫垪銆?br />浜屻佷笉鍏呬喚鐨勮繛鎺ユ潯浠?
銆銆渚嬶細琛╟ard鏈?896琛岋紝鍦╟ard_no涓婃湁涓涓潪鑱氶泦绱㈠紩錛岃〃account鏈?91122琛岋紝鍦?account_no涓婃湁涓涓潪鑱氶泦绱㈠紩錛岃瘯鐪嬪湪涓嶅悓鐨勮〃榪炴帴鏉′歡涓嬶紝涓や釜SQL鐨勬墽琛屾儏鍐碉細
select sum(a.amount) from account a,
card b where a.card_no = b.card_no錛?0縐掞級
銆銆灝哠QL鏀逛負錛?
select sum(a.amount) from account a,
card b where a.card_no = b.card_no and a.
account_no=b.account_no錛?lt; 1縐掞級
銆銆鍒嗘瀽錛?
銆銆鍦ㄧ涓涓繛鎺ユ潯浠朵笅錛屾渶浣蟲煡璇㈡柟妗堟槸灝哸ccount浣滃灞傝〃錛宑ard浣滃唴灞傝〃錛屽埄鐢╟ard涓婄殑绱㈠紩錛屽叾I/O嬈℃暟鍙敱浠ヤ笅鍏紡浼扮畻涓猴細
銆銆澶栧眰琛╝ccount涓婄殑22541欏?錛堝灞傝〃account鐨?91122琛?鍐呭眰琛╟ard涓婂搴斿灞傝〃絎竴琛屾墍瑕佹煡鎵劇殑3欏碉級=595907嬈/O
銆銆鍦ㄧ浜屼釜榪炴帴鏉′歡涓嬶紝鏈浣蟲煡璇㈡柟妗堟槸灝哻ard浣滃灞傝〃錛宎ccount浣滃唴灞傝〃錛屽埄鐢╝ccount涓婄殑绱㈠紩錛屽叾I/O嬈℃暟鍙敱浠ヤ笅鍏紡浼扮畻涓猴細
銆銆澶栧眰琛╟ard涓婄殑1944欏?錛堝灞傝〃card鐨?896琛?鍐呭眰琛╝ccount涓婂搴斿灞傝〃姣忎竴琛屾墍瑕佹煡鎵劇殑4欏碉級= 33528嬈/O
銆銆鍙錛屽彧鏈夊厖浠界殑榪炴帴鏉′歡錛岀湡姝g殑鏈浣蟲柟妗堟墠浼氳鎵ц銆?
銆銆鎬葷粨錛?
銆銆1.澶氳〃鎿嶄綔鍦ㄨ瀹為檯鎵ц鍓嶏紝鏌ヨ浼樺寲鍣ㄤ細鏍規嵁榪炴帴鏉′歡錛屽垪鍑哄嚑緇勫彲鑳界殑榪炴帴鏂規騫朵粠涓壘鍑虹郴緇熷紑閿鏈灝忕殑鏈浣蟲柟妗堛傝繛鎺ユ潯浠惰鍏呬喚鑰冭檻甯︽湁绱㈠紩鐨勮〃銆佽鏁板鐨勮〃錛涘唴澶栬〃鐨勯夋嫨鍙敱鍏紡錛氬灞傝〃涓殑鍖歸厤琛屾暟*鍐呭眰琛ㄤ腑姣忎竴嬈℃煡鎵劇殑嬈℃暟紜畾錛屼箻縐渶灝忎負鏈浣蟲柟妗堛?
銆銆2.鏌ョ湅鎵ц鏂規鐨勬柟娉?- 鐢╯et showplanon錛屾墦寮showplan閫夐」錛屽氨鍙互鐪嬪埌榪炴帴欏哄簭銆佷嬌鐢ㄤ綍縐嶇儲寮曠殑淇℃伅錛涙兂鐪嬫洿璇︾粏鐨勪俊鎭紝闇鐢╯a瑙掕壊鎵цdbcc(3604,310,302)銆?
涓夈佷笉鍙紭鍖栫殑where瀛愬彞
銆銆1.渚嬶細涓嬪垪SQL鏉′歡璇彞涓殑鍒楅兘寤烘湁鎭板綋鐨勭儲寮曪紝浣嗘墽琛岄熷害鍗撮潪甯告參錛?
select * from record where
substring(card_no,1,4)=''5378''(13縐?
select * from record where
amount/30< 1000錛?1縐掞級
select * from record where
convert(char(10),date,112)=''19991201''錛?0縐掞級
銆銆鍒嗘瀽錛?
銆銆where瀛愬彞涓鍒楃殑浠諱綍鎿嶄綔緇撴灉閮芥槸鍦⊿QL榪愯鏃墮愬垪璁$畻寰楀埌鐨勶紝鍥犳瀹冧笉寰椾笉榪涜琛ㄦ悳绱紝鑰屾病鏈変嬌鐢ㄨ鍒椾笂闈㈢殑绱㈠紩錛涘鏋滆繖浜涚粨鏋滃湪鏌ヨ緙栬瘧鏃跺氨鑳藉緱鍒幫紝閭d箞灝卞彲浠ヨSQL浼樺寲鍣ㄤ紭鍖栵紝浣跨敤绱㈠紩錛岄伩鍏嶈〃鎼滅儲錛屽洜姝ゅ皢SQL閲嶅啓鎴愪笅闈㈣繖鏍鳳細
select * from record where card_no like
''5378%''錛?lt; 1縐掞級
select * from record where amount
< 1000*30錛?lt; 1縐掞級
select * from record where date= ''1999/12/01''
錛?lt; 1縐掞級
銆銆浣犱細鍙戠幇SQL鏄庢樉蹇搗鏉ワ紒
銆銆2.渚嬶細琛╯tuff鏈?00000琛岋紝id_no涓婃湁闈炵兢闆嗙儲寮曪紝璇風湅涓嬮潰榪欎釜SQL錛?
select count(*) from stuff where id_no in(''0'',''1'')錛?3縐掞級
銆銆鍒嗘瀽錛?
銆銆where鏉′歡涓殑''in''鍦ㄩ昏緫涓婄浉褰撲簬''or''錛屾墍浠ヨ娉曞垎鏋愬櫒浼氬皢in (''0'',''1'')杞寲涓篿d_no =''0'' or id_no=''1''鏉ユ墽琛屻傛垜浠湡鏈涘畠浼氭牴鎹瘡涓猳r瀛愬彞鍒嗗埆鏌ユ壘錛屽啀灝嗙粨鏋滅浉鍔狅紝榪欐牱鍙互鍒╃敤id_no涓婄殑绱㈠紩錛涗絾瀹為檯涓婏紙鏍規嵁showplan錛?瀹冨嵈閲囩敤浜?OR絳栫暐"錛屽嵆鍏堝彇鍑烘弧瓚蟲瘡涓猳r瀛愬彞鐨勮錛屽瓨鍏ヤ復鏃舵暟鎹簱鐨勫伐浣滆〃涓紝鍐嶅緩绔嬪敮涓绱㈠紩浠ュ幓鎺夐噸澶嶈錛屾渶鍚庝粠榪欎釜涓存椂琛ㄤ腑璁$畻緇撴灉銆傚洜姝わ紝瀹為檯榪囩▼娌℃湁鍒╃敤id_no涓婄儲寮曪紝騫朵笖瀹屾垚鏃墮棿榪樿鍙梩empdb鏁版嵁搴撴ц兘鐨勫獎鍝嶃?
銆銆瀹炶返璇佹槑錛岃〃鐨勮鏁拌秺澶?鏈?20000琛屾椂錛屾墽琛屾椂闂寸珶杈懼埌220縐掞紒榪樹笉濡傚皢or瀛愬彞鍒嗗紑錛?
select count(*) from stuff where id_no=''0''
select count(*) from stuff where id_no=''1''
銆銆寰楀埌涓や釜緇撴灉錛屽啀浣滀竴嬈″姞娉曞悎綆椼傚洜涓烘瘡鍙ラ兘浣跨敤浜嗙儲寮曪紝鎵ц鏃墮棿鍙湁3縐掞紝鍦?20000琛屼笅錛屾椂闂翠篃鍙湁4縐掋傛垨鑰咃紝鐢ㄦ洿濂界殑鏂規硶錛屽啓涓涓畝鍗曠殑瀛樺偍榪囩▼錛?
create proc count_stuff as
declare @a int
declare @b int
declare @c int
declare @d char(10)
begin
select @a=count(*) from stuff where id_no=''0''
select @b=count(*) from stuff where id_no=''1''
end
select @c=@a+@b
select @d=convert(char(10),@c)
print @d
銆銆鐩存帴綆楀嚭緇撴灉錛屾墽琛屾椂闂村悓涓婇潰涓鏍峰揩錛?
銆銆鎬葷粨錛?br />
銆銆鍙錛屾墍璋撲紭鍖栧嵆where瀛愬彞鍒╃敤浜嗙儲寮曪紝涓嶅彲浼樺寲鍗沖彂鐢熶簡琛ㄦ壂鎻忔垨棰濆寮閿銆?
銆銆1.浠諱綍瀵瑰垪鐨勬搷浣滈兘灝嗗鑷磋〃鎵弿錛屽畠鍖呮嫭鏁版嵁搴撳嚱鏁般佽綆楄〃杈懼紡絳夌瓑錛屾煡璇㈡椂瑕佸敖鍙兘灝嗘搷浣滅Щ鑷崇瓑鍙峰彸杈廣?
銆銆2.in銆乷r瀛愬彞甯鎬細浣跨敤宸ヤ綔琛紝浣跨儲寮曞け鏁堬紱濡傛灉涓嶄駭鐢熷ぇ閲忛噸澶嶅鹼紝鍙互鑰冭檻鎶婂瓙鍙ユ媶寮錛涙媶寮鐨勫瓙鍙ヤ腑搴旇鍖呭惈绱㈠紩銆?
銆銆3.瑕佸杽浜庝嬌鐢ㄥ瓨鍌ㄨ繃紼嬶紝瀹冧嬌SQL鍙樺緱鏇村姞鐏墊椿鍜岄珮鏁堛?
銆銆浠庝互涓婅繖浜涗緥瀛愬彲浠ョ湅鍑猴紝SQL浼樺寲鐨勫疄璐ㄥ氨鏄湪緇撴灉姝g‘鐨勫墠鎻愪笅錛岀敤浼樺寲鍣ㄥ彲浠ヨ瘑鍒殑璇彞錛屽厖浠藉埄鐢ㄧ儲寮曪紝鍑忓皯琛ㄦ壂鎻忕殑I/O嬈℃暟錛屽敖閲忛伩鍏嶈〃鎼滅儲鐨勫彂鐢熴傚叾瀹濻QL鐨勬ц兘浼樺寲鏄竴涓鏉傜殑榪囩▼錛屼笂榪拌繖浜涘彧鏄湪搴旂敤灞傛鐨勪竴縐嶄綋鐜幫紝娣卞叆鐮旂┒榪樹細娑夊強鏁版嵁搴撳眰鐨勮祫婧愰厤緗佺綉緇滃眰鐨勬祦閲忔帶鍒朵互鍙婃搷浣滅郴緇熷眰鐨勬諱綋璁捐銆?br />鏉ユ簮錛歨ttp://edu.chinaz.com聽
]]>
涓轟簡瑙e喅榪欎簺闂錛岄噸瑕佺殑鏄壘鍒伴棶棰樼殑鏍規簮銆傞偅涔堬紝浠庡摢閲屽紑濮嬪憿錛熸牴鏈師鍥犻氬父鍦ㄤ簬鏁版嵁搴?/a>璁捐鍜岃闂畠鐨勬煡璇€傚湪鏈湀鐨勪笓鏍忎腑錛屾垜灝嗚榪板洓欏規妧鏈紝榪欎簺鎶鏈彲鐢ㄤ簬鎻愰珮鍩轟簬 SQL Server? 鐨勫簲鐢ㄧ▼搴忕殑鎬ц兘鎴栨敼鍠勫叾鍙幾緙╂с傛垜灝嗕粩緇嗚鏄?LEFT JOIN銆丆ROSS JOIN 鐨勪嬌鐢ㄤ互鍙?IDENTITY 鍊肩殑媯绱€傝璁頒綇錛屾牴鏈病鏈夌濂囩殑瑙e喅鏂規銆傝皟鏁存偍鐨?a target="_blank">鏁版嵁搴?/a>鍙婂叾鏌ヨ闇瑕佸崰鐢ㄦ椂闂淬佽繘琛屽垎鏋愶紝榪橀渶瑕佸ぇ閲忕殑嫻嬭瘯銆傝繖浜涙妧鏈兘宸茶璇佹槑琛屼箣鏈夋晥錛屼絾瀵規偍鐨勫簲鐢ㄧ▼搴忚岃█錛屽彲鑳藉叾涓竴浜涙妧鏈瘮鍙︿竴浜涙妧鏈洿閫傜敤銆?br />
浠?INSERT 榪斿洖 IDENTITY
鎴戝喅瀹氫粠閬囧埌璁稿闂鐨勫唴瀹瑰叆鎵嬶細濡備綍鍦ㄦ墽琛?SQL INSERT 鍚庢绱?IDENTITY 鍊箋傞氬父錛岄棶棰樹笉鍦ㄤ簬濡備綍緙栧啓媯绱㈠肩殑鏌ヨ錛岃屽湪浜庡湪鍝噷浠ュ強浣曟椂榪涜媯绱€傚湪 SQL Server 涓紝涓嬮潰鐨勮鍙ュ彲鐢ㄤ簬媯绱㈢敱鏈鏂板湪媧誨姩鏁版嵁搴?/a>榪炴帴涓婅繍琛岀殑 SQL 璇彞鎵鍒涘緩鐨?IDENTITY 鍊鹼細
SELECT @@IDENTITY
榪欎釜 SQL 璇彞騫朵笉澶嶆潅錛屼絾闇瑕佽浣忕殑涓鐐規槸錛氬鏋滆繖涓渶鏂扮殑 SQL 璇彞涓嶆槸 INSERT錛屾垨鑰呮偍閽堝闈?INSERT SQL 鐨勫叾浠栬繛鎺ヨ繍琛屼簡姝?SQL錛屽垯涓嶄細鑾峰緱鏈熸湜鐨勫箋傛偍蹇呴』榪愯涓嬪垪浠g爜鎵嶈兘媯绱㈢揣璺熷湪 INSERT SQL 涔嬪悗涓斾綅浜庡悓涓榪炴帴涓婄殑 IDENTITY錛屽涓嬫墍紺猴細
INSERT INTO Products (ProductName) VALUES ('Chalk')
SELECT @@IDENTITY
鍦ㄤ竴涓繛鎺ヤ笂閽堝 Northwind 鏁版嵁搴?/a>榪愯榪欎簺鏌ヨ灝嗚繑鍥炰竴涓悕縐頒負 Chalk 鐨勬柊浜у搧鐨?IDENTITY 鍊箋傛墍浠ワ紝鍦ㄤ嬌鐢?ADO 鐨?Visual Basic? 搴旂敤紼嬪簭涓紝鍙互榪愯浠ヤ笅璇彞錛?br />
Set oRs = oCn.Execute("SET NOCOUNT ON;INSERT INTO Products _
(ProductName) VALUES ('Chalk');SELECT @@IDENTITY")
lProductID = oRs(0)銆
銆銆姝や唬鐮佸憡璇?SQL Server 涓嶈榪斿洖鏌ヨ鐨勮璁℃暟錛岀劧鍚庢墽琛?INSERT 璇彞錛屽茍榪斿洖鍒氬垰涓鴻繖涓柊琛屽垱寤虹殑 IDENTITY 鍊箋係ET NOCOUNT ON 璇彞琛ㄧず榪斿洖鐨勮褰曢泦鏈変竴琛屽拰涓鍒楋紝鍏朵腑鍖呭惈浜嗚繖涓柊鐨?IDENTITY 鍊箋傚鏋滄病鏈夋璇彞錛屽垯浼氶鍏堣繑鍥炰竴涓┖鐨勮褰曢泦錛堝洜涓?INSERT 璇彞涓嶈繑鍥炰換浣曟暟鎹級錛岀劧鍚庝細榪斿洖絎簩涓褰曢泦錛岀浜屼釜璁板綍闆嗕腑鍖呭惈 IDENTITY 鍊箋傝繖鍙兘鏈変簺浠や漢鍥版儜錛屽挨鍏舵槸鍥犱負鎮ㄤ粠鏉ュ氨娌℃湁甯屾湜榪?INSERT 浼氳繑鍥炶褰曢泦銆備箣鎵浠ヤ細鍙戠敓姝ゆ儏鍐碉紝鏄洜涓?SQL Server 鐪嬪埌浜嗚繖涓璁℃暟錛堝嵆涓琛屽彈鍒板獎鍝嶏級騫跺皢鍏惰В閲婁負琛ㄧず涓涓褰曢泦銆傚洜姝わ紝鐪熸鐨勬暟鎹鎺ㄥ洖鍒頒簡絎簩涓褰曢泦銆傚綋鐒舵偍鍙互浣跨敤 ADO 涓殑 NextRecordset 鏂規硶鑾峰彇姝ょ浜屼釜璁板綍闆嗭紝浣嗗鏋滄昏兘澶熼鍏堣繑鍥炶璁板綍闆嗕笖鍙繑鍥炶璁板綍闆嗭紝鍒欎細鏇存柟渚匡紝涔熸洿鏈夋晥鐜囥?br />
姝ゆ柟娉曡櫧鐒舵湁鏁堬紝浣嗛渶瑕佸湪 SQL 璇彞涓澶栨坊鍔犱竴浜涗唬鐮併傝幏寰楃浉鍚岀粨鏋滅殑鍙︿竴鏂規硶鏄湪 INSERT 涔嬪墠浣跨敤 SET NOCOUNT ON 璇彞錛屽茍灝?SELECT @@IDENTITY 璇彞鏀懼湪琛ㄤ腑鐨?FOR INSERT 瑙﹀彂鍣ㄤ腑錛屽涓嬮潰鐨勪唬鐮佺墖孌墊墍紺恒傝繖鏍鳳紝浠諱綍榪涘叆璇ヨ〃鐨?INSERT 璇彞閮藉皢鑷姩榪斿洖 IDENTITY 鍊箋?br />
CREATE TRIGGER trProducts_Insert ON Products FOR INSERT AS
SELECT @@IDENTITY
GO
瑙﹀彂鍣ㄥ彧鍦?Products 琛ㄤ笂鍙戠敓 INSERT 鏃跺惎鍔紝鎵浠ュ畠鎬繪槸浼氬湪鎴愬姛 INSERT 涔嬪悗榪斿洖涓涓?IDENTITY銆備嬌鐢ㄦ鎶鏈紝鎮ㄥ彲浠ュ緇堜互鐩稿悓鐨勬柟寮忓湪搴旂敤紼嬪簭涓绱?IDENTITY 鍊箋?br />
鍐呭祵瑙嗗浘涓庝復鏃惰〃
鏌愪簺鏃跺欙紝鏌ヨ闇瑕佸皢鏁版嵁涓庡叾浠栦竴浜涘彲鑳藉彧鑳介氳繃鎵ц GROUP BY 鐒跺悗鎵ц鏍囧噯鏌ヨ鎵嶈兘鏀墮泦鐨勬暟鎹繘琛岃仈鎺ャ備緥濡傦紝濡傛灉瑕佹煡璇㈡渶鏂頒簲涓畾鍗曠殑鏈夊叧淇℃伅錛屾偍棣栧厛闇瑕佺煡閬撴槸鍝簺瀹氬崟銆傝繖鍙互浣跨敤榪斿洖瀹氬崟 ID 鐨?SQL 鏌ヨ鏉ユ绱€傛鏁版嵁灝變細瀛樺偍鍦ㄤ復鏃惰〃錛堣繖鏄竴涓父鐢ㄦ妧鏈級涓紝鐒跺悗涓?Products 琛ㄨ繘琛岃仈鎺ワ紝浠ヨ繑鍥炶繖浜涘畾鍗曞敭鍑虹殑浜у搧鏁伴噺錛?br />
CREATE TABLE #Temp1 (OrderID INT NOT NULL, _
OrderDate DATETIME NOT NULL)
INSERT INTO #Temp1 (OrderID, OrderDate)
SELECT TOP 5 o.OrderID, o.OrderDate
FROM Orders o ORDER BY o.OrderDate DESC
SELECT p.ProductName, SUM(od.Quantity) AS ProductQuantity
FROM #Temp1 t
INNER JOIN [Order Details] od ON t.OrderID = od.OrderID
INNER JOIN Products p ON od.ProductID = p.ProductID
GROUP BY p.ProductName
ORDER BY p.ProductName
DROP TABLE #Temp1
榪欎簺 SQL 璇彞浼氬垱寤轟竴涓復鏃惰〃錛屽皢鏁版嵁鎻掑叆璇ヨ〃涓紝灝嗗叾浠栨暟鎹笌璇ヨ〃榪涜鑱旀帴錛岀劧鍚庨櫎鍘昏涓存椂琛ㄣ傝繖浼氬鑷存鏌ヨ榪涜澶ч噺 I/O 鎿嶄綔錛屽洜姝わ紝鍙互閲嶆柊緙栧啓鏌ヨ錛屼嬌鐢ㄥ唴宓岃鍥懼彇浠d復鏃惰〃銆傚唴宓岃鍥懼彧鏄竴涓彲浠ヨ仈鎺ュ埌 FROM 瀛愬彞涓殑鏌ヨ銆傛墍浠ワ紝鎮ㄤ笉鐢ㄥ湪 tempdb 涓殑涓存椂琛ㄤ笂鑰楄垂澶ч噺 I/O 鍜岀鐩樿闂紝鑰屽彲浠ヤ嬌鐢ㄥ唴宓岃鍥懼緱鍒板悓鏍風殑緇撴灉錛?br />
SELECT p.ProductName,
SUM(od.Quantity) AS ProductQuantity
FROM (
SELECT TOP 5 o.OrderID, o.OrderDate
FROM Orders o
ORDER BY o.OrderDate DESC
) t
INNER JOIN [Order Details] od ON t.OrderID = od.OrderID
INNER JOIN Products p ON od.ProductID = p.ProductID
GROUP BY
p.ProductName
ORDER BY
p.ProductName
姝ゆ煡璇笉浠呮瘮鍓嶉潰鐨勬煡璇㈡晥鐜囨洿楂橈紝鑰屼笖闀垮害鏇寸煭銆備復鏃惰〃浼氭秷鑰楀ぇ閲忚祫婧愩傚鏋滃彧闇瑕佸皢鏁版嵁鑱旀帴鍒板叾浠栨煡璇紝鍒欏彲浠ヨ瘯璇曚嬌鐢ㄥ唴宓岃鍥撅紝浠ヨ妭鐪佽祫婧愩?br />
閬垮厤 LEFT JOIN 鍜?NULL
褰撶劧錛屾湁寰堝鏃跺欐偍闇瑕佹墽琛?LEFT JOIN 鍜屼嬌鐢?NULL 鍊箋備絾鏄紝瀹冧滑騫朵笉閫傜敤浜庢墍鏈夋儏鍐點傛敼鍙?SQL 鏌ヨ鐨勬瀯寤烘柟寮忓彲鑳戒細浜х敓灝嗕竴涓姳鍑犲垎閽熻繍琛岀殑鎶ュ憡緙╃煭鍒板彧鑺卞嚑縐掗挓榪欐牱鐨勫ぉ澹や箣鍒殑鏁堟灉銆傛湁鏃訛紝蹇呴』鍦ㄦ煡璇腑璋冩暣鏁版嵁鐨勫艦鎬侊紝浣夸箣閫傚簲搴旂敤紼嬪簭鎵瑕佹眰鐨勬樉紺烘柟寮忋傝櫧鐒?TABLE 鏁版嵁綾誨瀷浼氬噺灝戝ぇ閲忓崰鐢ㄨ祫婧愮殑鎯呭喌錛屼絾鍦ㄦ煡璇腑榪樻湁璁稿鍖哄煙鍙互榪涜浼樺寲銆係QL 鐨勪竴涓湁浠峰肩殑甯哥敤鍔熻兘鏄?LEFT JOIN銆傚畠鍙互鐢ㄤ簬媯绱㈢涓涓〃涓殑鎵鏈夎銆佺浜屼釜琛ㄤ腑鎵鏈夊尮閰嶇殑琛屻佷互鍙婄浜屼釜琛ㄤ腑涓庣涓涓〃涓嶅尮閰嶇殑鎵鏈夎銆備緥濡傦紝濡傛灉甯屾湜榪斿洖姣忎釜瀹㈡埛鍙婂叾瀹氬崟錛屼嬌鐢?LEFT JOIN 鍒欏彲浠ユ樉紺烘湁瀹氬崟鍜屾病鏈夊畾鍗曠殑瀹㈡埛銆?br />
姝ゅ伐鍏峰彲鑳戒細琚繃搴︿嬌鐢ㄣ侺EFT JOIN 娑堣楃殑璧勬簮闈炲父涔嬪錛屽洜涓哄畠浠寘鍚笌 NULL錛堜笉瀛樺湪錛夋暟鎹尮閰嶇殑鏁版嵁銆傚湪鏌愪簺鎯呭喌涓嬶紝榪欐槸涓嶅彲閬垮厤鐨勶紝浣嗘槸浠d環鍙兘闈炲父楂樸侺EFT JOIN 姣?INNER JOIN 娑堣楄祫婧愭洿澶氾紝鎵浠ュ鏋滄偍鍙互閲嶆柊緙栧啓鏌ヨ浠ヤ嬌寰楄鏌ヨ涓嶄嬌鐢ㄤ換浣?LEFT JOIN錛屽垯浼氬緱鍒伴潪甯稿彲瑙傜殑鍥炴姤銆?br />
鍔犲揩浣跨敤 LEFT JOIN 鐨勬煡璇㈤熷害鐨勪竴欏規妧鏈秹鍙婂垱寤轟竴涓?TABLE 鏁版嵁綾誨瀷錛屾彃鍏ョ涓涓〃錛圠EFT JOIN 宸︿晶鐨勮〃錛変腑鐨勬墍鏈夎錛岀劧鍚庝嬌鐢ㄧ浜屼釜琛ㄤ腑鐨勫兼洿鏂?TABLE 鏁版嵁綾誨瀷銆傛鎶鏈槸涓涓袱姝ョ殑榪囩▼錛屼絾涓庢爣鍑嗙殑 LEFT JOIN 鐩告瘮錛屽彲浠ヨ妭鐪佸ぇ閲忔椂闂淬備竴涓緢濂界殑瑙勫垯鏄皾璇曞悇縐嶄笉鍚岀殑鎶鏈茍璁板綍姣忕鎶鏈墍闇鐨勬椂闂達紝鐩村埌鑾峰緱鐢ㄤ簬鎮ㄧ殑搴旂敤紼嬪簭鐨勬墽琛屾ц兘鏈浣崇殑鏌ヨ銆?br />
嫻嬭瘯鏌ヨ鐨勯熷害鏃訛紝鏈夊繀瑕佸嬈¤繍琛屾鏌ヨ錛岀劧鍚庡彇涓涓鉤鍧囧箋傚洜涓烘煡璇紙鎴栧瓨鍌ㄨ繃紼嬶級鍙兘浼氬瓨鍌ㄥ湪 SQL Server 鍐呭瓨涓殑榪囩▼緙撳瓨涓紝鍥犳絎竴嬈″皾璇曡楄垂鐨勬椂闂村ソ鍍忕◢闀夸竴浜涳紝鑰屾墍鏈夊悗緇皾璇曡楄垂鐨勬椂闂撮兘杈冪煭銆傚彟澶栵紝榪愯鎮ㄧ殑鏌ヨ鏃訛紝鍙兘姝e湪閽堝鐩稿悓鐨勮〃榪愯鍏朵粬鏌ヨ銆傚綋鍏朵粬鏌ヨ閿佸畾鍜岃В閿佽繖浜涜〃鏃訛紝鍙兘浼氬鑷存偍鐨勬煡璇㈣鎺掗槦絳夊緟銆備緥濡傦紝濡傛灉鎮ㄨ繘琛屾煡璇㈡椂鏌愪漢姝e湪鏇存柊 姝よ〃涓殑鏁版嵁錛屽垯鍦ㄦ洿鏂版彁浜ゆ椂鎮ㄧ殑鏌ヨ鍙兘闇瑕佽楄垂鏇撮暱鏃墮棿鏉ユ墽琛屻?br />
閬垮厤浣跨敤 LEFT JOIN 鏃墮熷害闄嶄綆鐨勬渶綆鍗曟柟娉曟槸灝藉彲鑳藉鍦板洿緇曞畠浠璁?a target="_blank">鏁版嵁搴?/a>銆備緥濡傦紝鍋囪鏌愪竴浜у搧鍙兘鍏鋒湁綾誨埆涔熷彲鑳芥病鏈夌被鍒傚鏋?Products 琛ㄥ瓨鍌ㄤ簡鍏剁被鍒殑 ID錛岃屾病鏈夌敤浜庢煇涓壒瀹氫駭鍝佺殑綾誨埆錛屽垯鎮ㄥ彲浠ュ湪瀛楁涓瓨鍌?NULL 鍊箋傜劧鍚庢偍蹇呴』鎵ц LEFT JOIN 鏉ヨ幏鍙栨墍鏈変駭鍝佸強鍏剁被鍒傛偍鍙互鍒涘緩涓涓間負鈥淣o Category鈥濈殑綾誨埆錛屼粠鑰屾寚瀹氬閿叧緋諱笉鍏佽 NULL 鍊箋傞氳繃鎵ц涓婅堪鎿嶄綔錛岀幇鍦ㄦ偍灝卞彲浠ヤ嬌鐢?INNER JOIN 媯绱㈡墍鏈変駭鍝佸強鍏剁被鍒簡銆傝櫧鐒惰繖鐪嬭搗鏉ュソ鍍忔槸涓涓甫鏈夊浣欐暟鎹殑鍙橀氭柟娉曪紝浣嗗彲鑳芥槸涓涓緢鏈変環鍊肩殑鎶鏈紝鍥犱負瀹冨彲浠ユ秷闄?SQL 鎵瑰鐞嗚鍙ヤ腑娑堣楄祫婧愯緝澶氱殑 LEFT JOIN銆傚湪鏁版嵁搴?/a>涓叏閮ㄤ嬌鐢ㄦ姒傚康鍙互涓烘偍鑺傜渷澶ч噺鐨勫鐞嗘椂闂淬傝璁頒綇錛屽浜庢偍鐨勭敤鎴瘋岃█錛屽嵆浣垮嚑縐掗挓鐨勬椂闂翠篃闈炲父閲嶈錛屽洜涓哄綋鎮ㄦ湁璁稿鐢ㄦ埛姝e湪璁塊棶鍚屼竴涓仈鏈?a target="_blank">鏁版嵁搴?/a>搴旂敤紼嬪簭鏃訛紝榪欏嚑縐掗挓瀹為檯涓婄殑鎰忎箟浼氶潪甯擱噸澶с?br />
鐏墊椿浣跨敤絎涘崱灝斾箻縐?
瀵逛簬姝ゆ妧宸э紝鎴戝皢榪涜闈炲父璇︾粏鐨勪粙緇嶏紝騫舵彁鍊″湪鏌愪簺鎯呭喌涓嬩嬌鐢ㄧ瑳鍗″皵涔樼Н銆傚嚭浜庢煇浜涘師鍥狅紝絎涘崱灝斾箻縐?(CROSS JOIN) 閬埌浜嗗緢澶氳按璐o紝寮鍙戜漢鍛橀氬父浼氳璀﹀憡鏍規湰灝變笉瑕佷嬌鐢ㄥ畠浠傚湪璁稿鎯呭喌涓嬶紝瀹冧滑娑堣楃殑璧勬簮澶錛屼粠鑰屾棤娉曢珮鏁堜嬌鐢ㄣ備絾鏄儚 SQL 涓殑浠諱綍宸ュ叿涓鏍鳳紝濡傛灉姝g‘浣跨敤錛屽畠浠篃浼氬緢鏈変環鍊箋備緥濡傦紝濡傛灉鎮ㄦ兂榪愯涓涓繑鍥炴瘡鏈堟暟鎹紙鍗充嬌鏌愪竴鐗瑰畾鏈堜喚瀹㈡埛娌℃湁瀹氬崟涔熻榪斿洖錛夌殑鏌ヨ錛屾偍灝卞彲浠ュ緢鏂逛究鍦頒嬌鐢ㄧ瑳鍗″皵涔樼Н銆?br />
铏界劧榪欑湅璧鋒潵濂藉儚娌′粈涔堢濂囩殑錛屼絾鏄鑰冭檻涓涓嬶紝濡傛灉鎮ㄤ粠瀹㈡埛鍒板畾鍗曪紙榪欎簺瀹氬崟鎸夋湀浠借繘琛屽垎緇勫茍瀵歸攢鍞榪涜灝忚錛夎繘琛屼簡鏍囧噯鐨?INNER JOIN錛屽垯鍙細鑾峰緱瀹㈡埛鏈夊畾鍗曠殑鏈堜喚銆傚洜姝わ紝瀵逛簬瀹㈡埛鏈璐換浣曚駭鍝佺殑鏈堜喚錛屾偍涓嶄細鑾峰緱 0 鍊箋傚鏋滄偍鎯充負姣忎釜瀹㈡埛閮界粯鍒朵竴涓浘錛屼互鏄劇ず姣忎釜鏈堝拰璇ユ湀閿鍞錛屽垯鍙兘甯屾湜姝ゅ浘鍖呮嫭鏈堥攢鍞涓?0 鐨勬湀浠斤紝浠ヤ究鐩磋鏍囪瘑鍑鴻繖浜涙湀浠姐傚鏋滀嬌鐢?Figure 2錛堟渶鍚庝竴欏碉級 涓殑 SQL錛屾暟鎹垯浼氳煩榪囬攢鍞涓?0 緹庡厓鐨勬湀浠斤紝鍥犱負鍦ㄥ畾鍗曡〃涓浜庨浂閿鍞涓嶄細鍖呭惈浠諱綍琛岋紙鍋囪鎮ㄥ彧瀛樺偍鍙戠敓鐨勪簨浠訛級銆?br />
Figure 3錛堟渶鍚庝竴欏碉級涓殑浠g爜铏界劧杈冮暱錛屼絾鏄彲浠ヨ揪鍒拌幏鍙栨墍鏈夐攢鍞暟鎹紙鐢氳嚦鍖呮嫭娌℃湁閿鍞鐨勬湀浠斤級鐨勭洰鏍囥傞鍏堬紝瀹冧細鎻愬彇鍘誨勾鎵鏈夋湀浠界殑鍒楄〃錛岀劧鍚庡皢瀹冧滑鏀懼叆絎竴涓?TABLE 鏁版嵁綾誨瀷琛?(@tblMonths) 涓備笅涓姝ワ紝姝や唬鐮佷細鑾峰彇鍦ㄨ鏃墮棿孌靛唴鏈夐攢鍞鐨勬墍鏈夊鎴峰叕鍙哥殑鍚嶇О鍒楄〃錛岀劧鍚庡皢瀹冧滑鏀懼叆鍙︿竴涓?TABLE 鏁版嵁綾誨瀷琛?(@tblCus-tomers) 涓傝繖涓や釜琛ㄥ瓨鍌ㄤ簡鍒涘緩緇撴灉闆嗘墍蹇呴渶鐨勬墍鏈夊熀鏈暟鎹紝浣嗗疄闄呴攢鍞暟閲忛櫎澶栥?絎竴涓〃涓垪鍑轟簡鎵鏈夋湀浠斤紙12 琛岋級錛岀浜屼釜琛ㄤ腑鍒楀嚭浜嗚繖涓椂闂存鍐呮湁閿鍞鐨勬墍鏈夊鎴鳳紙瀵逛簬鎴戞槸 81 涓級銆傚茍闈炴瘡涓鎴峰湪榪囧幓 12 涓湀涓殑姣忎釜鏈堥兘璐拱浜嗕駭鍝侊紝鎵浠ワ紝鎵ц INNER JOIN 鎴?LEFT JOIN 涓嶄細榪斿洖姣忎釜鏈堢殑姣忎釜瀹㈡埛銆傝繖浜涙搷浣滃彧浼氳繑鍥炶喘涔頒駭鍝佺殑瀹㈡埛鍜屾湀浠姐?br />
絎涘崱灝斾箻縐垯鍙互榪斿洖鎵鏈夋湀浠界殑鎵鏈夊鎴楓傜瑳鍗″皵涔樼Н鍩烘湰涓婃槸灝嗙涓涓〃涓庣浜屼釜琛ㄧ浉涔橈紝鐢熸垚涓涓闆嗗悎錛屽叾涓寘鍚涓涓〃涓殑琛屾暟涓庣浜屼釜琛ㄤ腑鐨勮鏁扮浉涔樼殑緇撴灉銆傚洜姝わ紝絎涘崱灝斾箻縐細鍚戣〃 @tblFinal 榪斿洖 972 琛屻傛渶鍚庣殑姝ラ鏄嬌鐢ㄦ鏃ユ湡鑼冨洿鍐呮瘡涓鎴風殑鏈堥攢鍞鎬昏鏇存柊 @tblFinal 琛紝浠ュ強閫夋嫨鏈緇堢殑琛岄泦銆?br />
濡傛灉鐢變簬絎涘崱灝斾箻縐崰鐢ㄧ殑璧勬簮鍙兘浼氬緢澶氾紝鑰屼笉闇瑕佺湡姝g殑絎涘崱灝斾箻縐紝鍒欏彲浠ヨ皚鎱庡湴浣跨敤 CROSS JOIN銆備緥濡傦紝濡傛灉瀵逛駭鍝佸拰綾誨埆鎵ц浜?CROSS JOIN錛岀劧鍚庝嬌鐢?WHERE 瀛愬彞銆丏ISTINCT 鎴?GROUP BY 鏉ョ瓫閫夊嚭澶у鏁拌錛岄偅涔堜嬌鐢?INNER JOIN 浼氳幏寰楀悓鏍風殑緇撴灉錛岃屼笖鏁堢巼楂樺緱澶氥傚鏋滈渶瑕佷負鎵鏈夌殑鍙兘鎬ч兘榪斿洖鏁版嵁錛堜緥濡傚湪鎮ㄥ笇鏈涗嬌鐢ㄦ瘡鏈堥攢鍞棩鏈熷~鍏呬竴涓浘琛ㄦ椂錛夛紝鍒欑瑳鍗″皵涔樼Н鍙兘浼氶潪甯告湁甯姪銆備絾鏄紝鎮ㄤ笉搴旇灝嗗畠浠敤浜庡叾浠栫敤閫旓紝鍥犱負鍦ㄥぇ澶氭暟鏂規涓?INNER JOIN 鐨勬晥鐜囪楂樺緱澶氥?br />
鎷鵑仐琛ラ浂
榪欓噷浠嬬粛鍏朵粬涓浜涘彲甯姪鎻愰珮 SQL 鏌ヨ鏁堢巼鐨勫父鐢ㄦ妧鏈傚亣璁炬偍灝嗘寜鍖哄煙瀵規墍鏈夐攢鍞漢鍛樿繘琛屽垎緇勫茍灝嗕粬浠殑閿鍞榪涜灝忚錛屼絾鏄偍鍙兂瑕侀偅浜?a target="_blank">鏁版嵁搴?/a>涓爣璁頒負澶勪簬媧誨姩鐘舵佺殑閿鍞漢鍛樸傛偍鍙互鎸夊尯鍩熷閿鍞漢鍛樺垎緇勶紝騫朵嬌鐢?HAVING 瀛愬彞娑堥櫎閭d簺鏈浜庢椿鍔ㄧ姸鎬佺殑閿鍞漢鍛橈紝涔熷彲浠ュ湪 WHERE 瀛愬彞涓墽琛屾鎿嶄綔銆傚湪 WHERE 瀛愬彞涓墽琛屾鎿嶄綔浼氬噺灝戦渶瑕佸垎緇勭殑琛屾暟錛屾墍浠ユ瘮鍦?HAVING 瀛愬彞涓墽琛屾鎿嶄綔鏁堢巼鏇撮珮銆侶AVING 瀛愬彞涓熀浜庤鐨勬潯浠剁殑絳涢変細寮哄埗鏌ヨ瀵歸偅浜涘湪 WHERE 瀛愬彞涓細琚幓闄ょ殑鏁版嵁榪涜鍒嗙粍銆?br />
鍙︿竴涓彁楂樻晥鐜囩殑鎶宸ф槸浣跨敤 DISTINCT 鍏抽敭瀛楁煡鎵炬暟鎹鐨勫崟鐙姤琛紝鏉ヤ唬鏇夸嬌鐢?GROUP BY 瀛愬彞銆傚湪榪欑鎯呭喌涓嬶紝浣跨敤 DISTINCT 鍏抽敭瀛楃殑 SQL 鏁堢巼鏇撮珮銆傝鍦ㄩ渶瑕佽綆楄仛鍚堝嚱鏁幫紙SUM銆丆OUNT銆丮AX 絳夛級鐨勬儏鍐典笅鍐嶄嬌鐢?GROUP BY銆傚彟澶栵紝濡傛灉鎮ㄧ殑鏌ヨ鎬繪槸鑷繁榪斿洖涓涓敮涓鐨勮錛屽垯涓嶈浣跨敤 DISTINCT 鍏抽敭瀛椼傚湪榪欑鎯呭喌涓嬶紝DISTINCT 鍏抽敭瀛楀彧浼氬鍔犵郴緇熷紑閿銆?br />
鎮ㄥ凡緇忕湅鍒頒簡錛屾湁澶ч噺鎶鏈兘鍙敤浜庝紭鍖栨煡璇㈠拰瀹炵幇鐗瑰畾鐨勪笟鍔¤鍒欙紝鎶宸у氨鏄繘琛屼竴浜涘皾璇曪紝鐒跺悗姣旇緝瀹冧滑鐨勬ц兘銆傛渶閲嶈鐨勬槸瑕佹祴璇曘佹祴璇曘佸啀嫻嬭瘯銆傚湪姝や笓鏍忕殑灝嗘潵鍚勬湡鍐呭涓紝鎴戝皢緇х畫娣卞叆璁茶堪 SQL Server 姒傚康錛屽寘鎷?a target="_blank">鏁版嵁搴?/a>璁捐銆佸ソ鐨勭儲寮曞疄璺典互鍙?SQL Server 瀹夊叏鑼冧緥銆?br />
Figure 2 Returning All Customers and Their Sales
set nocount on
DECLARE @dtStartDate DATETIME,
@dtEndDate DATETIME,
@dtDate DATETIME
SET @dtEndDate = '5/5/1997'
SET @dtEndDate = DATEADD(DD, -1, CAST(CAST((MONTH(@dtEndDate) + 1)
AS VARCHAR(2)) + '/01/' + CAST(YEAR(@dtEndDate) AS VARCHAR(4)) + '
23:59:59' AS DATETIME))
SET @dtStartDate = DATEADD(MM, -1 * 12, @dtEndDate)
SELECT CAST(YEAR(o.OrderDate) AS VARCHAR(4)) + '-' +
CASE
WHEN MONTH(o.OrderDate) < 10
THEN '0' + CAST(MONTH(o.OrderDate) AS VARCHAR(2))
ELSE CAST(MONTH(o.OrderDate) AS VARCHAR(2))
END AS sMonth,
c.CustomerID,
c.CompanyName,
c.ContactName,
SUM(od.Quantity * od.UnitPrice) AS mSales
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
INNER JOIN [Order Details] od ON o.OrderID = od.OrderID
WHERE o.OrderDate BETWEEN @dtStartDate AND @dtEndDate
GROUP BY
CAST(YEAR(o.OrderDate) AS VARCHAR(4)) + '-' +
CASE
WHEN MONTH(o.OrderDate) < 10
THEN '0' + CAST(MONTH(o.OrderDate) AS VARCHAR(2))
ELSE CAST(MONTH(o.OrderDate) AS VARCHAR(2))
END,
c.CustomerID,
c.CompanyName,
c.ContactName
ORDER BY
c.CompanyName,
sMonth
___________________________________________________________________________
Figure 3 Cartesian Product at Work
DECLARE @tblMonths TABLE (sMonth VARCHAR(7))
DECLARE @tblCustomers TABLE ( CustomerID CHAR(10),
CompanyName VARCHAR(50),
ContactName VARCHAR(50))
DECLARE @tblFinal TABLE ( sMonth VARCHAR(7),
CustomerID CHAR(10),
CompanyName VARCHAR(50),
ContactName VARCHAR(50),
mSales MONEY)
DECLARE @dtStartDate DATETIME,
@dtEndDate DATETIME,
@dtDate DATETIME,
@i INTEGER
SET @dtEndDate = '5/5/1997'
SET @dtEndDate = DATEADD(DD, -1, CAST(CAST((MONTH(@dtEndDate) + 1) AS
VARCHAR(2)) + '/01/' + CAST(YEAR(@dtEndDate) AS VARCHAR(4)) + '
23:59:59' AS DATETIME))
SET @dtStartDate = DATEADD(MM, -1 * 12, @dtEndDate)
鈥?Get all months into the first table
SET @i = 0
WHILE (@i < 12)
BEGIN
SET @dtDate = DATEADD(mm, -1 * @i, @dtEndDate)
INSERT INTO @tblMonths SELECT CAST(YEAR(@dtDate) AS VARCHAR(4)) + '-' +
CASE
WHEN MONTH(@dtDate) < 10
THEN '0' + CAST(MONTH(@dtDate) AS VARCHAR(2))
ELSE CAST(MONTH(@dtDate) AS VARCHAR(2))
END AS sMonth
SET @i = @i + 1
END
鈥?Get all clients who had sales during that period into the "y" table
INSERT INTO @tblCustomers
SELECT DISTINCT
c.CustomerID,
c.CompanyName,
c.ContactName
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.OrderDate BETWEEN @dtStartDate AND @dtEndDate
INSERT INTO @tblFinal
SELECT m.sMonth,
c.CustomerID,
c.CompanyName,
c.ContactName,
0
FROM @tblMonths m CROSS JOIN @tblCustomers c
UPDATE @tblFinal SET
mSales = mydata.mSales
FROM @tblFinal f INNER JOIN
(
SELECT c.CustomerID,
CAST(YEAR(o.OrderDate) AS VARCHAR(4)) + '-' +
CASE WHEN MONTH(o.OrderDate) < 10
THEN '0' + CAST(MONTH(o.OrderDate) AS VARCHAR(2))
ELSE CAST(MONTH(o.OrderDate) AS VARCHAR(2))
END AS sMonth,
SUM(od.Quantity * od.UnitPrice) AS mSales
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
INNER JOIN [Order Details] od ON o.OrderID = od.OrderID
WHERE o.OrderDate BETWEEN @dtStartDate AND @dtEndDate
GROUP BY
c.CustomerID,
CAST(YEAR(o.OrderDate) AS VARCHAR(4)) + '-' +
CASE WHEN MONTH(o.OrderDate) < 10
THEN '0' + CAST(MONTH(o.OrderDate) AS VARCHAR(2))
ELSE CAST(MONTH(o.OrderDate) AS VARCHAR(2))
END
) mydata on f.CustomerID = mydata.CustomerID AND f.sMonth =
mydata.sMonth
SELECT f.sMonth,
f.CustomerID,
f.CompanyName,
f.ContactName,
f.mSales
FROM @tblFinal f
ORDER BY
f.CompanyName,
f.sMonth
鏉ユ簮錛歨ttp://www.chinahtml.com
]]>
銆銆絎旇呯幇鍦ㄤ笓闂ㄨ礋璐g綉涓婂北涓滐紙http://www.china-sd.net錛変腑灞變笢鎼滅儲鐗堝潡鐨勫緩璁撅紝鍒╃敤鏈甯哥敤鐨勫紑鍙戣璦--asp寮鍙戞悳绱㈠紩鎿庣殑寮哄ぇ鍔熻兘錛佷笅闈㈡垜灝辨悳绱㈠紩鎿庝富瑕佺粍鎴愰儴鍒嗗拰鍏朵腑涓浜涘姛鑳界殑瀹炵幇浠g爜璁茶В緇欏ぇ瀹訛紝鏈変粈涔堜笉瓚充箣澶勮澶у緇欎簣鎸囧嚭錛?
銆銆鍦ㄨ繖涓绔犺妭涓紝鎴戜粙緇嶄竴涓嬫悳绱㈠紩鎿庣殑緇勬垚閮ㄥ垎鍜屼富瑕佸姛鑳姐?
銆銆鎼滅儲寮曟搸鐨勭粍鎴愶紝澶ц嚧鍒嗕負涓夐儴鍒嗭細
銆銆1銆佺晫闈細榪欎竴閮ㄥ垎涓昏鏄潰鍚戝鎴風殑錛屾槸鍙互鐪嬪埌鐨勯儴鍒嗭紝姣斿鎮ㄦ墦寮search.sina.com.cn浜嬪悗鐪嬪埌鐨勯〉闈€?
銆銆2銆佺▼搴忥細榪欎竴閮ㄥ垎涓昏鏄墽琛屼唬鐮侊紝鏍規嵁瀹㈡埛鐨勬悳绱㈣姹傚幓鎵ц浠g爜浠庤岃幏寰楁悳绱㈢粨鏋滐紱榪欎簺鏄垜浠湅涓嶅埌鐨勩?
銆銆3銆佹暟鎹簱錛氭墍鏈夌殑鎼滅儲寮曟搸閮界涓嶅紑鏁版嵁搴擄紝榪炶憲鍚嶇殑google.com涔熶笉渚嬪錛涙暟鎹簱鏄偍瀛樻悳绱㈣祫鏂欑殑浠撳簱錛屽偍瀛樼殑瓚婂錛屾悳绱㈠緱鍒扮殑璧勬枡灝變細瓚婂錛岃繖涔熸槸鎼滅儲寮曟搸鏄惁寮哄ぇ鐨勯棯鑰鐐逛箣涓銆?
銆銆銆閭d箞鎼滅儲寮曟搸鏄惁寮哄ぇ榪樻湁鍏朵粬鐨勯棯鑰鐐瑰柦錛屾槸浠涔堝憿錛熷錛屾悳绱㈠紩鎿庢暟鎹簱涓殑瀛樺偍璧勬枡鍐嶅錛屾垜浠笉鑳藉鏂逛究鐨勫幓鏌ユ壘鎼滅儲錛岀敋鑷蟲煡鎵句笉鍒版墍闇鐨勮祫鏂欙紝閭d箞榪欎釜鏁版嵁搴撳氨鏄滄鈥濈殑錛屾鏃犵敤澶勫彲璦錛屾墍浠ョ▼搴忎唬鐮佽搗鍒伴潪甯擱噸瑕佺殑浣滅敤銆?
銆銆銆璁插埌榪欓噷錛屾垜搴旇緇欏ぇ瀹朵粙緇嶄竴涓嬫悳绱㈠紩鎿庣殑鍑犱釜涓昏鍔熻兘錛?
銆銆銆1銆佹悳绱㈡煡璇細姣棤鐤戦棶榪欐槸鏈鍩烘湰鐨勫姛鑳戒簡錛屾牴鎹叧閿瓧鎵懼埌絎﹀悎鍏抽敭瀛楃殑鐩稿叧璧勬枡銆?
銆銆銆2銆佸垎欏墊樉紺猴細濡傛灉浣犳悳绱㈠埌鐨勮祫鏂欓潪甯稿錛岄兘鏀懼湪涓涓〉闈㈤噷錛岄偅鏍風粰浜虹殑鎰熻灝變細浣夸貢緋熺碂鐨勪竴鐗囷紱鍒嗛〉鏄劇ず鏍規嵁浜轟滑鐪嬩功鐨勪範鎯紝灝嗕竴閮ㄥ垎鍐呭鏀懼埌絎竴欏碉紝鍏朵粬鐨勫唴瀹規斁鍒扮浜岄〉銆佺涓夐〉絳夌瓑銆?
銆銆銆3銆佹悳绱㈢粺璁★細涓鑸寘鎷煡璇㈣祫鏂欑殑鏁伴噺錛屽垎鍑犱釜欏甸潰錛屾瘡涓〉闈㈠惈鍑犱釜璧勬枡錛屽綋鍓嶉〉闈㈣祫鏂欒寖鍥寸瓑絳夈?
銆銆銆4銆佹悳绱㈢粨鏋滅紪鎺掞細鎼滅儲鎺掑悕鎴戞兂澶у涓嶄細闄岀敓錛岃繖浜涙槸緇煎悎緗戠珯鎼滅儲寮曟搸鎸oney鐨勪竴欏規帾鏂斤紝榪欎篃鏄己澶ф悳绱㈠紩鎿庝腑涓嶅彲緙哄皯鐨勫姛鑳斤紱姣斿鏍規嵁鐐瑰嚮閲忔帓鍚嶏紝鏍規嵁鏀惰垂鎺掑悕銆佹牴鎹瓑綰ф帓鍚嶃?
銆銆銆5銆佸涓叧閿瓧鏌ヨ錛氣滃鏋滆鏌ユ壘鍖呭惈澶氫釜鍏抽敭璇嶇殑淇℃伅錛屽彲浠ョ敤絀烘牸鎶婂叧閿瘝闅斿紑鈥濊繖鏄柊嫻悳绱㈠紩鎿庣増闈腑鐨勪竴孌墊枃瀛楋紝鍦ㄤ竴涓枃鏈涓墦涓婂涓叧閿瓧鎼滅儲鏌ヨ璧勬枡銆?
銆銆銆6銆佹暣浣撶粺璁★細榪欎釜鏄鎼滅儲寮曟搸寮閫氳嚦浠婁竴浜涙暟鎹粺璁★紝鍖呭惈鈥滅儹闂ㄦ煡璇㈠叧閿瓧鈥濈粺璁°佹暟鎹簱涓祫鏂欐暣浣撶粺璁°佹瘡涓被鍒墍鍚祫鏂欑粺璁$瓑絳夈?
銆銆銆浠ヤ笂鍔熻兘浠g爜涓昏鏍規嵁絎旇呯殑瑕佹眰鏉ヤ功鍐欙紝澶у鍙互鍦ㄦ垜鍐欑殑浠g爜涓婂仛淇敼錛屼互鎴愪負浣犺嚜宸遍渶瑕佺殑鍔熻兘浠g爜銆?
銆銆濂戒簡錛岀粡榪囦簡涓鑺傜殑鐑韓鍚庯紝鎴戜滑涔熷彲浠ヨ繘鍏ュ疄鎴橀樁孌碉紝棣栧厛錛屾垜浠厛寤轟竴涓暟鎹簱錛屼綔涓鴻祫鏂欑殑瀛樺偍錛岃繖閲屾垜灝嗘暟鎹簱鐨勬枃浠跺悕涓篿nformation.mdb錛屼嬌鐢╝ccess鍒涘緩鏁版嵁搴擄紝褰撶劧浣犱篃鍙互浣跨敤sqlserver鍒涘緩銆?
銆銆寤虹珛鍥涗釜琛細www(瀛樺偍璧勬枡),sort(澶х被)錛宻amll(灝忕被),key(鏌ヨ鍏抽敭瀛?
銆銆 銆1銆亀ww琛細id---鑷姩緙栧彿錛宻itename---绔欑偣鍚嶇О錛寀rl---绔欑偣閾炬帴錛宖aq---綆瑕佽鏄庯紝key---鍏抽敭瀛楋紝time---娣誨姞鏃墮棿,level---绔欑偣絳夌駭錛宻ortid---澶х被id錛宻mallid---灝忕被id錛宧ot---绔欑偣鐐瑰嚮嬈℃暟銆?
銆銆銆銆2銆乻ort琛細id---鑷姩緙栧彿,sort
銆銆銆銆3銆乻mall琛細id---鑷姩緙栧彿,small
銆銆銆銆4銆乲ey琛細keyname---鍏抽敭瀛楋紱keyhot---鍑虹幇鐨勬鏁?
銆銆銆銆鐢╝sp寤虹珛涓庢暟鎹簱鐨勮繛鎺ワ細conn.asp
銆銆
銆銆璇存槑錛氫嬌鐢⊿erver.MapPath錛堬級琛ㄧず鐨勮礬寰勪負鏂囦歡鐨勭浉瀵硅礬寰勶紝鎴戣繖閲宑onn.asp鍜宨nformation.mdb鍦ㄥ悓涓涓洰褰曚笅銆傛垜鎯寵繖浜涢兘寰堢畝鍗曪紝澶у寰堝鏄撶悊瑙e拰鎺ュ彈鐨勶紒濂斤紝灝嗘暟鎹簱寤虹珛璧鋒潵鍚庯紝鎴戜滑灝卞彲浠ュ緩璁懼己澶у姛鑳界殑鎼滅儲寮曟搸銆傝鏈熷緟鍝︼紒鍢誨樆~~~~
銆銆鐢╝sp鍒朵綔寮哄ぇ鐨勬悳绱㈠紩鎿?-- 妯$硦鎼滅儲
銆銆鏍規嵁涓涓叧閿瓧錛屾悳绱㈠埌鐩稿叧鐨勮祫鏂欙紝榪欓噷鐨勨滅浉鍏斥濇槸鎸囪祫鏂欎腑鏈夌被浼艱繖涓叧閿瓧鐨勫瓧絎︿覆銆備緥濡傦細鈥滃北涓溾濊繖涓叧閿瓧錛屽彧瑕佹暟鎹簱涓祫鏂欓噷鍖呭惈鈥滃北涓溾濊繖涓叧閿瓧鐨勯兘瑕佹妸瀹冧滑鎵懼嚭鏉ャ傛ā緋婃悳绱㈢殑搴旂敤鍏跺疄寰堢畝鍗曪紝鍙浣跨敤涓涓猻ql璇彞灝卞彲浠ュ疄鐜幫紝涓嬮潰鍜變滑鐪嬬湅浠栫殑璇彞鐨勫啓娉曘?
銆銆sql璇硶涓綘浼氬彂鐜拌繖涔堝嚑涓垽瀹氳瘝錛歀IKE銆丯OT LIKE鍜?BETWEEN銆?LIKE鍒ゅ畾璇嶆槸涓涓潪甯告湁鐢ㄧ殑絎﹀彿銆備笉榪囷紝鍦ㄥ緢澶氭儏鍐典笅鐢ㄤ簡瀹冨彲鑳戒細甯︾粰浣犲お澶氱殑鏁版嵁錛屾墍浠ュ湪鐢ㄥ埌瀹冧箣鍓嶆渶濂藉厛寮鍔ㄨ剳絳嬪鎯蟲兂鑷繁鍒板簳鎯寵幏寰椾粈涔堟暟鎹侼OT LIKE鏄弽鍏墮亾鑰岃浜嗐侭ETWEEN鍋囪浣犳兂鍙栧嚭涓瀹氳寖鍥村唴鐨勬暟鎹紝鑰屼笖浣犱簨鍏堢煡閬撹寖鍥寸殑璧風偣鍜岀粓鐐癸紝閭d箞浣犱笉濡ㄩ噰鐢˙ETWEEN 鍒ゆ柇璇嶃傝繖鍑犱釜鍒ゅ畾璇嶆牴鎹笉鍚岀殑鐜浣跨敤錛屼竴鑸渶甯哥敤鐨勫氨鏄痩ike鍜?%"緇撳悎浜嗐?
銆銆dim sql,key
銆銆key=request("key")
銆銆sql="select * from www where sitename like '%"&key&"%' or faq like '%"&key&"%' or key like '%"&key&"%' "
銆銆璇存槑錛氳繖閲岀殑sql璇彞鐩殑灝辨槸媯绱㈡暟鎹簱涓璼itename瀛楁涓槸鍚﹀寘鍚玨ey錛宖aq瀛楁涓槸鍚﹀寘鍚玨ey錛宬ey瀛楁涓槸鍚﹀寘鍚玨ey錛岃繖鏍峰仛鐨勭洰鐨勬槸璁╂悳绱㈢殑鑼冨洿鍖呭惈鍒扳滅珯鐐瑰悕縐扳濄佲滅珯鐐圭畝瑕佽鏄庘濄佲滅珯鐐瑰叧閿瓧鈥濄傚鏋滀綘鍙兂鎼滅儲鍏抽敭瀛楀彧瑕佷嬌鐢?sql="select * from www where key like '%"&key&"%' " 灝卞彲浠ヤ簡銆傗渓ike鈥濅腑閮戒嬌鐢ㄤ簡鈥渙r鈥濇潵鐩歌繛錛屸渙r鈥?鈥滄垨鑰呪濈殑鎰忔濓紝鎰忔濇槸涓嶈鍝竴涓猯ike 絎﹀悎鏉′歡錛岄兘瑕佹妸鎼滅儲鍒扮殑璧勬枡杈撳嚭鏄劇ず鍑烘潵銆?
銆銆OK錛岀幇鍦ㄥぇ鍙笉蹇呭幓鐪嬬湅鑳戒笉鑳芥墽琛屾垨鑰呰鎵ц鐨勭粨鏋滃浣曪紝鍥犱負鎼滅儲寮曟搸澶ч儴鍒嗗姛鑳界殑瀹炵幇閮芥槸闈爏ql璇彞鐨勪功鍐欎簡銆傜瓑鎴戞妸鍏朵粬鐨勭浉鍏硈ql璇彞鐨勫姛鑳藉疄鐜頒粙緇嶅畬鍚庯紝澶у鍐嶇湅鐪嬫晥鏋滐紝鍛靛懙錛佸埆鐫鎬ワ紒錛?
鏉ユ簮錛歨ttp://edu.chinaz.com
]]>