選擇
SELECT *
以與表中定義的順序相同的順序返回所有列。
使用 SELECT *
時,只要表定義發生更改,查詢返回的資料就會發生變化。這會增加應用程式或資料庫的不同版本彼此不相容的風險。
此外,讀取更多列不必要可以增加磁碟和網路 I / O 的數量。
因此,你應始終明確指定實際要檢索的列:
--SELECT * don't
SELECT ID, FName, LName, PhoneNumber -- do
FROM Emplopees;
(進行互動式查詢時,這些注意事項不適用。)
但是,SELECT *
在 EXISTS 運算子的子查詢中不會受到影響,因為 EXISTS 無論如何都會忽略實際資料(它只檢查是否至少找到了一行)。出於同樣的原因,列出 EXISTS 的任何特定列是沒有意義的,所以 SELECT *
實際上更有意義:
-- list departments where nobody was hired recently
SELECT ID,
Name
FROM Departments
WHERE NOT EXISTS (SELECT *
FROM Employees
WHERE DepartmentID = Departments.ID
AND HireDate >= '2015-01-01');