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

  • 本文关键字:区别 语句 select 一行 sql postgresql
  • 更新时间 :
  • 英文 :


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

SELECT * FROM employee;

SELECT employee.* FROM employee;

如果有人可以提供他们选择员工*而不是*的理由,或者什么时候选择一个而不是另一个是合适的,我们将不胜感激。

亲切问候

乔。

SELECT * ...

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


SELECT employees.* ...

选择在FROM子句中生成的结果集中源自employees表的所有列(请注意,employees也可能是别名而不是表名(。


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

至于为什么有人选择在只有一个表格存在的情况下这样写,我不能说。如果他们是一个绝对主义者,坚持在select子句中的所有列前面加上他们的原始表,我很惊讶他们在那里使用*而不是明确的列名。


1但请注意,FROM子句(包括任何JOIN等(和WHEREGROUP BYHAVING子句会影响显示哪些行SELECT子句有效地选择列。

在您的示例中没有区别。语法允许这样做的原因是允许您在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

最新更新