自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

6個SQL查詢小技巧

數(shù)據(jù)庫 SQL Server
今天我們一起來看一下6個SQL查詢小技巧都有哪些吧!

 1、行列轉(zhuǎn)換

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

 

 

 

 

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

 

 

 

 

代碼:

 

  1. WITH tb(姓名,課程,分?jǐn)?shù)) AS 
  2. SELECT N'張三',N'語文',74 
  3. UNION ALL 
  4. SELECT N'張三',N'數(shù)學(xué)',83 
  5. UNION ALL 
  6. SELECT N'張三',N'物理',93 
  7. UNION ALL 
  8. SELECT N'李四',N'語文',79 
  9. UNION ALL 
  10. SELECT N'李四',N'數(shù)學(xué)',86 
  11. UNION ALL 
  12. SELECT N'李四',N'物理',88 
  13.  
  14. SELECT 姓名 , 
  15. MAX(CASE 課程 WHEN '語文' THEN 分?jǐn)?shù) ELSE 0 END) 語文, 
  16. MAX(CASE 課程 WHEN '數(shù)學(xué)' THEN 分?jǐn)?shù) ELSE 0 END) 數(shù)學(xué), 
  17. MAX(CASE 課程 WHEN '物理' THEN 分?jǐn)?shù) ELSE 0 END) 物理 
  18. FROM tb GROUP BY  姓名 

2、分頁

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

 

  1. SELECT TOP 10 * FROM TestTable 
  2. WHERE ID NOT IN 
  3. (SELECT TOP 20 ID FROM TestTable ORDER BY ID) 
  4. ORDER BY ID 

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

 

  1. SELECT TOP 10 * FROM TestTable 
  2. WHERE ID > ( 
  3. SELECT MAX(id) FROM  
  4. (SELECT TOP 20 id FROM  
  5. TestTable ORDER BY id) AS T) 
  6. ORDER BY ID 

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

 

  1. SELECT * FROM ( 
  2.   SELECT ROW_NUMBER() OVER(ORDER BY ID DESCAS ROWID,* 
  3.   FROM TestTable 
  4. AS mytable where ROWID between 21 and 40 

3、結(jié)果合并

合并重復(fù)行

 

  1. SELECT * FROM A 
  2. UNION 
  3. SELECT * FROM B 

不合并重復(fù)行

 

  1. SELECT * FROM A 
  2. UNION ALL 
  3. SELECT * FROM B 

4、隨機(jī)排序

 

  1. SELECT * FROM TestTable ORDER BY NEWID() 

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

 

  1. SELECT TOP 100 * FROM TestTable ORDER BY NEWID() 

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

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

 

 

 

 

分割成如下圖所示:

 

 

 

 

 

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

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

 

  1. SELECT  CHARINDEX(',',','--結(jié)果是1 
  2. SELECT  CHARINDEX(',','NULL'--結(jié)果是0 
  3. SELECT  CHARINDEX(',',''--結(jié)果是0 
  4. SELECT  CHARINDEX(',','A,B'--結(jié)果是2 
  5. SELECT  LEN('A,B'--結(jié)果是3 
  6. SELECT  LEN('A,B') - CHARINDEX(',','A,B'--結(jié)果是3-2=1 
  7. SELECT  RIGHT('A,B',( LEN('A,B') - CHARINDEX(',','A,B'))) --結(jié)果是 B 

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

6、WAITFOR延時執(zhí)行

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

 

  1. WAITFOR DELAY '01:02:03' 
  2. SELECT * FROM Employee 

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

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

 

  1. WAITFOR TIME '23:08:00' 
  2. SELECT * FROM Employee 

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

責(zé)任編輯:華軒 來源: SQL數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2023-09-25 13:15:50

SQL數(shù)據(jù)庫

2017-10-30 17:25:11

javascript

2015-08-10 09:50:21

ios圖片文本

2021-11-29 11:11:45

SQL查詢技巧

2022-11-16 09:04:36

SQL查詢SELECT

2020-12-24 09:18:51

SQL數(shù)據(jù)庫函數(shù)

2021-11-10 18:52:42

SQL技巧優(yōu)化

2020-06-03 09:08:21

JavaScript開發(fā)代碼

2021-05-29 09:52:15

UI設(shè)計技巧標(biāo)簽

2021-07-03 08:07:16

UIApp移動端

2021-07-23 11:00:18

UI界面設(shè)計效果

2024-10-28 08:34:06

2009-06-18 11:12:42

Hibernate S優(yōu)化

2011-03-11 16:25:53

Oracle數(shù)據(jù)庫

2022-09-06 08:07:24

SQL語句查詢

2016-10-21 16:05:44

SQLSQL SERVER技巧

2023-10-09 18:13:14

MySQL數(shù)據(jù)庫查詢

2010-09-27 15:10:12

SQL Server

2024-01-02 18:01:12

SQLSELECT查詢

2010-11-02 08:58:59

Cassandra
點贊
收藏

51CTO技術(shù)棧公眾號