<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          幾個SQL查詢小技巧

          共 2278字,需瀏覽 5分鐘

           ·

          2021-11-30 20:52

          點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時間送達(dá)干貨
          SQL專欄
          SQL基礎(chǔ)知識第二版
          SQL高級知識第二版
          行列轉(zhuǎn)換

          問題:假設(shè)有張學(xué)生成績表(tb)如下:

          想變成(得到如下結(jié)果):?

          代碼:


          WITH tb(姓名,課程,分?jǐn)?shù)) AS
          (
          SELECT?N'張三',N'語文',74
          UNION?ALL
          SELECT?N'張三',N'數(shù)學(xué)',83
          UNION?ALL
          SELECT?N'張三',N'物理',93
          UNION?ALL
          SELECT?N'李四',N'語文',79
          UNION?ALL
          SELECT?N'李四',N'數(shù)學(xué)',86
          UNION?ALL
          SELECT?N'李四',N'物理',88
          )

          SELECT?姓名 ,
          MAX(CASE?課程 WHEN?'語文'?THEN?分?jǐn)?shù) ELSE?0?END) 語文,
          MAX(CASE?課程 WHEN?'數(shù)學(xué)'?THEN?分?jǐn)?shù) ELSE?0?END) 數(shù)學(xué),
          MAX(CASE?課程 WHEN?'物理'?THEN?分?jǐn)?shù) ELSE?0?END) 物理
          FROM?tb GROUP?BY??姓名



          分頁

          方案一:利用NOT IN和SELECT TOP分頁語句形式


          SELECT?TOP 10?* FROM?TestTable
          WHERE?ID?NOT?IN
          (SELECT?TOP 20?ID?FROM?TestTable ORDER?BY?ID)
          ORDER?BY?ID


          ?方案二:利用ID大于多少和SELECT TOP分頁語句形式

          SELECT?TOP 10?* FROM?TestTable
          WHERE?ID?> (
          SELECT?MAX(id) FROM?
          (SELECT?TOP 20?id?FROM?
          TestTable ORDER?BY?id) AS?T)
          ORDER?BY?ID


          方案三:利用SQL Server中的特性ROW_NUMBER進(jìn)行分頁?

          SELECT?* FROM?(
          ??SELECT?ROW_NUMBER() OVER(ORDER?BY?ID?DESC) AS?ROWID,*
          ??FROM?TestTable
          ) AS?mytable where?ROWID?between?21?and?40



          結(jié)果合并

          合并重復(fù)行


           SELECT?* FROM?A
          UNION
          SELECT?* FROM?B


          不合并重復(fù)行

          SELECT?* FROM?A
          UNION?ALL
          SELECT?* FROM?B



          隨機(jī)排序

          SELECT?* FROM?TestTable ORDER?BY?NEWID()


          還可以結(jié)合TOP取隨機(jī)的前N條記錄

          SELECT?TOP 100?* FROM?TestTable ORDER?BY?NEWID()



          以任意符號分隔取兩邊數(shù)據(jù)

          例如我們以逗號(,)來分割數(shù)據(jù),將如下數(shù)據(jù)

          分割成如下圖所示:


          SELECT?R,
          CASE?WHEN??CHARINDEX(',',R)>1?THEN??LEFT(R,CHARINDEX(',',R)-1) ELSE?NULL?END?AS?R1 ,
          CASE?WHEN?CHARINDEX(',',R)>1?THEN?RIGHT(R,(LEN(R) - CHARINDEX(',',R))) ELSE?NULL?END?AS?R2
          FROM??t


          代碼較長,我們對代碼進(jìn)行拆分來理解:


          SELECT??CHARINDEX(',',',') --結(jié)果是1
          SELECT??CHARINDEX(',','NULL') --結(jié)果是0
          SELECT??CHARINDEX(',','') --結(jié)果是0
          SELECT??CHARINDEX(',','A,B') --結(jié)果是2
          SELECT??LEN('A,B') --結(jié)果是3
          SELECT??LEN('A,B') - CHARINDEX(',','A,B') --結(jié)果是3-2=1
          SELECT??RIGHT('A,B',( LEN('A,B') - CHARINDEX(',','A,B'))) --結(jié)果是 B


          最后一步我們將'A,B'拆分出來了B,同理A我們也可以用類似的方法獲取到。



          WAITFOR延時執(zhí)行

          例 等待1?小時2?分零3?秒后才執(zhí)行SELECT?語句


          WAITFOR DELAY '01:02:03'
          SELECT?* FROM?Employee


          其中 DELAY是在延時多長時間后才開始執(zhí)行。

          例?等到晚上11?點(diǎn)零8?分后才執(zhí)行SELECT?語句


          WAITFOR TIME '23:08:00'
          SELECT?* FROM?Employee


          其中TIME是等到具體某個時刻才開始執(zhí)行


          最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來實(shí)操。

          有需要的可以下載學(xué)習(xí),只需要在下面的公眾號「數(shù)據(jù)前線(非本號),后臺回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線

          后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
          后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。

          推薦閱讀

          瀏覽 52
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰黄色在线 | 黄片视频免费在线观看 | 亚洲AV成人无码一区二区三区在线观看 | 18操逼毛片 | 极品外围女在线 |