您好,登錄后才能下訂單哦!
這篇文章主要介紹了SQL server中常見的函數類型有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
既然是高級查詢,那么使用函數也將是必不可少的,常見的函數類型有以下幾種:
常見的高級查詢語法舉例:
顯示test表中所有運維工程師的姓名和基本工資,要求以下格式:
運維工程師XXX的基本工資是:XXXXX元。
語法格式如下:
select '運維工程師'+姓名+'的基本工資是:'+CAST(基本工資 as varchar(10))+'元'
from test where 職務='運維工程師'
顯示距離當前10天之后的日期和時間:
select DATEADD(DD ,10,GETDATE())
顯示test表中所有人的姓名和年齡:
select 姓名, DATEDIFF(YY,出生日期,GETDATE()) 年齡 from test
顯示test表中所有90后員工的姓名和出生年份:
select 姓名,DATENAME(YY,出生日期) 出生年份 from employee
where 出生日期 between '1990-01-01' and '1999-12-31'
聚合函數與分組查詢:
聚合函數能夠基于列進行計算,并返回單個值,分組查詢是指將查詢結果按條件分組,然后使用聚合函數返回每個組的匯總信息,分組查詢一般是用來滿足統計需求的。
常用的聚合函數有:SUM( )、AVG( )、MAX( )、M I N( )、COUNT( )。
SUM( ):用來返回表達式中所有數值的總和,它只能用于數字類型的列,不能匯總字符、日期等。
如:查詢test表中所有員工基本工資的總和
select SUM(基本工資) 總工資 from test
AVG( ):用來返回表達式中所有數值的平均值,它也只能用于數字類型的列。
查詢test表中所有員工的平均基本工資
select AVG(基本工資) 平均工資 from test
MAX( )、M I N( ):前者用來返回表達式中的最大值,后者用來返回表達式中的最小值。它們都可以用于數字型、字符型及日期/時間類型的列。
如:查詢test表中的最高工資和最低工資:
select MAX(基本工資) 最高工資,MIN(基本工資) 最低工資 from test
COUNT():返回表達式中非空值的技術,可以用于數字和字符類型的列,也可使用星號*
作為COUNT()函數的表達方式,使用星號*
可以不必指定特定的列而計算所有的行數。
查詢test表中全部行數:
select COUNT(*) from test
查詢test表中所有90后的人數:
select COUNT(出生日期) '90后人數' from test
where 出生日期>='1990-01-01' and 出生日期<='1999-12-31'
分組查詢:就是將表中的數據通過GROUP BY的子句分類組合,再根據需要得到要統計的信息。如果需要對分組進行篩選,只顯示滿足限定條件的組,需要時用HAAVING子句。
查詢test表中每個職務的平均工資:select 職務,AVG(基本工資) 職務平均工資 from test group by 職務
查詢test表中平均工資小于10000的職務:
select 職務,AVG(基本工資) 平均工資 from test group by 職務 having AVG(基本工資)<10000
當group by 子句中使用having 子句時,查詢結果只返回滿足having條件的組。在一個T-SQL語句中可以有where子句和having子句,having子句與where子句類似,均用于設置限定條件。二者作用的區別如下:
①:where子句的作用是在對分組查詢結果進行分組之前,根據where條件篩選數據,條件中不能包含聚合函數。
②:having子句的作用是在分組之后篩選滿足條件的組,條件中經常包含聚合函數,也可以使用多個分組標準進行分組。
查詢test表中平均工資小于10000的職務,前提是員工張三不計算在內:
select 職務,AVG(基本工資) 平均工資 from employee where 姓名!='張三' group by 職務 having AVG(基本工資)<10000
查詢test表中所有人的平均工資,用CEILING( )取整
select CEILING(AVG(基本工資)) 平均工資 from test
函數的綜合應用:
查詢未滿30歲的員工的生日和年齡,并且計算出距離30歲的天數,最后用字符串拼接顯示結果:
①:查詢正確的結果
select 姓名,出生日期,DATEDIFF(YY,出生日期,GETDATE()) 年齡, DATEDIFF(DD,GETDATE(),DATEADD(YY,30,出生日期)) 距離三十歲的天數 from test where DATEDIFF(YY,出生日期,GETDATE())<=30 order by 出生日期
②將結果用字符串拼接:
select '員工'+姓名+'的生日是:'+CONVERT(varchar(10),出生日期,111)+ ',現在年齡是'+CAST(DATEDIFF(YY,出生日期,GETDATE()) AS varchar(10)) +'歲'+',距離三十歲還有'+ CAST( DATEDIFF(DD,GETDATE(),DATEADD(YY,30,出生日期)) AS varchar(10))+'天' from employee where DATEDIFF(YY,出生日期,GETDATE())<=30 order by 出生日期
最終查詢顯示結果如下圖所示:
多表查詢的案例:
案例①
使用T-SQL實現多表查詢(內聯接、左外聯接、右外聯接、全聯接/完整外聯接):
原表如下:
表A
表B
使用內聯接在表A和表B中使用內聯接查詢學生姓名、學校和職業。(兩種查詢方式)
select a.name 姓名,a.school 學校,b.name,b.job from A,B where a.name=b.name
或:
select a.name 姓名,a.school 學校,b.name,b.job from A inner join B on a.name=B.name
查詢結果如下:
使用左外聯接查詢在表A和表B中使用內聯接查詢學生姓名、學校和職業。
select a.name 姓名,a.school 學校,b.name,b.job from A left join B on a.name=B.name
查詢結果如下:
使用右外聯接查詢在表A和表B中使用內聯接查詢學生姓名、學校和職業。
select a.name 姓名,a.school 學校,b.name,b.job from A right join B on a.name=B.name
查詢結果如下:
使用完整外聯接查詢在表A和表B中使用內聯接查詢學生姓名、學校和職業。
select a.name 姓名,a.school 學校,b.name,b.job from A full join B on a.name=B.name
查詢結果如下:
案例②
原表如下 :
查詢出廠日期晚于2011年4月的水果信息。
select * from products where 種類='水果' and 出廠日期>'2011-04-01'
查詢結果如下:
分組查詢所有水果、蔬菜、堅果的總成本。
select 種類,SUM(成本) from products group by 種類
查詢結果如下:
查詢所有水果的名稱和出廠日期,以特定格式拼接字符串,如:“西瓜的出廠日期是:2017/05/06”
select 種類+'的出廠日期是:' +CONVERT(varchar(10),出廠日期,111) from products
查詢結果如下:
查詢所有蔬菜的平均成本:
select 種類,AVG(成本) from products group by 種類 having 種類='蔬菜'
查詢結果如下:
案例②(多表查詢):
原表如下:
表products和表sales
在兩個表中查詢產品的名稱、種類、成本、銷售地點和銷售價格:
select products.名稱,products.種類, products.成本,sales.銷售地點,sales.銷售價格 from products inner join sales on products.名稱=sales.名稱
查詢結果如下:
在兩個表中查詢銷往海南的產品名稱、種類、成本和銷售價格:
select products.名稱,products.種類, products.成本,sales.銷售價格 from products inner join sales on products.名稱=sales.名稱 and sales.銷售地點='海南'
查詢結果如下:
在兩個表中查詢銷往北京的蔬菜名稱、種類、成本和銷售價格:
select products.名稱,products.種類, products.成本,sales.銷售價格 from products inner join sales on products.名稱=sales.名稱 and sales.銷售地點='北京' where 種類='蔬菜'
查詢結果如下:
感謝你能夠認真閱讀完這篇文章,希望小編分享的“SQL server中常見的函數類型有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。