- 谓词
- 综述
Oracle 和 GBase 8a 都可以很好的支持 SELECT 、 UPDATE、DELETE 声明中的 WHERE 字句和 HAVING 字句。其中REGEXP_LIKE(string_表达式, pattern)可以使用 GBase 8a 的expr REGEXPpattern表达式来代替,但 REGEXP_LIKE(string_表达式, pattern, match_parameter)等特殊的函数或谓词就不被GBASE 8A支持。
对于这些谓词我们从下面几个方面来进行介绍:
条件比较操作符、存在条件谓词、浮点谓词、内部条件谓词、is/member、空条件谓词、模式匹配谓词、范围条件、 XML 条件。
-
- 逻辑谓词
逻辑谓词的作用是结合两个条件,返回一个判断结果。Oracle有AND、OR、NOT个逻辑谓词,GBase 8a 完全支持这三个谓词,且含义与Oracle中完全相同,在迁移时不用改变。
-
- 比较谓词
比较谓词用于对两个表达式进行比较。Oracle 支持6个比较谓词,分别为=、<>、<、<=、>和>=, GBase 8a 支持这些比较谓词,且含义与Oracle完全相同,在迁移的时候不做改变。
-
- 存在谓词
存在谓词用于测试子查询中的行是否存在。Oracle 支持两个存在谓词,分别为EXISTS和NOT EXISTS,GBase 8a 支持这两个存在谓词,含义与Oracle中完全相同,在迁移时不做改变。
-
- 浮点谓词
浮点谓词用来判断表达式的结果是不是无穷大或是不是数字。Oracle 支持 4 个浮点谓词,分别是 INFINITE, IS NOT INFINITE, IS NAN, 和 IS NOT NAN 。
GBase 8a 中不支持浮点谓词。
-
- In 谓词
In 谓词测试指定的值是否可以在集合中找到。Oracle 支持2 个 In 谓词,分别为IN和NOT IN,GBase 8a 支持这两个In 谓词,且含义与Oracle相同,在迁移的时候不做改变。
-
- 判断/成员谓词
判断/成员谓词可以测试一个值是否是一个特殊的形式。Oracle 支持12 个判断/成员谓词,包括 IS [NOT] A SET, IS ANY, IS [NOT] EMPTY, IS [NOT] OF type, IS PRESENT, [NOT] MEMBER, [NOT] SUBMULTISET 。
GBase 8a 不支持判断/成员谓词。
-
- Null判断谓词
Null 判断谓词用来测试表达式是否为 NULL 值。Oracle 支持2个 null 谓词,分别为IS NULL 和IS NOT NULL。
GBase 8a 支持这两个谓词,且与Oracle中的同名谓词含义相同,在迁移时不做改变。
-
- 模式匹配谓词
模式匹配谓词用来测试一个值是否匹配一个指定的模式。Oracle 支持9 个模式匹配谓词。
GBase 8a 仅支持LIKE 和 NOT LIKE 两个模式匹配谓词,Oracle中支持的其它模式匹配谓词在GBase 8a 中不被支持。
-
- 范围表达式
范围表达式测试在一个范围内包含的值,Oracle 支持2个范围表达式,分别为BETWEEN 和 NOT BETWEEN。
GBase 8a 支持这两个范围表达式,且与Oracle中含义相同,在迁移时不做改变。
-
- XML操作谓词
GBase 8a 中不支持XML表达式,也不能对XML文件进行处理,因此GBase 8a 中不支持XML操作谓词。
-
- 谓词优先级
在同一条 SQL 语句中可能存在多个条件和谓词,处理这些条件和谓词数据库系统有相应的顺序。对于条件的执行顺序,遵守从高到低的原则。对于表达式遵循从左向右执行的顺序。括号可以提高表达式的执行权限。Oracle 中圆括号内的表达式先于括号外的表达式执行。GBase 8a 同样遵守这些规则。
下表从高到低的列出了 Oracle 和 GBase 8a 谓词的优先级。
ORACLE | GBase 8a |
NOT | |
比较谓词 (= <> < <= > >=) | 比较谓词(= <> < <= > >=), IS [NOT] NULL, LIKE, [NOT] IN, REGEXP |
IS [NOT] NULL, LIKE, [NOT]BETWEEN, [NOT] IN, EXISTS,IS OF type | [NOT] BETWEEN |
NOT | AND |
AND | OR |
OR |