欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
T-SQL查詢(xún)進(jìn)階--基于列的邏輯表達式

引言

T-SQL不僅僅是一個(gè)用于查詢(xún)數據庫的語(yǔ)言,還是一個(gè)可以對數據進(jìn)行操作的語(yǔ)言?;诹械腃ASE表達式就是其中一種,不像其他查詢(xún)語(yǔ)句可以互相替代(比如用子查詢(xún)實(shí)現的查詢(xún)也可以使用Join實(shí)現),CASE表達式在控制基于列的邏輯大部分是無(wú)法替代的。下面文中會(huì )詳細講解CASE表達式。

簡(jiǎn)介

基于列的邏輯表達式,其實(shí)就是CASE表達式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后。由于這里講的是T-SQL查詢(xún),所以只說(shuō)到CASE表達式在SELECT子句和ORDER BY子句中的使用。

CASE表達式實(shí)現的功能類(lèi)似于編程語(yǔ)言中的IF…THEN…ELSE邏輯。只是CASE表達式在T-SQL中并不能控制T-SQL程序的流程,只是作為基于列的邏輯使用.

一個(gè)簡(jiǎn)單的CASE表達式如下:

我已經(jīng)知道員工ID對應的姓名,我想獲得員工ID,并將員工ID以姓名的方式展現出來(lái),我不知道的員工ID則顯示UNKNOW:

SELECT TOP 4 CASE EmployeeID	WHEN 1 CareySon'	WHEN 2 Jack'	WHEN 3 Tom'	UNKNOW'	END AS NameList,EmployeeID  FROM [AdventureWorks].[HumanResources].[Employee]  ORDER BY EmployeeID

顯示結果如下:

上面代碼中,CASE后面跟選擇的列名,后面的WHEN所取得值都為EmployeeID這一列,THEN后面的值為對應前面WHEN后面列中,實(shí)際在結果中顯示的值。

CASE表達式實(shí)際情況可以分為兩種:

CASE簡(jiǎn)單表達式(CASE Simple Expression):將某個(gè)表達式與一組簡(jiǎn)單表達式進(jìn)行比較以確定結果。

CASE 搜索表達式(CASE Searched Expression):計算一組布爾表達式以確定結果。

下面會(huì )按照這兩種CASE表達式來(lái)闡述

CASE簡(jiǎn)單表達式(CASE Simple Expression)

在CASE簡(jiǎn)單表達式中,整個(gè)表達式只會(huì )取一列的值做相應的判斷,上面那個(gè)查詢(xún)例子就是一個(gè)CASE簡(jiǎn)單表達式,可以用下圖表示:

CASE表達式也可以用這樣的寫(xiě)法:

SELECT TOP 4 NameList=CASE EmployeeID	WHEN 1 CareySon'	WHEN 2 Jack'	WHEN 3 Tom'	UNKNOW'	END,EmployeeID  FROM [AdventureWorks].[HumanResources].[Employee]  ORDER BY EmployeeID

上面代碼和前面代碼所達到的效果是一模一樣的,從這個(gè)代碼可以看出,CASE表達式的結果實(shí)際上只局限在一列當中,這也是為什么CASE表達式是“基于列的邏輯表達式”

因為CASE表達式的值只局限在一列當中,所以THEN后面的值數據類(lèi)型必須相同,或者兼容,否則就會(huì )報錯。

在上面語(yǔ)句中,還有一個(gè)可選的“ELSE”語(yǔ)句,這個(gè)語(yǔ)句可以省略,但最好的做法是保留ELSE,否則不在匹配值范圍內的所有值都會(huì )為“NULL”。

CASE搜索表達式(CASE Searched Expression)

與CASE簡(jiǎn)單表達式不同,CASE搜索表達式提供了更強大的功能,CASE搜索表達式不僅可以使用更復雜的邏輯表達式,并且還能根據多列中的數據確定所顯示列的值。與上面CASE簡(jiǎn)單表達式等效的CASE搜索表達式為:

SELECT TOP 4 NameList=CASE 	WHEN EmployeeID=1 CareySon'	WHEN EmployeeID=1 Jack'	WHEN EmployeeID=3 Tom'	UNKNOW'	END,EmployeeID  FROM [AdventureWorks].[HumanResources].[Employee]  ORDER BY EmployeeID

CASE搜索表達式更復雜的應用比如:

公司規定每個(gè)人病假或者休假每年都不應該超過(guò)30個(gè)小時(shí),現在我想取得所有男性員工的ID,其中員工病假或者是休假任意一項超過(guò)了30個(gè)小時(shí),標記為“Exceed the time”,兩項都不超過(guò)30個(gè)小時(shí)的,標記為“Not Exceed the time”

SELECT EmployeeID,      CASE       WHEN VacationHours>30 AND Gender='M' Exceed The Time'      WHEN SickLeaveHours>30 AND Gender='M' Exceed The Time'      Not Exceed The Time'      END AS Condition  FROM [AdventureWorks].[HumanResources].[Employee]

查詢(xún)結果如下:

上面可以看到,搜索表達式一列的WHEN表達式可以取自不同列,甚至是不同列之間的運算(比如上面可以取WHEN VacationHours+SickLeaveHours>60),這大大增強了CASE表達式的功能,因為CASE搜索表達式可以完全實(shí)現CASE簡(jiǎn)單表達式所能實(shí)現的功能,我個(gè)人認為所有的CASE表達式都應該寫(xiě)成CASE搜索表達式的形式。

還有要注意WHEN…THEN是以先后順序出現,當第一個(gè)WHEN后面的表達式為FALSE時(shí),則會(huì )去看第二個(gè)WHEN后的表達式,依次類(lèi)推。當第一個(gè)WHEN后的表達式為T(mén)RUE時(shí),則取第一個(gè)THEN后面的值,即使第二個(gè)WHEN表達式也為T(mén)RUE。

例如還是第一個(gè)例子:我已經(jīng)知道員工ID對應的姓名,我想獲得員工ID,并將員工ID以姓名的方式展現出來(lái),我不知道的員工ID則顯示UNKNOW:

SELECT  NameList=CASE 
	WHEN EmployeeID=1 CareySon'	WHEN EmployeeID=1 Jack'	WHEN EmployeeID=3 Tom'	UNKNOW'	END,EmployeeID  FROM [AdventureWorks].[HumanResources].[Employee]  ORDER BY EmployeeID

結果如下:

CASE表達式在ORDER BY中的使用

CASE表達式在ORDER BY中可以將排序結果分類(lèi),使符合某些條件的行(Row)采用一種排序方式,符合另一種條件的行采用另一種排序方式:

比如:我想查看省份ID為8和9的員工的地址,當省份ID為9時(shí),按照AddressID降序排列,當省份ID為8時(shí),按照AddressID升序排列

SELECT [AddressID]      ,[AddressLine1]      ,[City]      ,[StateProvinceID]      FROM [AdventureWorks].[Person].[Address]WHERE StateProvinceID=9 OR StateProvinceID=8ORDER BY           CASE WHEN StateProvinceID=9 THEN AddressID END DESC,         CASE WHEN StateProvinceID=8 THEN AddressID END

結果如下:

注意這里,每一條排序規則都要寫(xiě)一個(gè)單獨的CASE表達式,前面文章說(shuō)了,因為CASE表達式是基于列的,一個(gè)CASE表達式只能返回一個(gè)值,所以基于多少個(gè)值排序,則需要多少個(gè)CASE表達式

總結

文章講述了CASE表達式在SELECT子句中和ORDER BY子句中的使用,CASE表達式又進(jìn)一步分為CASE簡(jiǎn)單表達式和CASE搜索表達式。掌握使用CASE表達式可以使程序員將一部分需要在程序中的業(yè)務(wù)邏輯移到數據庫中。掌握CASE表達式是深入學(xué)習T-SQL查詢(xún)必不可少的。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
case when then else end 用法--很好
SQL中的case when then else end用法
CASE表達式
第4章選擇結構程序設計
MySQL的表分區
NULL值
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久