在select语句的第一行中使用'*'和'。*'有什么区别?

时间:2018-08-15 09:47:36

标签: sql postgresql

我希望有人能解释以下两个语句之间的区别:

SELECT * FROM employee;

SELECT employee.* FROM employee;

如果某人可以提供选择雇员的理由。*而不是*,或者在适当的情况下选择一个而不是另一个,那么将不胜感激。

亲切的问候,

乔。

2 个答案:

答案 0 :(得分:4)

SELECT * ...

FROM子句中生成的结果集中选择所有列。


SELECT employees.* ...

选择FROM子表中employees子句中生成的结果集中的所有列(请注意,employees也可以是别名,而不是表名)。 / p>


FROM子句仅包含一个表时,这两个表描述同一列集。 1

关于为什么有人选择只存在一个表时以这种方式编写它,我不能说。如果他们是绝对主义者,坚持在select子句中的所有列都使用其原始表作为前缀,那么我感到惊讶的是,他们完全愿意在其中使用*而不是显式的列名。 / p>


1 但是请注意,它是FROM子句(包括任何JOIN等)以及WHEREGROUP BY和{{1 }}子句会影响哪些行HAVING子句有效地选择了列。

答案 1 :(得分:2)

在您的示例中没有区别。语法允许这样做的原因是允许您仅显示FROM子句中一个对象的所有列。举个例子更有意义。


以下查询将显示两个表employeemanager的所有列

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