我希望有人能解释以下两个语句之间的区别:
SELECT * FROM employee;
和
SELECT employee.* FROM employee;
如果某人可以提供选择雇员的理由。*而不是*,或者在适当的情况下选择一个而不是另一个,那么将不胜感激。
亲切的问候,
乔。
答案 0 :(得分:4)
SELECT * ...
从FROM
子句中生成的结果集中选择所有列。
SELECT employees.* ...
选择FROM
子表中employees
子句中生成的结果集中的所有列(请注意,employees
也可以是别名,而不是表名)。 / p>
当FROM
子句仅包含一个表时,这两个表描述同一列集。 1
关于为什么有人选择只存在一个表时以这种方式编写它,我不能说。如果他们是绝对主义者,坚持在select
子句中的所有列都使用其原始表作为前缀,那么我感到惊讶的是,他们完全愿意在其中使用*
而不是显式的列名。 / p>
1 但是请注意,它是FROM
子句(包括任何JOIN
等)以及WHERE
,GROUP BY
和{{1 }}子句会影响哪些行。 HAVING
子句有效地选择了列。
答案 1 :(得分:2)
在您的示例中没有区别。语法允许这样做的原因是允许您仅显示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