我希望有人能解释以下两个陈述之间的区别:
SELECT * FROM employee;
和
SELECT employee.* FROM employee;
如果有人可以提供他们选择员工*而不是*的理由,或者什么时候选择一个而不是另一个是合适的,我们将不胜感激。
亲切问候
乔。
SELECT * ...
从FROM
子句中生成的结果集中选择所有列。
SELECT employees.* ...
选择在FROM
子句中生成的结果集中源自employees
表的所有列(请注意,employees
也可能是别名而不是表名(。
当FROM
子句仅包含一个表时,这两个表描述同一组列。1
至于为什么有人选择在只有一个表格存在的情况下这样写,我不能说。如果他们是一个绝对主义者,坚持在select
子句中的所有列前面加上他们的原始表,我很惊讶他们在那里使用*
而不是明确的列名。
1但请注意,FROM
子句(包括任何JOIN
等(和WHERE
、GROUP BY
和HAVING
子句会影响显示哪些行。SELECT
子句有效地选择列。
在您的示例中没有区别。语法允许这样做的原因是允许您在FROM
子句中仅显示一个对象的所有列。举个例子会更有意义。
以下查询将显示两个表中的所有列employee
和manager
SELECT * FROM employee inner join manager on employee.managerid = manager.managerid
以下查询在功能上等效于上面的查询,区别在于我们显式指定了所显示列集中表的顺序。
SELECT employee.*, manager.* FROM employee inner join manager on employee.managerid = manager.managerid
以下查询将仅显示表employee
中的列,而不显示manager
SELECT employee.* FROM employee inner join manager on employee.managerid = manager.managerid