比较条件(Comparison Conditions)用于比较一个表达式与另一个表达式,比较的结果为 TRUE
、FALSE
或 UNKNOWN
。
比较条件不能比较大对象(LOB)数据类型。但是您可以通过 PL/SQL 程序对 CLOB
数据进行比较。
比较数值表达式时,OceanBase 使用数值优先级来确定条件中的数值比较顺序,比如比较符两边出现不同类型的 数值时,如果有BINARY_DOUBLE
则按照BINARY_DOUBLE
进行比较, 其次是BINARY_FLOAT
, 最后是NUMBER
。是比较 NUMBER
、BINARY_FLOAT
还是 BINARY_DOUBLE
值。
比较字符表达式时,OceanBase 使用 字符数据类型比较规则 中的规定。它规定了表达式的字符集在比较之前是如何统一的,选择使用二进制和语言比较,还是选择使用空白填充和非空白填充的比较语义。
当使用比较条件对字符值进行语言比较时,首先将它们转换为排序键,然后做比较,比较的过程类似 RAW
数据类型。排序键是由函数 NLSSORT
返回的值。如果两个表达式生成的排序键的前缀相同,即使它们在值的其余部分不同,它们也可以在语言上相等。
如果两个非标量类型的对象具有相同的命名类型,并且它们的元素之间存在一一对应的关系,则它们是可比较的。用户定义的对象类型—嵌套表,在相等或 IN
条件下使用时,必须定义 MAP
方法。嵌套表的元素可以比较。
简单比较条件
一个简单比较条件可以是单个表达式与表达式列表比较或单个表达式与子查询结果比较。
简单比较条件语法如下:
expr {= | != | ^= | <> | < | >= |} ( expression_list | subquery )
在简单比较条件中,如果是单个表达式与表达式列表比较,并且表达式列表中的表达式必须在数量和数据类型上与运算符左边的表达式匹配。如果是单个表达式与子查询的值比较,则子查询返回的值必须与运算符左侧的表达式在数量和数据类型上匹配。
组比较条件
一个组比较条件可以是单个表达式与表达式列表或子查询结果的任何或所有成员比较,也可以是多个表达式与表达式列表或子查询结果的任何或所有成员比较。
在组比较条件中,如果是单个表达式或多个表达式列表与表达式列表的任何或所有成员比较,则每个表达式列表中的表达式必须在数量和数据类型上与运算符左边的表达式匹配。如果是单个表达式或多个表达式与子查询结果的任何或所有成员比较,则子查询返回的值必须与运算符左侧的表达式在数量和数据类型上匹配。
组比较条件语法有如下两种:
expr {= | != | ^= | <> | < | >= | ANY | SOME | ALL } ({ expression_list | subquery})
(expr [, expr ]...){= | != | ^= | ANY | SOME | ALL} ({expression_list [, expression_list ]... |subquery})