選擇

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');