我們使用一下兩張表作為范例:
select * from [dbo].[employee]
select * from [dbo].[dept]
1、select語(yǔ)句
select distinct dept_no from [dbo].[employee]
select top(3) * from [dbo].[employee]
select e_no as '員工編號(hào)', e_name as '員工姓名' from [dbo].[employee]
注:AS關(guān)鍵字也可以省略
select '員工編號(hào)'=e_no, '員工姓名'=e_name from [dbo].[employee]
2、在查詢的結(jié)果內(nèi)集中顯示某字符串
select '員工姓名:' ,e_name from [dbo].[employee]
3、查詢的列為表達(dá)式
select e_no+10 as '新員工編號(hào)' ,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關(guān)鍵詞時(shí),將所有檢索條件用逗號(hào)分隔開(kāi)。與括號(hào)內(nèi)的值相匹配便可以被查出。
LIKE關(guān)鍵字使用的通配符:
%:包含零個(gè)或多個(gè)字符的任意字符串。
_:任何單個(gè)字符。
[]:指定范圍[a-f]或者是集合[abcdef]中的任何單個(gè)字符。
[^]:不屬于該范圍的任何單個(gè)字符。
select * from [dbo].[employee] where e_name like 'a%'
在SELECT語(yǔ)句中使用IS NULL(IN NOT NULL)某字段內(nèi)容是否為空(不為空)
select * from [dbo].[employee] where e_name is null
5、EXISTS(NOT EXISTS)關(guān)鍵字
EXISTS關(guān)鍵字后面的參數(shù)是一個(gè)任意的子查詢,系統(tǒng)對(duì)子查詢進(jìn)行運(yùn)算以判斷它是否返回行,如果至少返回一行,那么EXISTS的結(jié)果為TURE,此時(shí)外層查詢語(yǔ)句將進(jìn)行查詢;如果子查詢沒(méi)有返回行,那么EXISTS反悔的結(jié)果為FALSE,此時(shí)外層語(yǔ)句將不進(jìn)行查詢。EXISTS語(yǔ)句可以與where或if一起使用。
select top(2) * from [dbo].[employee] where exists (select top (1) * from [dbo].[employee])
注:EXISTS的結(jié)果只取決于是否會(huì)返回行,而不取決于這些行的內(nèi)容具體是什么。
6、ORDER BY
對(duì)指定的列數(shù)據(jù)進(jìn)行排序。
升序(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 子句通常和聚合函數(shù)一起使用,例如:MAX,MIN,COUNT,SUM,AVG。
select dept_no ,count(*) as '部門人數(shù)' from [dbo].[employee] group by dept_no
注意:選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在 GROUP BY 列表中,或者 GROUP BY 表達(dá)式必須與選擇列表表達(dá)式完全匹配。
多字段分組:GROUP BY 子句后面根據(jù)需要分組的字段,分組層次從左到右,先按照第一個(gè)字段分組,然后在第一個(gè)字段值相同的記錄中,再根據(jù)第二個(gè)字段的值進(jìn)行分組,以此類推。
GROUP BY 和HAVING一起限定顯示記錄所需滿足的條件,只有滿足條件的分組才會(huì)被顯示。
select dept_no ,count(*) as '部門人數(shù)' from [dbo].[employee] group by dept_no having count(*)>2
注:HAVING與WHERE都可以用來(lái)過(guò)濾數(shù)據(jù),兩者的區(qū)別是:HAVING用在數(shù)據(jù)分組之后進(jìn)行過(guò)濾,即用來(lái)選擇分組;WHERE在分組之前用來(lái)選擇記錄,它排除的記錄不包括在分組中。
8、UNION合并查詢結(jié)果集
利用UNION關(guān)鍵字,可以給出多條SELECT語(yǔ)句,并將他們的結(jié)果組合成單個(gè)結(jié)果集。若UNION不使用關(guān)鍵字ALL,執(zhí)行的時(shí)候會(huì)自動(dòng)刪除重復(fù)的記錄,所有返回值的行都是唯一的;使用關(guān)鍵字ALL的作用是不刪除重復(fù)行也不對(duì)結(jié)果進(jìn)行自動(dòng)排序。注意合并是兩個(gè)表對(duì)應(yīng)的列數(shù)和數(shù)據(jù)類型必須是相同的。
select%20*%20from%20[dbo].[employee]%20where%20dept_no=20
union
select%20*%20from%20[dbo].[employee]%20where%20dept_no=30
9、多表連接查詢
會(huì)有另外博文單獨(dú)講解
新聞熱點(diǎn)
疑難解答
圖片精選