幾個(gè)SQL查詢小技巧_當(dāng)前觀點(diǎn)
點(diǎn)擊關(guān)注公眾號(hào),SQL干貨及時(shí)獲取
后臺(tái)回復(fù):1024,獲取海量學(xué)習(xí)資源問(wèn)題:假設(shè)有張學(xué)生成績(jī)表(tb)如下:
【資料圖】
想變成(得到如下結(jié)果):
代碼:
WITH tb(姓名,課程,分?jǐn)?shù)) AS(SELECTN"張三",N"語(yǔ)文",74UNIONALLSELECTN"張三",N"數(shù)學(xué)",83UNIONALLSELECTN"張三",N"物理",93UNIONALLSELECTN"李四",N"語(yǔ)文",79UNIONALLSELECTN"李四",N"數(shù)學(xué)",86UNIONALLSELECTN"李四",N"物理",88)SELECT姓名 ,MAX(CASE課程 WHEN"語(yǔ)文"THEN分?jǐn)?shù) ELSE0END) 語(yǔ)文,MAX(CASE課程 WHEN"數(shù)學(xué)"THEN分?jǐn)?shù) ELSE0END) 數(shù)學(xué),MAX(CASE課程 WHEN"物理"THEN分?jǐn)?shù) ELSE0END) 物理FROMtb GROUPBY姓名
2、分頁(yè)
方案一:利用NOT IN和SELECT TOP分頁(yè)語(yǔ)句形式
SELECTTOP 10* FROMTestTableWHEREIDNOTIN(SELECTTOP 20IDFROMTestTable ORDERBYID)ORDERBYID
方案二:利用ID大于多少和SELECT TOP分頁(yè)語(yǔ)句形式
SELECTTOP 10* FROMTestTableWHEREID> (SELECTMAX(id) FROM(SELECTTOP 20idFROMTestTable ORDERBYid) AST)ORDERBYID
方案三:利用SQL Server中的特性ROW_NUMBER進(jìn)行分頁(yè)
SELECT* FROM(SELECTROW_NUMBER() OVER(ORDERBYIDDESC) ASROWID,*FROMTestTable) ASmytable whereROWIDbetween21and40
3、結(jié)果合并
合并重復(fù)行
SELECT* FROMAUNIONSELECT* FROMB
不合并重復(fù)行
SELECT* FROMAUNIONALLSELECT* FROMB
4、隨機(jī)排序
SELECT* FROMTestTable ORDERBYNEWID()
還可以結(jié)合TOP取隨機(jī)的前N條記錄
SELECTTOP 100* FROMTestTable ORDERBYNEWID()
5、以任意符號(hào)分隔取兩邊數(shù)據(jù)
例如我們以逗號(hào)(,)來(lái)分割數(shù)據(jù),將如下數(shù)據(jù)
分割成如下圖所示:
SELECTR,CASEWHENCHARINDEX(",",R)>1THENLEFT(R,CHARINDEX(",",R)-1) ELSENULLENDASR1 ,CASEWHENCHARINDEX(",",R)>1THENRIGHT(R,(LEN(R) - CHARINDEX(",",R))) ELSENULLENDASR2FROMt
代碼較長(zhǎng),我們對(duì)代碼進(jìn)行拆分來(lái)理解:
SELECTCHARINDEX(",",",") --結(jié)果是1SELECTCHARINDEX(",","NULL") --結(jié)果是0SELECTCHARINDEX(",","") --結(jié)果是0SELECTCHARINDEX(",","A,B") --結(jié)果是2SELECTLEN("A,B") --結(jié)果是3SELECTLEN("A,B") - CHARINDEX(",","A,B") --結(jié)果是3-2=1SELECTRIGHT("A,B",( LEN("A,B") - CHARINDEX(",","A,B"))) --結(jié)果是 B
最后一步我們將"A,B"拆分出來(lái)了B,同理A我們也可以用類似的方法獲取到。
6、WAITFOR延時(shí)執(zhí)行
例 等待1小時(shí)2分零3秒后才執(zhí)行SELECT語(yǔ)句
WAITFOR DELAY "01:02:03"SELECT* FROMEmployee
其中 DELAY是在延時(shí)多長(zhǎng)時(shí)間后才開(kāi)始執(zhí)行。
例等到晚上11點(diǎn)零8分后才執(zhí)行SELECT語(yǔ)句
WAITFOR TIME "23:08:00"SELECT* FROMEmployee
其中TIME是等到具體某個(gè)時(shí)刻才開(kāi)始執(zhí)行
我是岳哥,最后給大家分享我寫(xiě)的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》和《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語(yǔ)法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來(lái)實(shí)操。
有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行
數(shù)據(jù)前線——End——后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。
推薦閱讀SQL 中為什么經(jīng)常要加NOLOCK?SQL 語(yǔ)句中 where 條件后 寫(xiě)上1=1 是什么意思干掉visio,這個(gè)畫(huà)圖神器真的絕了!?。QL中的高級(jí)日期函數(shù)SQL常用腳本整理
關(guān)鍵詞: 開(kāi)始執(zhí)行 是什么意思 通俗易懂
相關(guān)閱讀
-
世界熱推薦:今晚7:00直播丨下一個(gè)突破...
今晚19:00,Cocos視頻號(hào)直播馬上點(diǎn)擊【預(yù)約】啦↓↓↓在運(yùn)營(yíng)了三年... -
NFT周刊|Magic Eden宣布支持Polygon網(wǎng)...
Block-986在NFT這樣的市場(chǎng),每周都會(huì)有相當(dāng)多項(xiàng)目起起伏伏。在過(guò)去... -
環(huán)球今亮點(diǎn)!頭條觀察 | DeFi的興衰與...
在比特幣得到機(jī)構(gòu)關(guān)注之后,許多財(cái)務(wù)專家預(yù)測(cè)世界將因?yàn)榧用茇泿诺?.. -
重新審視合作,體育Crypto的可靠關(guān)系才能雙贏
Block-987即使在體育Crypto領(lǐng)域,人們的目光仍然集中在FTX上。隨著... -
簡(jiǎn)訊:前端單元測(cè)試,更進(jìn)一步
前端測(cè)試@2022如果從2014年Jest的第一個(gè)版本發(fā)布開(kāi)始計(jì)算,前端開(kāi)發(fā)... -
焦點(diǎn)熱訊:劉強(qiáng)東這波操作秀
近日,劉強(qiáng)東發(fā)布京東全員信,信中提到:自2023年1月1日起,逐步為...