select 子句中的 order / group by 子句中使用的列是否是强制性的?

Are the columns used in the order / group by clause(s) mandatory in the select clause?

Oracle 数据库允许以下查询:

select col1 from table order by col2;

select count(col1) from table group by col2;

看来 order / group by 子句中的列不需要在 select 子句中。但是,tutorialspoint: SQL - ORDER BY Clause 告诉我的不是这样。那么以上只是Oracle特有的吗?

教程完全错误。

order by 可以包含查询对象中的任何列,无论它们是否在 select 列表中。

A​​ group by 反其道而行之。 select 列表中的任何非聚合列都必须包含在 group by.

我认为 GROUP BY 中提到的列不一定在 SELECT 中。但是,如果有 GROUP BY,则 SELECT 中未聚合的列必须在 GROUP BY 中!不管怎样,MySQL请看SQL Fiddle demo here。所以你可以看到它不是Oracle特有的。

如果您考虑生成结果的顺序,很明显您不需要select与查询条件返回的结果相同的列。

就顺序而言,首先记录是 select 从 table 编辑的,然后按您在查询中指定的列排序,然后您可以 select 您希望在结果或输出中看到的列或属性。

希望对您有所帮助!