What is the role of brackets in the below query?方括号和反勾用于在SQL查询中进行替换关键字,但我找不到使用方括号的适当解释.
SELECT (authorID) FROM AUTHOR;
在SQL中,这是有效的,但当您在其中包含两列时,它会给您一个错误,表明"操作数应该包含一列".当将每一列放在括号内并用逗号分隔每一列时,它不会给出错误,如下所示.
SELECT (authorID),(authorName) FROM AUTHOR;
What is the role of brackets in the below query?方括号和反勾用于在SQL查询中进行替换关键字,但我找不到使用方括号的适当解释.
SELECT (authorID) FROM AUTHOR;
在SQL中,这是有效的,但当您在其中包含两列时,它会给您一个错误,表明"操作数应该包含一列".当将每一列放在括号内并用逗号分隔每一列时,它不会给出错误,如下所示.
SELECT (authorID),(authorName) FROM AUTHOR;
括号或括号在您显示的上下文中是多余的.没有坏处,但不需要它们.
就像在代数中一样,以下两个表达在功能上是相同的:
x + y
(x + y)
额外的圆括号不会改变此运算式的结果.
您可以在代数中使用括号来更改运算符优先级.由于相乘比加法束缚得更紧,因此以下两个公式不相同:
x + y * z
(x + y) * z
对于一个如此简单以至于只有一个变量的表达,括号确实是多余的.
(x)
这与SQL中的第一个示例类似,其中括号位于select-list中的每个相应列周围:
SELECT (authorID),(authorName) FROM AUTHOR;
在SQL或大多数其他SQL实现中,这些括号没有必要或用途(我不使用Microsoft Access,所以这可能是一个例外).
在SQL中,不冗余的括号的一个特殊用途是将多个表达式的列表放入row value constructor中.这允许比较二元组:
(col1, col2) = (123, 456)
(col1, col2, col3) IN ((1, 2, 3), (4, 5, 6), (7, 8, 9))
在某些上下文中,例如VALUES statement,行值构造函数看起来像ROW(...list...)
.
但在 Select 列表中,每个表达都必须是一个纯量表达.即,一个列、一个运算式或一个文本值,但不是行值.
同样,在行值构造函数中,该列表中的每个项都必须是纯量表达.换句话说,您不能在行值构造函数中嵌套另一个行值构造函数.
在这个例子中,我使用了行值,但 Select 列表中的表达是比较,所以它只是一个布尔结果:
mysql> select (1, 2) = (1, 2) as `same`;
+------+
| same |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
但我不能在行值内使用另一行值:
mysql> select (1, 2) = (1, (2,3)) as `same`;
ERROR 1241 (21000): Operand should contain 1 column(s)