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 您希望在结果或输出中看到的列或属性。
希望对您有所帮助!
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 您希望在结果或输出中看到的列或属性。
希望对您有所帮助!