where 子句

WHERE子句指定一个结果表,该表由满足搜索条件的R行组成。 R 是子查询的 FROM 子句的结果。

where子句的语法

阅读语法图跳过可视化语法图WHERE搜索条件

where子句的描述

搜索条件必须符合以下规则:

  • 每个列名必须明确标识R列或相关参考。 列名是指外部子选择中标识的表、视图、 公共表表达式嵌套表表达式的列的关联引用。
  • 除非在 HAVINE 子句的子查询中指定了 WHERE 子句,并且函数的自变量是对组的相关引用,否则不得指定聚集函数。

搜索条件中的任何子查询都会针对R的每一行有效执行,并将结果用于对R的指定行应用搜索条件。 仅当每个 R 行包含一个相关引用时,才会实际执行子查询。 事实上,没有关联引用的子查询只执行一次,而具有关联引用的子查询可能需要针对每一行执行一次。

如果为表启用了行访问控制,且未定义其他行权限,则行访问控制搜索条件为默认行权限,即1 = 0。 如果只定义了一行权限,则行访问控制搜索条件就是该权限指定的搜索条件。 否则,如果为表定义了多行权限,则通过将逻辑或运算符应用于每行权限指定的搜索条件来获得行访问控制搜索条件。 这一行访问控制搜索条件整体而言是通过应用逻辑与运算符与WHERE子句指定的搜索条件连接在一起的,并且与WHERE子句中的其他搜索条件具有相同的优先级。 对于启用行访问控制的子选择语句的 FROM 子句中的每个表引用 ,重复此过程。

行访问控制搜索条件作为表引用的过滤器,用于确定子选择授权ID或角色可访问的表引用结果。 由于对于优先级相同的操作符,操作符的评估顺序是不确定的,因此WHERE子句中的其他搜索条件可能会在行访问控制搜索条件之前进行评估。 因此,其他搜索条件可以访问受行权限规则限制的行。 为了确保敏感数据得到保护,引用使用“未加密”选项定义的用户自定义函数的谓词,总是排在行访问控制搜索条件之后进行评估。

列访问控制不会影响WHERE子句的操作。