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