我們使用一下兩張表作為范例:
select * from [dbo].[employee]
select * from [dbo].[dept]
1、select語句
select distinct dept_no from [dbo].[employee]
select top(3) * from [dbo].[employee]
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子句條件查詢
select * from [dbo].[employee] where e_no between 1001 and 1006
select * from [dbo].[employee] where e_no in (1001 , 1007 )
使用IN關鍵詞時,將所有檢索條件用逗號分隔開。與括號內的值相匹配便可以被查出。
LIKE關鍵字使用的通配符:
%:包含零個或多個字符的任意字符串。
_:任何單個字符。
[]:指定范圍[a-f]或者是集合[abcdef]中的任何單個字符。
[^]:不屬于該范圍的任何單個字符。
select * from [dbo].[employee] where e_name like 'a%'
在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 子句后面根據需要分組的字段,分組層次從左到右,先按照第一個字段分組,然后在第一個字段值相同的記錄中,再根據第二個字段的值進行分組,以此類推。
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%20*%20from%20[dbo].[employee]%20where%20dept_no=20
union
select%20*%20from%20[dbo].[employee]%20where%20dept_no=30
9、多表連接查詢
會有另外博文單獨講解
新聞熱點
疑難解答