聊聊PG中的关键字类别-1
·
- 裸列标签(Bare column label)
可以省略 AS 直接使用:
SELECT foo bar FROM t; – bar 是裸列标签
限制:只有部分关键字可以这样用,因为如果太多关键字都能省略 AS,会导致语法歧义。
- 列标签(Column label)
必须用 AS 明确指定:
SELECT foo AS “order” FROM t; – “order” 是列标签
更宽松:所有关键字都可以用,但必须显式写 AS(有时还需要双引号)。
为什么要区分?
🎯 避免语法歧义
如果所有关键字都能省略 AS,解析器会遇到困难:
– 假设 order 可以裸用:
SELECT foo order FROM t;
– 解析器会困惑:这是 “foo 别名为 order” 还是 “foo 然后 ORDER BY 开始了”?
通过区分:
裸列标签:只能是无歧义的关键字(通常是保留字之外的)
列标签:所有关键字都行,但必须用 AS 明确告诉解析器"这是别名"
🎯 兼容性与灵活性
允许常用标识符简洁书写(裸用)
同时保留用关键字作别名的能力(加 AS)
让 SQL 既简洁又不会模棱两可
简单说:裸列标签是"快速通道",但只有安全的词能走;列标签是"标准通道",所有词都能走但需要 AS 这张票。
更多推荐
所有评论(0)