国产数据库---GBase 8a替换GreenPlum ---迁移2

GreGreenPlum 和 GBase 都可以很好的支持 SELECT、UPDATE、DELETE 声明中的 WHERE 子句和 HAVING 子句。

GreenPlum和GBase支持的谓词比较多,详细的可以分为逻辑谓词、比较谓词、存在谓词、In谓词、NULL判断谓词、范围表达式和模式匹配谓词。

本篇主要从以上几个方面介绍GreenPlum谓词向GBase谓词的迁移。

1.1. 谓词的迁移 

1.1.1. 综述

1.1.2. 逻辑谓词

逻辑谓词是结合两个条件,返回一个结果。GreenPlum有3个逻辑谓词,这些谓词相对通用,因此GBase 都有相同的谓词与之对应,在迁移时不用改变。

1.1.2.1. 表达式1 AND 表达式2

如果两个条件都返回 true 则此表达式返回 true 。如果有一个条件为 null 则返回 false 。

GBase替代: AND

1.1.2.2. NOT 表达式

否定表达式的结果,如果表达式为 false 则返回 true,如果表达式为 null 则返回 UNKNOWN 。

GBase替代: NOT

1.1.2.3. 表达式1 OR 表达式2

如果任意一个表达式结果为 true 则返回 true,如果一个表达式为 null 则返回 UNKNOWN 。

GBase替代: NOT

1.1.3. 比较谓词

比较谓词一般用于比较两个表达式,GreenPlum支持 8 个比较谓词。这些比较谓词是通用的,GBase有相同的谓词与之对应,迁移的时候可以不做改变。

1.1.3.1. 表达式1 = 表达式2

如果两个表达式是相等的,则返回 true ,如果有一个表达式为 null 则返回 NUKNOWN ,其余返回 false 。

GBase替代: =

1.1.3.2. 表达式1 <> 表达式2

额外的其他的格式(可能在别的平台使用): != ^= -|= 。 如果这两个条件不相同,返回 true,如果任意一个条件为 null 返回 UNKNOWN ,其余返回 false。

GBase替代: <> !=

1.1.3.3. 表达式1 < 表达式2

如果条件1 小于 条件 2 则返回 true ,有一个条件为空返回 UNKNOWN ,其余返回 false 。

GBase替代: <

1.1.3.4. 表达式1 <= 表达式2

如果条件1 小于或等于条件2 则返回 true ,如果其中一个为 null 则返回 UNKNOWN ,其余情况返回 false。

GBase替代: <=

1.1.3.5. 表达式1 > 表达式2

如果条件1 大于条件 2 则返回 true ,如果其中一个为 null 则返回 UNKMOWN ,其余情况返回 false 。

GBase替代: >

1.1.3.6. 表达式1 >= 表达式2

如果条件 1 大于或等于条件2 则返回 true ,如果其中一个为 null 则返回 UNKOWN ,其余情况返回 false 。

GBase替代:>=

1.1.3.7. 表达式1 比较运算符 ANY 表达式2 

是表达式1 比较运算符 SOME 表达式2 的同义字。ANY关键词的意思是“对于在表达式2返回列中的任一值,如果比较结果为TRUE的话,则返回TRUE”,如果没有任何值与表达式1相比可以得到 true 那么返回 false 或返回空集。

比较运算符可以使用下面其中之一:= <> < <= > >=

GBase替代:ANY, SOME, 表达式2 需要是一个子查询

1.1.3.8. 表达式1比较运算符 ALL 表达式2

ALL 关键词的意思是“对于在表达式2返回列中的所有值,如果比较结果为TRUE的话,则返回TRUE”,如果没有任何值与表达式1相比可以得到 true 那么返回 false 或返回空集。

比较运算符可以使用下面其中之一:= <> < <= > >=

GBase替代:ALL, 表达式2 需要是一个子查询

1.1.4. 存在谓词

存在谓词匹配子查询中的行,GreenPlum支持两个存在谓词,这些存在谓词相对通用,迁移时不需要作任何改变。

1.1.4.1. EXISTS (子查询)

如果子查询中至少存在一行,则返回 true ,否则返回 false 。

GBase替代: EXISTS

1.1.4.2. NOT EXISTS (subquery)

如果子查询中不存在行,则返回 true ,否则返回 false 。

GBase替代:NOT EXISTS

1.1.5. In 谓词

IN 谓词测试任何一个值是否可以在集合中找到,相对通用,GreenPlum和GBase是一样的,迁移的时候不需要作任何改变。

1.1.5.1. 表达式 IN {值列表 | (子查询)}

如果这个表达式与值列表(或子查询的结果)中任意一个值相同,则返回 true 。任意一个为 NULL 则返回 UNKNOW 。其余返回 false 。

GBase替代:IN

1.1.5.2. 表达式 NOT IN {值列表 | (子查询)}

如果这个表达式与值列表(或子查询的结果)中没有一个值相同,则返回 true 。任意一个为 NULL 则返回 UNKNOW 。其余返回 false 。

GBase替代:NOT IN

1.1.6. Null判断谓词

Null 判断谓词用来测试 null 值,相对通用,GreenPlum和GBase均支持,迁移时不需要作任何改变。

1.1.6.1. 表达式 IS NULL

如果这个表达式的结果是 NULL 则返回 true ,否则返回 false 。

GBase 替代:表达式 IS NULL

1.1.6.2. 表达式 IS NOT NULL

如果这个表达式的结果不是 NULL 则返回 true ,否则返回 false 。

GBase 替代:表达式 IS NOT NULL

1.1.7. 模式匹配谓词

模式匹配谓词用来测试 一个值是否匹配一个指定的模式,GreenPlum提供了三种实现模式匹配的方法:传统SQL的LIKE操作符、SQL99新增的SIMILAR TO操作符、POSIX风格的正则表达式。

1.1.7.1. 字符串表达式 LIKE 模式 [ESCAPE 例外字符串]

如果字符串表达式匹配了模式,则返回 true ,如果任意部分为 null 则返回 UNKNOWN ,其余返回false 。使用当前(输入)的字符集,为所有参数的字符集。

GBase 替代: LIKE

1.1.7.2. 字符串表达式 NOT LIKE 模式 [ESCAPE 例外字符串]

如果字符串表达式不能匹配模式,则返回 true ,如果任意部分为 null 则返回 UNKNOWN ,其余返回false 。使用当前(输入)的字符集,为所有参数的字符集。

GBase 替代: NOT LIKE

1.1.7.3. 字符串表达式 SIMILAR TO 模式 [ESCAPE 例外字符串]

如果字符串表达式匹配模式,则返回 true ,如果任意部分为 null 则返回 UNKNOWN ,其余返回false 。使用 Unicode字符集,为所有参数的字符集。

SIMILAR TO和LIKE非常类似,只不过它使用SQL标准定义的正则表达式理解模式,具有LIKE的功能,此外还支持部分POSIX正则表达式进行模式匹配,例如:

(a)|表示选择(两个候选之一)

(b)*表示重复前面的项零次或更多次

(c)+表示重复前面的项一次货更多次

(d)?表示重复前面的项零次或一次

(e){m}表示重复前面的项正好m次

(f){m,}表示重复前面的项m或更多次

(g){m,n}表示重复前面的项至少m次,最多不超过n次

GBase 替代:REGEXP

1.1.7.4. 字符串表达式 NOT SIMILAR TO 模式 [ESCAPE 例外字符串]

如果字符串表达式不能匹配模式,则返回 true ,如果任意部分为 null 则返回 UNKNOWN ,其余返回false 。使用 Unicode字符集,为所有参数的字符集。

GBase 替代:NOT(字符串表达式REGEXP 模式)

1.1.7.5. 字符串表达 正则表达式

如果字符串表达式匹配正则表达式,则返回 true ,如果任意部分为 null 则返回 UNKNOWN ,其余返回false。

POSIX正则表达式提供了比LIKE和SIMILAR TO 操作符更强大的模式匹配的方法。许多 Unix 工具,比如egrep,sed,awk使用类似的模式匹配语言。

正则表达式是一个字符序列,它是定义一个字符串集合(一个正则集合 )的缩写。如果一个字符串是正则表达式描述的正则集合中的一员时,我们就说这个字符串匹配该正则表达式。不同于LIKE和SIMILAR TO,正则表达式可以匹配字符串里的任何位置,除非该正则表达式明确地锚定在字符串的开头或者结尾。

正则表达式用法非常灵活,通常还可以和其他函数(如字符串替换)配合使用。

例如:

select‘abc’~ ‘abc’返回真

select ‘abc’~ ‘^a’返回真

GBase 替代:REGEXP

1.1.8. 范围表达式

范围表达式测试在一个范围内包含的值,范围表达式相对通用,GreenPlum和GBase是一样的,迁移时不需要作任何修改。

1.1.8.1. 表达式1 BETWEEN表达式2 AND表达式3

如果表达式1 在指定的表达式值的范围内(例如如果表达式1 在表达式2的范围内或等于表达式2 且小于等于表达式3) 则返回 true ,如果有一个表达式是 null 则返回 UNKNOWN 其余返回false。

GBase 替代: BETWEEN

1.1.8.2. 表达式1 NOT BETWEEN表达式2 AND表达式3

如果表达式1 不在指定的表达式值的范围内则返回 true ,如果有一个表达式是 null 则返回 UNKNOWN 其余返回false。

GBase 替代: NOT BETWEEN

1.1.9. 谓词优先级

在同一条 SQL 语句中可能存在多个条件和谓词,处理这些条件和谓词数据库系统有相应的顺序。对于条件的执行顺序,遵守从高到低的原则。对于表达式遵循从左向右执行的顺序。括号可以提高表达式的执行权限。GreenPlum DB中圆括号内的表达式先于括号外的表达式执行。GBase 同样遵守这些规则。

下表从高到低的列出了 GreenPlum DB和 GBase 谓词的优先级。

GreenPlum DB

GBase

SQL 操作  

SQL 操作

比较谓词 (= <> < <= > >=)

比较谓词(= <> < <= > >=), IS [NOT]  NULL, LIKE, [NOT] IN, REGEXP

IS [NOT] NULL, LIKE, [NOT]BETWEEN,  [NOT] IN, EXISTS,IS OF type

[NOT] BETWEEN

NOT

NOT

AND

AND

OR

OR

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值