T-SQL 查詢語句總結


我們使用一下兩張表作為范例:

select * from [dbo].[employee]

select * from [dbo].[dept]

 

1、select語句

  • DISTINCT:去掉記錄中的重復值。

select distinct dept_no from [dbo].[employee]

 

  • TOP:返回第一行或者是前幾行

select top(3) * from [dbo].[employee]

 

  • AS:修改列標題

select e_no as '員工編號', e_name as '員工姓名' from [dbo].[employee]

 

注:AS關鍵字也可以省略

  • 使用等號‘=’修改列標題

select '員工編號'=e_no,  '員工姓名'=e_name from [dbo].[employee]

 

2、在查詢的結果內集中顯示某字符串

select '員工姓名:' ,e_name from [dbo].[employee]

3、查詢的列為表達式

select e_no+10 as '新員工編號' ,e_name '員工姓名' from [dbo].[employee]

 

4、where子句條件查詢

  •   BETWEEN AND 表示范圍

select * from  [dbo].[employee]  where e_no between 1001 and 1006 

 

  • 使用IN關鍵字

select * from  [dbo].[employee]  where e_no in (1001 , 1007 )

 

使用IN關鍵詞時,將所有檢索條件用逗號分隔開。與括號內的值相匹配便可以被查出。

  • 使用LIKE關鍵字

LIKE關鍵字使用的通配符:

%:包含零個或多個字符的任意字符串。

 _:任何單個字符。

[]:指定范圍[a-f]或者是集合[abcdef]中的任何單個字符。

[^]:不屬於該范圍的任何單個字符。

 

select * from [dbo].[employee] where e_name like 'a%'

 

  • IS NULL  (IS NOT NULL)

在SELECT語句中使用IS NULL(IN NOT NULL)某字段內容是否為空(不為空)

select * from [dbo].[employee] where e_name is null

5、EXISTS(NOT EXISTS)關鍵字

EXISTS關鍵字后面的參數是一個任意的子查詢,系統對子查詢進行運算以判斷它是否返回行,如果至少返回一行,那么EXISTS的結果為TURE,此時外層查詢語句將進行查詢;如果子查詢沒有返回行,那么EXISTS反悔的結果為FALSE,此時外層語句將不進行查詢。EXISTS語句可以與where或if一起使用。

select top(2) * from [dbo].[employee] where exists (select top (1) * from [dbo].[employee])

注:EXISTS的結果只取決於是否會返回行,而不取決於這些行的內容具體是什么。

6、ORDER BY

對指定的列數據進行排序。

升序(ASC)

降序(DESC)

select * from [dbo].[employee] order by e_no desc

 

多列排序:先按照第一列排序,若第一列中有相同的值,則在這些值中再按照第二列排序。

select * from [dbo].[employee] order by dept_no desc ,e_no

 

7、GROUP BY 分組

GROUP BY 子句通常和聚合函數一起使用,例如:MAX,MIN,COUNT,SUM,AVG。

select dept_no ,count(*) as '部門人數' from [dbo].[employee] group by dept_no

 注意:選擇列表中任一非聚合表達式內的所有列都應包含在 GROUP BY 列表中,或者 GROUP BY 表達式必須與選擇列表表達式完全匹配。

多字段分組:GROUP BY 子句后面根據需要分組的字段,分組層次從左到右,先按照第一個字段分組,然后在第一個字段值相同的記錄中,再根據第二個字段的值進行分組,以此類推。

  • 使用HAVING對分組結果過濾

GROUP BY 和HAVING一起限定顯示記錄所需滿足的條件,只有滿足條件的分組才會被顯示。

select dept_no ,count(*) as '部門人數' from [dbo].[employee] group by dept_no having count(*)>2

注:HAVING與WHERE都可以用來過濾數據,兩者的區別是:HAVING用在數據分組之后進行過濾,即用來選擇分組;WHERE在分組之前用來選擇記錄,它排除的記錄不包括在分組中。

8、UNION合並查詢結果集

利用UNION關鍵字,可以給出多條SELECT語句,並將他們的結果組合成單個結果集。若UNION不使用關鍵字ALL,執行的時候會自動刪除重復的記錄,所有返回值的行都是唯一的;使用關鍵字ALL的作用是不刪除重復行也不對結果進行自動排序。注意合並是兩個表對應的列數和數據類型必須是相同的。

select * from [dbo].[employee] where dept_no=20

union

select * from [dbo].[employee] where dept_no=30

 

9、多表連接查詢

會有另外博文單獨講解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM