SELECT语句中的表达式

常规SELECT语句中的哪些地方允许使用表达式?后端无关紧要,我的意思是从概念(iso?)的角度来看更多。

例如,在进行一些基本测试时(使用 mysql8,但同样,我不关心特定的后端)似乎除了在LIMITorOFFSET地方之外的任何地方都允许它:

with tbl (num, str) as (
    select 1, 'a'
) 
SELECT
    (select num from tbl limit 1) select_expr -- select expression
FROM
    (select * from tbl limit 1) table_expr -- table expression
WHERE
    (select null from tbl)
    or 1 = (select num from tbl)
    or (select num from tbl) = (select num from tbl) -- filter expressions, can be lhs or rhs or single subselect
GROUP BY
    num, (select num from tbl) -- aggregate expression
HAVING
    (select num from tbl limit 1)
ORDER BY
    (select num from tbl limit 1)
LIMIT
    (select num from tbl limit 1) -- invalid
OFFSET
    (select num from tbl limit 1) -- invalid

回答

通常,在允许常量值的任何地方都允许使用标量子查询- 例如SELECTWHERE, HAVING, ORDER BY, 。

标量子查询是一个子查询返回至多一行和一个值(通常即,一个表达式或列)。

是否允许它们作为GROUP BY键可能取决于数据库。但话又说回来,“常量”值不一定支持作为GROUP BY键。

LIMIT不是标准的 SQL 子句。它的行为完全取决于定义它的数据库。标准 SQL 中的等效项是FETCH; 我相信它需要实际的常量,但不同的数据库可能会以不同的方式对待它。


以上是SELECT语句中的表达式的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>