PostgreSQL中关键字何时需加括号?ON与USING()用法辨析
SQL中关键字后括号的使用规则:以USING为例
为什么USING需要括号?
这是SQL语法标准规定的写法。USING是专门用来简化同名列连接的语法,它要求把要匹配的列名放在括号里——本质是告诉数据库,你要基于括号里的这组(一个或多个)同名列来关联两张表,比如USING(id, create_time)就能同时匹配两表的id和create_time列。
和ON的语法差异
ON的作用是定义任意连接条件,它后面直接跟布尔表达式,不需要给表达式整体加括号(除非你要调整运算优先级)。比如你可以写:
ON table1.id = table2.id AND table1.status = 'active'
甚至可以写非等值连接:
ON table1.price > table2.discount_price
而USING只能处理“两表列名完全相同且等值匹配”的场景,括号是它的语法标识,用来明确指定参与匹配的列集合。
什么时候必须用括号?
简单来说,括号的作用是明确界定一组参数、列名或子逻辑的范围,遇到以下情况必须加:
- 像
USING、VALUES(比如INSERT INTO t VALUES(1, 'a'))这类需要接收“一组值/列名”的关键字,括号用来包裹这组内容; - 聚合函数(比如
SUM(amount)、COUNT(DISTINCT id)),括号用来指定函数的计算对象; - 子查询(比如
SELECT * FROM (SELECT id FROM t) AS sub),括号用来把内部查询作为一个整体的数据源; - 自定义表达式需要改变优先级时(比如
WHERE (a > b OR c < d) AND e = f)。
而像ON、WHERE、ORDER BY这类后面跟单个逻辑表达式或列名的关键字,不需要给整体加括号,除非是上述优先级调整的情况。
内容的提问来源于stack exchange,提问作者Mark Thomas
相关产品推荐
相关产品推荐

