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