程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> T-SQL查詢進階:基於列的邏輯表達式

T-SQL查詢進階:基於列的邏輯表達式

編輯:關於SqlServer

引言

T-SQL不僅僅是一個用於查詢數據庫的語言,還是一個可以對數據進行操作的語言。基於列的CASE表達式就是其中一種,不像其他查詢語句可以互相替代(比如用子查詢實現的查詢也可以使用Join實現),CASE表達式在控制基於列的邏輯大部分是無法替代的。下面文中會詳細講解CASE表達式。

簡介

基於列的邏輯表達式,其實就是CASE表達式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之後。由於這裡講的是T-SQL查詢,所以只說到CASE表達式在SELECT子句和ORDER BY子句中的使用。

CASE表達式實現的功能類似於編程語言中的IF…THEN…ELSE邏輯。只是CASE表達式在T-SQL中並不能控制T-SQL程序的流程,只是作為基於列的邏輯使用.

一個簡單的CASE表達式如下:

我已經知道員工ID對應的姓名,我想獲得員工ID,並將員工ID以姓名的方式展現出來,我不知道的員工ID則顯示UNKNOW:

SELECTTOP 4 CASE EmployeeID
	WHEN 1 THEN 'CareySon'
	WHEN 2 THEN 'Jack'
	WHEN 3 THEN 'Tom'
	ELSE 'UNKNOW'
	ENDAS NameList,EmployeeID
  FROM [AdventureWorks].[HumanResources].[Employee]
  ORDERBY EmployeeID

顯示結果如下:

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

CASE表達式實際情況可以分為兩種:

CASE簡單表達式(CASE Simple Expression):將某個表達式與一組簡單表達式進行比較以確定結果。

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

下面會按照這兩種CASE表達式來闡述

CASE簡單表達式(CASE Simple Expression)

在CASE簡單表達式中,整個表達式只會取一列的值做相應的判斷,上面那個查詢例子就是一個CASE簡單表達式,可以用下圖表示:

CASE表達式也可以用這樣的寫法:

SELECTTOP 4 NameList=CASE EmployeeID
	WHEN 1 THEN 'CareySon'
	WHEN 2 THEN 'Jack'
	WHEN 3 THEN 'Tom'
	ELSE 'UNKNOW'
	END,EmployeeID
  FROM [AdventureWorks].[HumanResources].[Employee]
  ORDERBY EmployeeID

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved