diff --git "a/24\345\274\240\346\267\221\350\212\263/9-30-\346\270\270\346\240\207/9-30-\344\275\234\344\270\232.sql" "b/24\345\274\240\346\267\221\350\212\263/9-30-\346\270\270\346\240\207/9-30-\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..51c6fbc109f5becc9b457e89cc08eeb301ff2b71 --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/9-30-\346\270\270\346\240\207/9-30-\344\275\234\344\270\232.sql" @@ -0,0 +1,100 @@ + +use test_trigger +go + +select * from People +select * from Department + +--例3:使用游标实现加薪操作 +declare cur_id cursor scroll +for select PeopleId from People + +open cur_id + +declare @p_Id int,@p_salary money = 2000 +fetch first from cur_id into @p_Id + +while(@@FETCH_STATUS = 0) +begin + update People set PeopleSalary += @p_salary where PeopleId = @p_Id + fetch next from cur_id into @p_Id +end + +select * from people + +close cur_id + +--例4:使用游标删除不达标员工 +declare cur_del cursor scroll +for select PeopleId,PeopleSalary from People + +open cur_del + +declare @pId int,@pSalary money +fetch first from cur_del into @pId,@pSalary + +while(@@FETCH_STATUS = 0) +begin + if(@pSalary < 10000) + begin + delete People where PeopleId = @pId + fetch next from cur_del into @pId,@pSalary + end + + fetch next from cur_del into @pId,@pSalary +end + +select * from people + +close cur_del + +--使用游标 实现:如果A表与B表中ID字段值相同,那么将B表中的省份,城市 修改成与A表中的城市一致(连表) +create database AB +go +use AB +go +create table A( +aId int not null, +aProvince varchar(50), +aCity varchar(50) +) +go +create table B( +bId int not null, +bProvince varchar(50), +bCity varchar(50) +) +go +insert into A(aId,aProvince,aCity) values +(1,'安徽','淮南'), +(6,'广东','深圳'), +(7,'福建','龙岩'), +(8,'甘肃','兰州') +go +insert into B(bId,bProvince,bCity) values +(1,'河北','石家庄'), +(2,'广东','汕头'), +(3,'福建','厦门'), +(4,'山西','太原') +go + +--deallocate cur_city +declare cur_city cursor scroll +for select A.* from A join B on A.aId = B.bId + +open cur_city + +declare @aid int,@apro varchar(50),@acity varchar(50) +fetch first from cur_city into @aid,@apro,@acity + +while(@@FETCH_STATUS = 0) +begin + update B set B.bProvince = @apro,B.bCity = @acity where B.bId = @aid + fetch next from cur_city into @aid,@apro,@acity +end + +select * from A +select * from B + +close cur_city + diff --git "a/24\345\274\240\346\267\221\350\212\263/9-30-\346\270\270\346\240\207/9-30-\347\254\224\350\256\260-\346\270\270\346\240\207.md" "b/24\345\274\240\346\267\221\350\212\263/9-30-\346\270\270\346\240\207/9-30-\347\254\224\350\256\260-\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..5c3e90f158c954efa8ddfa2373b48d0f9398f80b --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/9-30-\346\270\270\346\240\207/9-30-\347\254\224\350\256\260-\346\270\270\346\240\207.md" @@ -0,0 +1,408 @@ +# SQL SERVER + +## -- 9.15 + +#### 鍒涘缓鏁版嵁搴 + +```sql +//1 +create database 鏁版嵁搴撳悕; +//2 +if exists (select * from sys.databases where name = '鏁版嵁搴撳悕') +drop database 鏁版嵁搴撳悕; +``` + +#### 鍒涘缓鏁版嵁琛 + +```sql +create table 琛ㄥ悕( + +); +``` + +#### 鍒犻櫎琛 + +```sql +drop table 琛ㄥ悕; +``` + +#### 淇敼琛ㄧ粨鏋 + +```sql +淇敼琛ㄧ粨鏋 琛ㄥ悕 add constraint 绾︽潫鍚 foreign key(瑕佸紩鐢ㄧ殑瀛楁) references 涓婚敭琛(瀛楁) +``` + + + +闈炵┖ not null + +涓婚敭(鏍囪瘑鍒) primary key + +鑷 identity(浠庡嚑寮濮,涓娆″灏) + +妫鏌ョ害鏉 check() + +澶栭敭 references + + + +## --9.16 + +涓嶉噸澶 distinct + +鎺掑簭 order by (desc 闄嶅簭 asc 鍗囧簭) + +**count()** + +count(*):绌哄间篃缁熻 + +count(瀛楁)锛氬綋鍓嶅瓧娈电殑绌哄间笉缁熻 + +**淇濈暀灏忔暟鐐瑰悗鍑犱綅** + +```sql +round(灏忔暟,淇濈暀浣嶆暟); +decimal(5,2); +``` + +**寮哄埗杞崲** + +```sql +CONVERT(VARCHAR(19),GETDATE()); +CAST('9.0' AS decimal); +``` + +**鍒犻櫎** +drop 鍒犻櫎鏁村紶琛 +truncate鍒犻櫎鏁村紶琛紝琛ㄨ繕鍦 + +## --9.16 + +![image-20220920232835355](C:\Users\Agares\AppData\Roaming\Typora\typora-user-images\image-20220920232835355.png) + +### exists + +鍏抽敭瀛桬XISTS鏋勯犲瓙鏌ヨ鏃讹紝褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓嶄负绌烘椂锛屽垯EXISTS杩斿洖鐨勭粨鏋滀负TRUE锛屽灞傛煡璇㈣鍙ヨ繘琛屾煡璇紱褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓虹┖鏃讹紝鍒橢XISTS杩斿洖鐨勭粨鏋滀负FALSE锛屽灞傛煡璇㈣鍙ヤ笉杩涜鏌ヨ銆 + +```sql +--锛1锛夋煡璇㈠鐢熻〃(tb-student)涓紝鏄惁鏈夊鐢熻鑰呯殑濮撳悕鏄"榛勫紭" +if exists(select stu_num from tb_record where stu_num in (select stu_num from tb_student where name='榛勫紭') and return_time is null) + print '鏈' +else + print '娌℃湁' + +--锛2锛夋煡璇功鐩〃(tb-bibliography)涓紝搴撳瓨鏁颁负0鐨勪功鐩悕绉(name) +``` + + + +鎺掑悕 rank() over() + +### 鎺掑簭鍑芥暟 + +**鎺掑簭鍑芥暟 OVER( [鍒嗙粍瀛愬彞] 鎺掑簭瀛愬彞[DESC][ASC] )** + +**鎺掑簭瀛愬彞 锛歄RDER BY 鎺掑簭鍒,鎺掑簭鍒椻** + +缁冧範:浣跨敤鍚勪釜鎺掑悕鍑芥暟瀵瑰鍛樼殑Java 鎴愮哗杩涜鎺掑悕锛屽苟浠旂粏浣撲細鍏朵腑鎺掑簭鍑芥暟鐨勫叿浣撶敤娉曚笌鍏朵腑鐨勫尯鍒 + +```sql + +``` + +- ROW_NUMBER()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑杩炵画鐨勫簭鍙** +- RANK()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪骞朵笖璺崇┖** +- DENSE_RANK() 鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪涓嶈烦绌** + + + + + +### 9-21 + +--鏌ヨ鐢风敓鍜屽コ鐢熶腑骞撮緞鏈澶х殑瀛︾敓淇℃伅锛岃姹傛樉绀猴細濮撳悕锛屾у埆锛屽勾榫 +--闈炲叧鑱斿瓙鏌ヨ + +```sql +select birth,name 濮撳悕,gender 鎬у埆 from tb_student +where birth in (select min(birth) from tb_student group by gender) +``` + +--鍏宠仈瀛愭煡璇細鍐呴儴鏌ヨ闇瑕佸紩鐢ㄥ閮ㄨ〃宸叉煡璇㈠嚭鐨勪俊鎭 + +```sql +select birth,name 濮撳悕,gender 鎬у埆 from tb_student t1 +where birth = (select min(birth) from tb_student t2 where t2.gender=t1.gender) +``` + +--绐楀彛鍑芥暟锛氭帓搴 + +```sql +select birth,濮撳悕,鎬у埆 from ( +select birth,name 濮撳悕,gender 鎬у埆,row_number() over (partition by gender order by birth ) as birth_rank from tb_student +) as T1 +where T1.birth_rank = 1 +``` + + + +### 9-22 + +#### 灞閮ㄥ彉閲 + +灞閮ㄥ彉閲忓繀椤讳互鏍囪@浣滀负鍓嶇紑 锛屽@age +灞閮ㄥ彉閲忕殑浣跨敤鏄厛澹版槑锛屽啀璧嬪 +灞閮ㄥ彉閲忓彧鍦ㄥ畾涔夊畠鐨勫眬閮ㄨ寖鍥村唴鏈夋晥 + +澹版槑涓涓眬閮ㄥ彉閲忥細**declare @鍙橀噺鍚 鏁版嵁绫诲瀷** + +```sql +--渚嬶細 + declare @id int --澹版槑涓涓悕涓篿d鐨勬暣鍨嬪彉閲 + declare @name varchar(50) --澹版槑涓涓彲鍙橀暱搴︿负50鐨勫瓨鏀惧鍚嶇殑瀛楃涓插彉閲 + +``` + +璧嬪硷細 + +- set @鍙橀噺鍚 = 鍊 + +- select @鍙橀噺鍚 = 鍊 + +```sql +--渚: + select @id = 1001 + set @name = '鍛ㄩ' +``` + +set涓巗elect璧嬪肩殑鍖哄埆锛 + +set璧嬪肩粰鍙橀噺鎸囧畾鐨勫硷紝select涓鑸敤浜庤〃涓煡璇㈠嚭鐨勬暟鎹祴鍊肩粰鍙橀噺锛屽鏋滄煡璇㈢粨鏋滄湁澶氭潯锛屽彇鏈鍚庝竴鏉¤祴鍊肩粰鍙橀噺 + +### 杈撳嚭璇彞 + +1. print鍙橀噺鎴栬〃杈惧紡 +2. select鍙橀噺鎴栬〃杈惧紡 + +```sql +--渚: + print '鏁版嵁搴撴湇鍔″櫒鍚:' + @@servicename + select 15*8 +``` + +### 閫昏緫鎺у埗璇彞 + +```sql +-- if() else +if() +begin + ... +end +else + ... +end + +-- switch case +case +when 鏉′欢 then 缁撴灉 +else 鍏朵粬缁撴灉 +end +``` + +### 寰幆鎺у埗璇彞 + +```sql +while() +begin + ... +end +``` + + + +## --9.26 + +### 瑙嗗浘 + +瑙嗗浘鏄竴寮犺櫄鎷熻〃锛屽畠琛ㄧず涓寮犺〃鐨勯儴鍒嗘暟鎹垨澶氬紶琛ㄧ殑缁煎悎鏁版嵁锛屽叾缁撴瀯鍜屾暟鎹槸寤虹珛鍦ㄥ琛ㄧ殑鏌ヨ鍩虹涓 +瑙嗗浘涓苟涓嶅瓨鏀炬暟鎹紝鑰屾槸瀛樻斁鍦ㄨ鍥炬墍寮曠敤鐨勫師濮嬭〃锛堝熀琛級涓紝鍗冲熀鏈腑鐨勬暟鎹彂鐢熷彉鍖栵紝浠庤鍥句腑鏌ヨ鐨勬暟鎹篃闅忎箣鏀瑰彉銆 +鍚屼竴寮犲師濮嬭〃锛屾牴鎹笉鍚岀敤鎴风殑涓嶅悓闇姹傦紝鍙互鍒涘缓涓嶅悓鐨勮鍥 + +```sql +--寤虹珛瑙嗗浘 +create view <瑙嗗浘鍚> [(<鍒楀悕>[,<鍒楀悕>]...)] + as <瀛愭煡璇> [with check option] +``` + +### pivot(琛岃浆鍒) + +```sql +pivot( +鏁版嵁 for 瑕佽浆鎴愬垪鐨勭帺鎰 in (鍒楀悕1,鍒楀悕2,...) +) as 鍚嶅瓧 +``` + +### union(鍒楄浆琛) + +```sql +--union锛屾嫾鎺ュ琛 +select * from 琛1 +union +select * from 琛2 + +--unpivot锛屼粈涔堢帺鎰 +unpivot( +score for subject in(english,maths,music) +)as v +``` + + + +## --9.28 + +### 浜嬪姟 + +**浜嬪姟锛 Transaction锛夌敱涓娆℃垨鑰呭娆″熀鏈搷浣滄瀯鎴愶紝鎴栬呰锛屼簨鍔$敱涓鏉℃垨鑰呭鏉 SQL 璇彞鏋勬垚銆** + +**浜嬪姟涓殑鎵鏈 SQL 璇彞鏄竴涓暣浣擄紝鍏卞悓杩涢锛屼笉鍙垎鍓诧紝瑕佷箞鍏ㄩ儴鎵ц鎴愬姛锛岃涔堝叏閮ㄦ墽琛屽け璐ャ** + + + +#### 浜嬪姟鐨勫睘鎬(ACID) + +##### 1) 鍘熷瓙鎬 **A**tomicity + +涓涓簨鍔′腑鐨勬墍鏈 SQL 璇彞锛岃涔堝叏閮ㄦ墽琛屾垚鍔燂紝瑕佷箞鍏ㄩ儴鎵ц澶辫触锛屼笉浼氱粨鏉熷湪涓棿鐨勬煇涓幆鑺傘備簨鍔″湪鎵ц杩囩▼涓彂鐢熼敊璇紝浼氳鍥炴粴锛圧ollback锛夊埌浜嬪姟寮濮嬪墠鐨勭姸鎬 + +##### 2) 涓鑷存 **C**onsistency + +鍦ㄤ簨鍔″紑濮嬩箣鍓嶅拰浜嬪姟缁撴潫浠ュ悗锛屾暟鎹簱鐨勫畬鏁存ф病鏈夎鐮村潖銆傝繖琛ㄧず鍐欏叆鐨勬暟鎹繀椤诲畬鍏ㄧ鍚堟墍鏈夌殑棰勮瑙勫垯锛屽叾涓寘鍚暟鎹殑绮剧‘搴︺佷覆鑱旀т互鍙婂悗缁暟鎹簱鍙互鑷彂鎬у湴瀹屾垚棰勫畾鐨勫伐浣溿 + +##### 3) 闅旂鎬 **I**solation + +鏁版嵁搴撳厑璁稿涓苟鍙戜簨鍔″悓鏃跺鍏舵暟鎹繘琛岃鍐欏拰淇敼鐨勮兘鍔涳紝闅旂鎬у彲浠ラ槻姝㈠涓簨鍔″苟鍙戞墽琛屾椂鐢变簬浜ゅ弶鎵ц鑰屽鑷存暟鎹殑涓嶄竴鑷淬 + +##### 4) 鎸佷箙鎬 **D**urability + +浜嬪姟澶勭悊缁撴潫鍚庯紝瀵规暟鎹殑淇敼灏辨槸姘镐箙鐨勶紝鍗充究绯荤粺鏁呴殰涔熶笉浼氫涪澶便 + +### + +```sql +--寮濮嬩簨鍔 +begin tran +--閿欒浠g爜 +declare @err int = 0 + +--浜嬪姟鎻愪氦锛氬鏋滆鍙ラ兘鎵ц鎴愬姛锛 commit tran/transaction +if (@myerr = 0) + begin + commit transaction A + end +--浜嬪姟鍥炴粴锛氬鏋滀簨鍔′腑鏈変竴鏉¤鍙ユ墽琛屽け璐ワ紝 rollback tran/transaction +else + begin + rollback transaction B + end + + --select * from Products +--print @@error --閿欒鐮:0:鎵ц鎴愬姛 闈0鐨勬椂鍊欎唬琛ㄨ璇彞鏈夐敊璇 + +--鏍囪浜嬪姟鍥炴粴璧风偣 锛 save tran B + +--鏂规硶2: +----begin try +---- --浜嬪姟鐨勫紑濮嬶細begin tran +---- --sql璇彞 +---- commit --鎻愪氦 +----end try + +----begin catch --鎹曡幏閿欒,濡傛灉鏌愭潯璇彞鎵ц閿欒锛屽皢琚崟鑾 +---- rollback tran +----end +``` + + + +## --9.30 + +### 娓告爣 Cursor + +娓告爣鍙互浣跨敤鎴烽愯璁块棶鐢盨QL Server杩斿洖鐨勭粨鏋滈泦锛岃兘鎶婇泦鍚堟搷浣滆浆鎹㈡垚**鍗曚釜璁板綍澶勭悊鏂瑰紡**锛屾寜鐓х敤鎴疯嚜宸辩殑鎰忔効鏉ユ樉绀哄拰澶勭悊杩欎簺璁板綍銆 + +#### 娓告爣鍒嗙被: + +锛1锛夐潤鎬佹父鏍(Static)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝鏁版嵁鍙戠敓鍙樺寲锛屾父鏍囦腑鏁版嵁涓嶅彉 +锛2锛夊姩鎬佹父鏍(Dynamic)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝鏁版嵁鍙戠敓鍙樺寲锛屾父鏍囦腑鏁版嵁鏀瑰彉锛岄粯璁ゅ笺 +锛3锛夐敭闆嗛┍鍔ㄦ父鏍(KeySet)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝琚爣璇嗙殑鍒楀彂鐢熸敼鍙橈紝娓告爣涓暟鎹敼鍙橈紝鍏朵粬鍒楁敼鍙橈紝娓告爣涓暟鎹笉鍙樸 + +#### 娓告爣鐨勪娇鐢 + +```sql + +--鍒涘缓娓告爣(Scroll浠h〃婊氬姩娓告爣锛屼笉鍔燬croll鍒欐槸鍙繘鐨勶紝鍙兘鏀寔fetch next) +declare <娓告爣鍚> cursor scroll for select stuname from stuinfo + +--鎵撳紑娓告爣锛 +open <娓告爣鍚> + +--鍏抽棴娓告爣 +close <娓告爣鍚> + +--鍒犻櫎娓告爣 +deallocate <娓告爣鍚> + +--鎻愬彇鏁版嵁鎿嶄綔 +fetch first from <娓告爣鍚> --缁撴灉闆嗙殑绗竴琛 +fetch last from <娓告爣鍚> --鏈鍚庝竴琛 +fetch absolute 1 from <娓告爣鍚> --浠庢父鏍囩殑绗竴琛屽紑濮嬫暟锛岀n琛屻 +fetch relative 3 from <娓告爣鍚> --浠庡綋鍓嶄綅缃暟锛岀n琛屻 +fetch next from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笅涓琛 +fetch prior from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笂涓琛 +``` + + + +**鎻愬彇鏁版嵁缁欏彉閲忎互渚涘畠鐢紙鍙栧嚭绗3琛屽鐢熷鍚嶏紝鏌ヨ璇ュ鐢熻缁嗕俊鎭級锛** + +```sql +declare @vari varchar(20) +fetch absolute 3 from <娓告爣鍚> into @vari +select * from StuInfo where stuName = @vari +``` + +**鍒╃敤娓告爣鎻愬彇鎵鏈夌殑瀛︾敓淇℃伅锛** + +```sql +--鏂规涓锛 +fetch absolute 1 from <娓告爣鍚> +while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,鎻愬彇鎴愬姛锛-1鎻愬彇澶辫触锛-2琛屼笉瀛樺湪 + begin + fetch next from <娓告爣鍚> + end + +--鏂规浜岋細 +declare @myvar varchar(20) +fetch first from <娓告爣鍚> into @myvar +while @@FETCH_STATUS = 0 + begin + print '鎻愬彇鎴愬姛'+@myvar + fetch next from <娓告爣鍚> into @myvar + end +``` + +**鍒╃敤娓告爣淇敼鍜屽垹闄ゆ暟鎹細** + +```sql +--鏇存柊璇硶: +-- fetch absolute 3 from <娓告爣鍚> +-- update 璇彞 where Current of <娓告爣鍚> + +``` + + + + + + +