iT邦幫忙

DAY 19
13

T-SQL 應用之美系列 第 19

在 SELECT 中,使用萬用字元:*

在「命令提示字元」視窗或是 DOS 裡,可以使用萬用字元。在 T-SQL 裡面,同樣也有萬用字元可用,共計 5 種萬用字元可用在 SELECT 或 WHERE 子句,這次就先介紹常見於 SELECT 子句的 *。
使用過「命令提示字元」視窗或是 DOS 萬用字元的邦友應該都知道,萬用字元是用來判斷特定字元字串是否符合我們所指定的模式。這個模式可以包含一般的字元與萬用字元,以便在比對的時候,可以找出與字元字串中,符合我們所指定的字元,先行過濾不必要的資料。

* 是唯一一個用於 SELECT 子句中的萬用字元,它用來指定應該傳回 FROM 子句中,所有資料表或檢視表中的所有記錄,而這些記錄的欄位出現順序就是它們在資料表或檢視表中的欄位順序。

假設要找出 AdventureWorks 資料庫的 HumanResources.Employee 資料表中,所有欄位的記錄,就可以使用下面的程式碼:

USE AdventureWorks
GO

SELECT *
FROM HumanResources.Employee

如果把兩個資料表 JOIN 起來,也可以在某個資料表的名稱或資料表的別名之後,使用 *,來取出該資料表內所有欄位的記錄:

USE AdventureWorks
GO

SELECT Emp.EmployeeID, Dep.*
FROM  HumanResources.Employee Emp INNER JOIN
	HumanResources.EmployeeDepartmentHistory Dep ON 
	Emp.EmployeeID = Dep.EmployeeID

如果直接在 SELECT 使用 *,當然就表示說,要把這兩個資料表 JOIN 後的所有欄位之記錄通通顯示出來:

USE AdventureWorks
GO

SELECT *
FROM  HumanResources.Employee Emp INNER JOIN
	HumanResources.EmployeeDepartmentHistory Dep ON 
	Emp.EmployeeID = Dep.EmployeeID

雖然萬用字元 * 很好用,但是在實務上,非常不建議使用,因為當 SELECT 子句所查詢出來的結果很多,且每一筆記錄的長度都很大時,勢必會影響 SQL Server 的效能。試想一下,如果只是要查出某個欄位的資料記錄,有必要把所有欄位的資料都篩選出來嗎?答案當然是「不需要」,既然不需要,就請謹記在心,儘量少用萬用字元 *。


上一篇
如何使用次序函數刪除重複的記錄
下一篇
在 WHERE 中,使用萬用字元:%
系列文
T-SQL 應用之美30

尚未有邦友留言

立即登入留言