谓词表达式

http://www.cocoachina.com/ios/20160111/14926.html

首先,我们需要知道何谓谓词,让我们看看官方的解释:

The NSPredicate class is used to define logical conditions used to constrain a search either for a fetch or for in-memory filtering.

NSPredicate类是用来定义逻辑条件约束的获取或内存中的过滤搜索。

可以使用谓词来表示逻辑条件,用于描述对象持久性存储在内存中的对象过滤。其实意思就是:我是一个过滤器,不符合条件的都滚开。

一、NSPredicate的基本语法

我们使用一门语言,无论是外语还是计算机语言,总是从语法开始的,这样我们才能正确的把握逻辑。所以我们从语法开始说起。在这部分我们仅关心其语法的使用

只要我们使用谓词(NSPredicate)都需要为谓词定义谓词表达式,而这个表达式必须是一个返回BOOL的值。

谓词表达式由表达式、运算符和值构成。

1.比较运算符

比较运算符如下

  • =、==:判断两个表达式是否相等,在谓词中=和==是相同的意思都是判断,而没有赋值这一说

1

2

3

4

5

NSNumber *testNumber = @123;

  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF = 123"];

  if ([predicate evaluateWithObject:testNumber]) {

      NSLog(@"testString:%@", testNumber);

  }

我们可以看到输出的内容为:

1

2016-01-07 11:12:27.281 PredicteDemo[4130:80412] testString:123

  • >=,=>:判断左边表达式的值是否大于或等于右边表达式的值
  • <=,=<:判断右边表达式的值是否小于或等于右边表达式的值
  • >:判断左边表达式的值是否大于右边表达式的值
  • <:判断左边表达式的值是否小于右边表达式的值
  • !=、<>:判断两个表达式是否不相等
  • BETWEEN:BETWEEN表达式必须满足表达式 BETWEEN {下限,上限}的格式,要求该表达式必须大于或等于下限,并小于或等于上限

1

2

3

4

5

6

7

NSNumber *testNumber = @123;

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {100, 200}"];

  if ([predicate evaluateWithObject:testNumber]) {

      NSLog(@"testString:%@", testNumber);

  else {

      NSLog(@"不符合条件");

  }

输出结果为:

1

2016-01-07 11:20:39.921 PredicteDemo[4366:85408] testString:123

2.逻辑运算符

  • AND、&&:逻辑与,要求两个表达式的值都为YES时,结果才为YES。

1

2

3

4

NSArray *testArray = @[@1, @2, @3, @4, @5, @6];

  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF > 2 && SELF < 5"];

  NSArray *filterArray = [testArray filteredArrayUsingPredicate:predicate];

  NSLog(@"filterArray:%@", filterArray);

输出结果为:

1

2

3

4

2016-01-07 11:27:01.885 PredicteDemo[4531:89537] filterArray:(

  3,

  4

)

  • OR、||:逻辑或,要求其中一个表达式为YES时,结果就是YES
  • NOT、 !:逻辑非,对原有的表达式取反

3.字符串比较运算符

  • BEGINSWITH:检查某个字符串是否以指定的字符串开头(如判断字符串是否以a开头:BEGINSWITH 'a')
  • ENDSWITH:检查某个字符串是否以指定的字符串结尾
  • CONTAINS:检查某个字符串是否包含指定的字符串
  • LIKE:检查某个字符串是否匹配指定的字符串模板。其之后可以跟?代表一个字符和*代表任意多个字符两个通配符。比如"name LIKE '*ac*'",这表示name的值中包含ac则返回YES;"name LIKE '?ac*'",表示name的第2、3个字符为ac时返回YES。
  • MATCHES:检查某个字符串是否匹配指定的正则表达式。虽然正则表达式的执行效率是最低的,但其功能是最强大的,也是我们最常用的。

注:字符串比较都是区分大小写和重音符号的。如:café和cafe是不一样的,Cafe和cafe也是不一样的。如果希望字符串比较运算不区分大小写和重音符号,请在这些运算符后使用[c],[d]选项。其中[c]是不区分大小写,[d]是不区分重音符号,其写在字符串比较运算符之后,比如:name LIKE[cd] 'cafe',那么不论name是cafe、Cafe还是café上面的表达式都会返回YES。

4.集合运算符

  • ANY、SOME:集合中任意一个元素满足条件,就返回YES。
  • ALL:集合中所有元素都满足条件,才返回YES。
  • NONE:集合中没有任何元素满足条件就返回YES。如:NONE person.age < 18,表示person集合中所有元素的age>=18时,才返回YES。
  • IN:等价于SQL语句中的IN运算符,只有当左边表达式或值出现在右边的集合中才会返回YES。我们通过一个例子来看一下

1

2

3

4

NSArray *filterArray = @[@"ab", @"abc"];

  NSArray *array = @[@"a", @"ab", @"abc", @"abcd"];

  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)", filterArray];

  NSLog(@"%@", [array filteredArrayUsingPredicate:predicate]);

代码的作用是将array中和filterArray中相同的元素去除,输出为:

1

2

3

4

2016-01-07 13:17:43.669 PredicteDemo[6701:136206] (

  a,

  abcd

)

  • array[index]:返回array数组中index索引处的元素
  • array[FIRST]:返回array数组中第一个元素
  • array[LAST]:返回array数组中最后一个元素
  • array[SIZE]:返回array数组中元素的个数

5.直接量

在谓词表达式中可以使用如下直接量

  • FALSE、NO:代表逻辑假
  • TRUE、YES:代表逻辑真
  • NULL、NIL:代表空值
  • SELF:代表正在被判断的对象自身
  • "string"或'string':代表字符串
  • 数组:和c中的写法相同,如:{'one', 'two', 'three'}。
  • 数值:包括证书、小数和科学计数法表示的形式
  • 十六进制数:0x开头的数字
  • 八进制:0o开头的数字
  • 二进制:0b开头的数字

6.保留字

下列单词都是保留字(不论大小写)

AND、OR、IN、NOT、ALL、ANY、SOME、NONE、LIKE、CASEINSENSITIVE、CI、MATCHES、CONTAINS、BEGINSWITH、ENDSWITH、BETWEEN、NULL、NIL、SELF、TRUE、YES、FALSE、NO、FIRST、LAST、SIZE、ANYKEY、SUBQUERY、CAST、TRUEPREDICATE、FALSEPREDICATE

注:虽然大小写都可以,但是更推荐使用大写来表示这些保留字

二、谓词的用法

1.定义谓词

一般我们使用下列方法来定义一个谓词

1

NSPredicate *predicate = [NSPredicate predicateWithFormat:];

下面我们通过几个简单的例子来看看它该如何使用:

首先我们需要定义一个模型,因为示例中需要用到它

ZLPersonModel.h

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#import typedef NS_ENUM(NSInteger, ZLPersonSex) {

    ZLPersonSexMale = 0,

    ZLPersonSexFamale

};

 

@interface ZLPersonModel : NSObject

/** NSString 姓名 */

@property (nonatomic, copy) NSString *name;

/** NSUInteger 年龄 */

@property (nonatomic, assign) NSUInteger age;

/** ZLPersonSex 性别 */

@property (nonatomic, assign) ZLPersonSex sex;

 

+ (instancetype)personWithName:(NSString *)name age:(NSUInteger)age sex:(ZLPersonSex)sex;

 

@end

下面让我们进入正题

例一:(最简单的使用)

1

2

3

4

5

6

7

8

9

10

11

ZLPersonModel *sunnyzl = [ZLPersonModel personWithName:@"sunnyzl" age:29 sex:ZLPersonSexMale];

    ZLPersonModel *jack = [ZLPersonModel personWithName:@"jack" age:22 sex:ZLPersonSexMale];

    //  首先我们来看一些简单的使用

    //  1.判断姓名是否是以s开头的

    NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"name LIKE 's*'"];

    //  输出为:sunnyzl:1, jack:0

    NSLog(@"sunnyzl:%d, jack:%d", [pred1 evaluateWithObject:sunnyzl], [pred1 evaluateWithObject:jack]);

    //  2.判断年龄是否大于25

    NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"age > 25"];

    //  输出为:sunnyzl的年龄是否大于25:1, jack的年龄是否大于25:0

    NSLog(@"sunnyzl的年龄是否大于25:%d, jack的年龄是否大于25:%d", [pred2 evaluateWithObject:sunnyzl], [pred2 evaluateWithObject:jack]);

看到这里我们会发现evaluateWithObject:方法返回的是一个BOOL值,如果符合条件就返回YES,不符合就返回NO。而即使是最简单的使用也有一些大用处,比如以前我们写判断手机号码、邮编等等,像我就喜欢用John Engelhart大神的RegexKitLite,然而由于年代久远需要导入libicucore.dylib库(xcode7为libicucore.tbd)且由于是mrc又需要添加-fno-objc-arc,至此我们才能使用。然而使用谓词让我们可以用同样简洁的代码实现相同的功能

例二:判断手机号是否正确

1

2

3

4

5

6

 - (BOOL)checkPhoneNumber:(NSString *)phoneNumber

{

    NSString *regex = @"^[1][3-8]\\d{9}$";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    return [pred evaluateWithObject:phoneNumber];

}

看到这里是不是感觉好爽,感觉以前所有的正则都可以这么匹配,但是谓词匹配正则时也是有缺点的,下面通过一个例子来看一下这个致命的缺点

例三:谓词匹配正则的缺点

(本意:检测字符串中是否有特殊字符)

1

2

3

4

5

6

- (BOOL)checkSpecialCharacter:(NSString *)string

{

    NSString *regex = @"[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    return [pred evaluateWithObject:string];

}

我们想要的效果是字符串中有特殊字符时就返回YES,然而梦想是美好的,现实是残酷的

让我们看看这悲催的结局

1

2

3

4

NSString *testString = @"!";

NSLog(@"是否含有特殊字符:%d", [self checkSpecialCharacter:testString]);

//  当testString为一个特殊字符时,我们惊喜的发现输出为

//  是否含有特殊字符:1

看到这里我们心里猛然一喜,这tmd根本没问题嘛

让我们修改下testString的值

1

2

3

4

NSString *testString = @"!~";

NSLog(@"%d", [self checkSpecialCharacter:testString]);

//  我们会发现悲催的结局来了输出为

//  是否含有特殊字符:0

再次修改testString的值

1

2

3

4

NSString *testString = @"abc!~d";

NSLog(@"%d", [self checkSpecialCharacter:testString]);

//  我们会发现输出为

//  是否含有特殊字符:0

这总与我们的想法事与愿违,看到这里我们会发现谓词对正则并不像我们使用NSRegularExpression时匹配的那么好,究其原因是为什么呢?我们用NSRegularExpression时会发现匹配到一个结果时就会存入数组,再从匹配到的位置继续向下匹配。

然而NSPredicate并不会做这样的自动操作,我们最终发现在NSPredicate输入[`~!@#$^&*()=|{}':;',\[\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]正则表达式时和写成^[`~!@#$^&*()=|{}':;',\[\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]$的效果是一样的。

所以通过这个例子我们总结出来,只有在正则表达式为^表达式$时才使用谓词,而不是所有情况都使用。

那么我们是不是因为这一点就摒弃它了呢,答案是否定的。因为虽然NSPredicate有这么一点瑕疵,但是它总体带给我们的便利其实除了正则表达式匹配时的这个问题外是更多的。

2.使用谓词过滤集合

此部分是我们需要掌握的重点,因为从这里我们就可以看到谓词的真正的强大之处

其实谓词本身就代表了一个逻辑条件,计算谓词之后返回的结果永远为BOOL类型的值。而谓词最常用的功能就是对集合进行过滤。当程序使用谓词对集合元素进行过滤时,程序会自动遍历其元素,并根据集合元素来计算谓词的值,当这个集合中的元素计算谓词并返回YES时,这个元素才会被保留下来。请注意程序会自动遍历其元素,它会将自动遍历过之后返回为YES的值重新组合成一个集合返回。

其实类似于我们使用tableView设置索引时使用的下段代码

1

2

3

4

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

{

    return [self.cityGroup valueForKey:@"title"];

}

中的[self.cityGroup valueForKey:@"title"]。它的作用是遍历所有title并将得到的值组成新的数组。

  • NSArray提供了如下方法使用谓词来过滤集合

- (NSArray*)filteredArrayUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSArray集合,返回符合条件的元素组成的新集合

  • NSMutableArray提供了如下方法使用谓词来过滤集合

- (void)filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableArray,剔除集合中不符合条件的元素

  • NSSet提供了如下方法使用谓词来过滤集合

- (NSSet*)filteredSetUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSArray中的方法

  • NSMutableSet提供了如下方法使用谓词来过滤集合

- (void)filterUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSMutableArray中的方法。

通过上面的描述可以看出,使用谓词过滤不可变集合和可变集合的区别是:过滤不可变集合时,会返回符合条件的集合元素组成的新集合;过滤可变集合时,没有返回值,会直接剔除不符合条件的集合元素

下面让我们来看几个例子:

例一:

1

2

3

4

5

6

7

8

9

10

11

12

13

NSMutableArray *arrayM = [@[@20, @40, @50, @30, @60, @70] mutableCopy];

    //  过滤大于50的值

    NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF > 50"];

    [arrayM filterUsingPredicate:pred1];

    NSLog(@"arrayM:%@", arrayM);

    NSArray *array = @[[ZLPersonModel personWithName:@"Jack" age:20 sex:ZLPersonSexMale],

                       [ZLPersonModel personWithName:@"Rose" age:22 sex:ZLPersonSexFamale],

                       [ZLPersonModel personWithName:@"Jackson" age:30 sex:ZLPersonSexMale],

                       [ZLPersonModel personWithName:@"Johnson" age:35 sex:ZLPersonSexMale]];

    //  要求取出包含‘son’的元素

    NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"name CONTAINS 'son'"];

    NSArray *newArray = [array filteredArrayUsingPredicate:pred2];

    NSLog(@"%@", newArray);

输出为

1

2

3

4

5

6

7

8

2016-01-07 16:50:09.510 PredicteDemo[13660:293822] arrayM:(

    60,

    70

)

2016-01-07 16:50:09.511 PredicteDemo[13660:293822] (

    "[name = Jackson, age = 30, sex = 0]",

    "[name = Johnson, age = 35, sex = 0]"

)

从这个例子我们就可以看到NSPredicate有多么强大,如果让我们用其他的方法来实现又是一大堆if...else。

让我们来回顾一下上面的从第二个数组中去除第一个数组中相同的元素

例二:

1

2

3

4

NSArray *filterArray = @[@"ab", @"abc"];

    NSArray *array = @[@"a", @"ab", @"abc", @"abcd"];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)", filterArray];

    NSLog(@"%@", [array filteredArrayUsingPredicate:predicate]);

输出为:

1

2

3

4

2016-01-07 13:17:43.669 PredicteDemo[6701:136206] (

    a,

    abcd

)

如果我们不用NSPredicate的话,肯定又是各种if...else,for循环等等。可以看出NSPredicate的出现为我们节省了大量的时间和精力。

3.在谓词中使用占位符参数

我们上面所有的例子中谓词总是固定的,然而我们在现实中处理变量时决定了谓词应该是可变的。下面我们来看看如果让谓词变化起来。

首先如果我们想在谓词表达式中使用变量,那么我们需要了解下列两种占位符:

  • %K:用于动态传入属性名
  • %@:用于动态设置属性值

其实相当于变量名与变量值

除此之外,还可以在谓词表达式中使用动态改变的属性值,就像环境变量一样

1

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF CONTAINS $VALUE"];

上述表达式中,$VALUE是一个可以动态变化的值,它其实最后是在字典中的一个key,所以可以根据你的需要写不同的值,但是必须有$开头,随着程序改变$VALUE这个谓词表达式的比较条件就可以动态改变。

下面我们通过一个例子来看看这三个重要的占位符应该如何使用

例一:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

NSArray *array = @[[ZLPersonModel personWithName:@"Jack" age:20 sex:ZLPersonSexMale],

                     [ZLPersonModel personWithName:@"Rose" age:22 sex:ZLPersonSexFamale],

                     [ZLPersonModel personWithName:@"Jackson" age:30 sex:ZLPersonSexMale],

                     [ZLPersonModel personWithName:@"Johnson" age:35 sex:ZLPersonSexMale]];

  //  定义一个property来存放属性名,定义一个value来存放值

  NSString *property = @"name";

  NSString *value = @"Jack";

  //  该谓词的作用是如果元素中property属性含有值value时就取出放入新的数组内,这里是name包含Jack

  NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K CONTAINS %@", property, value];

  NSArray *newArray = [array filteredArrayUsingPredicate:pred];

  NSLog(@"newArray:%@", newArray);

   

  //  创建谓词,属性名改为age,要求这个age包含$VALUE字符串

  NSPredicate *predTemp = [NSPredicate predicateWithFormat:@"%K > $VALUE", @"age"];

  // 指定$SUBSTR的值为 25    这里注释中的$SUBSTR改为$VALUE

  NSPredicate *pred1 = [predTemp predicateWithSubstitutionVariables:@{@"VALUE" : @25}];

  NSArray *newArray1 = [array filteredArrayUsingPredicate:pred1];

  NSLog(@"newArray1:%@", newArray1);

   

  //  修改 $SUBSTR的值为32,  这里注释中的SUBSTR改为$VALUE

  NSPredicate *pred2 = [predTemp predicateWithSubstitutionVariables:@{@"VALUE" : @32}];

  NSArray *newArray2 = [array filteredArrayUsingPredicate:pred2];

  NSLog(@"newArray2:%@", newArray2);

输出为

1

2

3

4

5

6

7

8

9

10

11

2016-01-07 17:28:02.062 PredicteDemo[14542:309494] newArray:(

  "[name = Jack, age = 20, sex = 0]",

  "[name = Jackson, age = 30, sex = 0]"

)

2016-01-07 17:28:02.063 PredicteDemo[14542:309494] newArray1:(

  "[name = Jackson, age = 30, sex = 0]",

  "[name = Johnson, age = 35, sex = 0]"

)

2016-01-07 17:28:02.063 PredicteDemo[14542:309494] newArray2:(

  "[name = Johnson, age = 35, sex = 0]"

)

从上例中我们主要可以看出来%K和$VALUE的含义。

那么至此NSPredicate就到到此介绍完毕。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 致谢 引言 第1章 T-SQL查询和编程基础  1.1 理论背景  1.2 SQL SERVER体系结构  1.3 创建表和定义数据完整性  1.4 总结 第2章 单表查询  2.1 SELECT语句的元素  2.2 谓词和运算符  2.3 CASE表达式  2.4 NULL值  2.5 同时操作(ALL-AT-ONCE OPERATION)  2.6 处理字符数据  2.7 处理日期和时间数据  2.8 查询元数据  2.9 总结  2.10 练习  2.11 解决方案 第3章 联接查询  3.1 交叉联接  3.2 内联接  3.3 特殊的联接实例  3.4 外联接  3.5 总结  3.6 练习  3.7 解决方案 第4章 子查询  4.1 独立子查询  4.2 相关子查询  4.3 高级子查询  4.4 总结  4.5 练习  4.6 解决方案 第5章 表表达式  5.1 派生表  5.2 公用表表达式(CTE)  5.3 视图  5.4 内联表值函数  5.5 APPLY运算符  5.6 总结  5.7 练习  5.8 解决方案 第6章 集合运算  6.1 UNION(并集)集合运算  6.2 INTERSECT(交集)集合运算  6.3 EXCEPT(差集)集合运算  6.4 集合运算的优先级  6.5 避开不支持的逻辑查询处理  6.6 总结  6.7 练习  6.8 解决方案 第7章 透视、逆透视及分组集    7.1 透视转换  7.2 逆透视转换  7.3 分组集  7.4 总结  7.5 练习  7.6 解决方案 第8章 数据修改  8.1 插入数据  8.2 删除数据  8.3 更新数据  8.4 合并数据  8.5 通过表表达式修改数据  8.6 带有TOP选项的数据更新  8.7 OUTPUT子句  8.8 总结  8.9 练习  8.10 解决方案 第9章 事务和并发  9.1 事务  9.2 锁定和阻塞  9.3 隔离级别  9.4 死锁  9.5 总结  9.6 练习 第10章 可编程对象  10.1 变量  10.2 批处理  10.3 流程控制元素  10.4 游标  10.5 临时表  10.6 动态SQL  10.7 例程  10.8 错误处理  10.9 总结
目录 第 1 章 结构化查询语言 DM_SQL 简介 ....................................................................1 1.1 DM_SQL 语言的特点 .....................................................................................................1 1.2 保留字与标识符 ............................................................................................................2 1.3 DM_SQL 语言的功能及语句 .........................................................................................2 1.4 DM_SQL 所支持的数据类型 .........................................................................................3 1.4.1 常规数据类型 ....................................................................................................3 1.4.2 位串数据类型 ....................................................................................................5 1.4.3 日期时间数据类型 ............................................................................................6 1.4.4 多媒体数据类型 ..............................................................................................10 1.5 DM_SQL 语言支持的表达式 .......................................................................................10 1.5.1 数值表达式 ......................................................................................................11 1.5.2 字符串表达式 ..................................................................................................13 1.5.3 时间值表达式 ..................................................................................................13 1.5.4 时间间隔值表达式 ..........................................................................................15 1.5.5 运算符的优先级 ..............................................................................................16 1.6 DM_SQL 语言支持的数据库模式 ...............................................................................17 第 2 章 手册中的示例说明 ......................................................................................18 2.1 示例库说明 ..................................................................................................................18 2.2 参考脚本 ......................................................................................................................26 2.2.1 创建示例库 ......................................................................................................26 2.2.2 创建模式及表 ..................................................................................................26 2.2.3 插入数据 ..........................................................................................................33 第 3 章 数据定义语句 ..............................................................................................50 3.1 数据库修改语句 ..........................................................................................................50 3.2 管理用户 ......................................................................................................................53 3.2.1 用户定义语句 ..................................................................................................53 3.2.2 修改用户语句 ..................................................................................................59 3.2.3 用户删除语句 ..................................................................................................62 3.3 管理模式 ......................................................................................................................63 3.3.1 模式定义语句 ..................................................................................................63 3.3.2 设置当前模式语句 ..........................................................................................65 3.3.3 模式删除语句 ..................................................................................................65 3.4 管理表空间 ..................................................................................................................66 3.4.1 表空间定义语句 ..............................................................................................66 3.4.2 修改表空间语句 ..............................................................................................67 3.4.3 表空间删除语句 ..............................................................................................69 3.4.4 表空间失效文件检查 ......................................................................................70 3.4.5 表空间失效文件恢复准备 ..............................................................................70 I 目录 3.4.6 表空间失效文件恢复 ......................................................................................70 3.5 管理 HTS 表空间 .........................................................................................................71 3.5.1 创建 HTS 表空间 .............................................................................................71 3.5.2 修改 HTS 表空间 .............................................................................................71 3.5.3 删除 HTS 表空间 .............................................................................................72 3.6 管理表 ..........................................................................................................................72 3.6.1 表定义语句 ......................................................................................................72 3.6.2 表修改语句 ....................................................................................................115 3.6.3 基表删除语句 .............................................................................................133 3.6.4 基表数据删除语句 ........................................................................................134 3.6.5 事务型 HUGE 表数据重整 ............................................................................134 3.7 管理索引 ....................................................................................................................135 3.7.1 索引定义语句 ................................................................................................135 3.7.2 索引修改语句 ................................................................................................140 3.7.3 索引删除语句 ................................................................................................142 3.8 管理位图连接索引 .....................................................................................................143 3.8.1 位图连接索引定义语句 ................................................................................143 3.8.2 位图连接索引删除语句 ................................................................................145 3.9 管理全文索引 ............................................................................................................145 3.9.1 全文索引定义语句 ........................................................................................145 3.9.2 全文索引修改语句 ........................................................................................146 3.9.3 全文索引删除语句 ........................................................................................147 3.10 管理空间索引 ..........................................................................................................148 3.11 管理数组索引 ..........................................................................................................148 3.11.1 数组索引定义语句 .....................................................................................149 3.11.2 数组索引修改语句 .....................................................................................149 3.11.3 数组索引使用 .............................................................................................149 3.11.4 数组索引删除语句 .....................................................................................151 3.12 管理序列 ..................................................................................................................151 3.12.1 序列定义语句 .............................................................................................151 3.12.2 序列修改语句 .............................................................................................154 3.12.3 序列删除语句 .............................................................................................156 3.13 管理 SQL 域 .............................................................................................................156 3.13.1 创建 DOMAIN...............................................................................................156 3.13.2 使用 DOMAIN...............................................................................................157 3.13.3 删除 DOMAIN...............................................................................................158 3.14 管理上下文 ..............................................................................................................158 3.14.1 创建上下文 ..................................................................................................158 3.14.2 删除上下文 ..................................................................................................160 3.15 管理目录 ..................................................................................................................161 3.15.1 创建目录 ......................................................................................................161 3.15.2 删除目录 ......................................................................................................161 3.16 设置当前会话 ..........................................................................................................162 3.16.1 时区信息 ......................................................................................................162 II 目录 3.16.2 日期串语言 ..................................................................................................162 3.16.3 日期串格式 ..................................................................................................163 3.17 注释语句 ..................................................................................................................163 3.18 设置 INI 参数 .........................................................................................................164 3.18.1 设置参数值 ..................................................................................................164 3.18.2 设置仅对当前会话起作用 ..........................................................................165 3.19 修改系统语句 ..........................................................................................................166 3.20 设置列、索引生成统计信息 ..................................................................................166 第 4 章 数据查询语句 ............................................................................................168 4.1 单表查询 ....................................................................................................................179 4.1.1 简单查询 ........................................................................................................179 4.1.2 带条件查询 ....................................................................................................180 4.1.3 集函数 ............................................................................................................183 4.1.4 分析函数 ........................................................................................................188 4.1.5 情况表达式 ....................................................................................................205 4.2 连接查询 ....................................................................................................................209 4.2.1 交叉连接 ........................................................................................................209 4.2.2 自然连接(NATURAL JOIN)......................................................................210 4.2.3 JOIN … USING............................................................................................210 4.2.4 JOIN…ON .......................................................................................................211 4.2.5 自连接 ............................................................................................................211 4.2.6 内连接(INNER JOIN)................................................................................212 4.2.7 外连接(OUTER JOIN)................................................................................213 4.3 子查询 ........................................................................................................................217 4.3.1 标量子查询 ....................................................................................................217 4.3.2 表子查询 ........................................................................................................218 4.3.3 派生表子查询 ................................................................................................221 4.3.4 定量比较 ........................................................................................................221 4.3.5 带 EXISTS 谓词的子查询 ...........................................................................222 4.3.6 多列表子查询 ................................................................................................223 4.4 WITH 子句 ................................................................................................................224 4.4.1 WITH FUNCTION 子句 ...............................................................................224 4.4.2 公用表表达式子句 ........................................................................................225 4.5 合并查询结果 .............................................................................................................227 4.6 GROUP BY 和 HAVING 子句 ....................................................................................229 4.6.1 GROUP BY 子句的使用 ...............................................................................229 4.6.2 ROLLUP 的使用 ............................................................................................230 4.6.3 CUBE 的使用 .................................................................................................231 4.6.4 GROUPING 的使用 .......................................................................................233 4.6.5 GROUPING SETS 的使用 ...........................................................................234 4.6.6 GROUPING_ID 的使用 ................................................................................235 4.6.7 GROUP_ID 的使用 .......................................................................................236 4.6.8 HAVING 子句的使用 ....................................................................................237 III 目录 4.7 ORDER BY 子句 ........................................................................................................237 4.8 FOR UPDATE 子句 ...................................................................................................238 4.9 TOP 子句 ....................................................................................................................240 4.10 LIMIT 限定条件 .....................................................................................................241 4.10.1 LIMIT 子句 ................................................................................................241 4.10.2 ROW_LIMIT 子句 ......................................................................................242 4.11 全文检索 ..................................................................................................................243 4.12 层次查询子句 ..........................................................................................................245 4.12.1 层次查询子句 .............................................................................................245 4.12.2 层次查询相关伪列 .....................................................................................246 4.12.3 层次查询相关操作符 .................................................................................246 4.12.4 层次查询相关函数 .....................................................................................246 4.12.5 层次查询层内排序 .....................................................................................246 4.12.6 层次查询的限制 .........................................................................................247 4.13 并行查询 ..................................................................................................................251 4.14 ROWNUM ....................................................................................................................252 4.15 数组查询 ..................................................................................................................253 4.16 查看执行计划与执行跟踪统计 ..... 目录 第 7 章 物化视图 ....................................................................................................283 7.1 物化视图的定义 ....................................................................................................283 7.2 物化视图的修改 ....................................................................................................286 7.3 物化视图的删除 ....................................................................................................287 7.4 物化视图的更新 ....................................................................................................288 7.5 物化视图允许的操作 ...........................................................................................288 7.6 物化视图日志的定义 ...........................................................................................288 7.7 物化视图日志的删除 ...........................................................................................290 7.8 物化视图的限制 ....................................................................................................290 7.8.1 物化视图的一般限制 ....................................................................................290 7.8.2 物化视图的分类 ............................................................................................290 7.8.3 快速刷新通用约束 ........................................................................................291 7.8.4 物化视图信息查看 ........................................................................................291 第 8 章 函数 ............................................................................................................293 8.1 数值函数 ....................................................................................................................298 8.2 字符串函数 ................................................................................................................311 8.3 日期时间函数 ............................................................................................................332 8.4 空值判断函数 ............................................................................................................351 8.5 类型转换函数 ............................................................................................................352 8.6 杂类函数 ....................................................................................................................355 第 9 章 一致性和并发性 ........................................................................................358 9.1 DM 事务相关语句 ......................................................................................................358 9.1.1 事务的开始 ....................................................................................................358 9.1.2 事务的结束 ....................................................................................................358 9.1.3 保存点相关语句 ............................................................................................359 9.1.4 设置事务隔离级及读写特性 ........................................................................360 9.2 DM 手动上锁语句 ......................................................................................................361 第 10 章 外部函数 ..................................................................................................364 10.1 C 外部函数 ..............................................................................................................364 10.1.1 生成动态库 .................................................................................................364 10.1.2 C 外部函数创建 ..........................................................................................366 10.1.3 举例说明 .....................................................................................................367 10.2 JAVA 外部函数 .......................................................................................................369 10.2.1 生成 jar 包 ................................................................................................370 10.2.2 JAVA 外部函数创建 ..................................................................................370 10.2.3 举例说明 .....................................................................................................371 10.3 AP 使用说明 ............................................................................................................372 第 11 章 包 .............................................................................................................373 11.1 创建包 ......................................................................................................................373 V 目录 11.1.1 创建包规范 .................................................................................................373 11.1.2 创建包主体 .................................................................................................374 11.2 重编译包 ..................................................................................................................376 11.3 删除包 ......................................................................................................................376 11.3.1 删除包规范 .................................................................................................376 11.3.2 删除包主体 .................................................................................................377 11.4 应用实例 ..................................................................................................................377 第 12 章 类类型 ......................................................................................................381 12.1 普通 CLASS 类型 .....................................................................................................381 12.1.1 声明类 .........................................................................................................382 12.1.2 实现类 .........................................................................................................383 12.1.3 重编译类 .....................................................................................................385 12.1.4 删除类 .........................................................................................................386 12.1.5 类的使用 .....................................................................................................386 12.2 JAVA CLASS 类型 .................................................................................................388 12.2.1 定义 JAVA 类 ..............................................................................................389 12.2.2 重编译 JAVA 类 ..........................................................................................391 12.2.3 删除 JAVA 类 ..............................................................................................391 12.2.4 类的使用 .....................................................................................................391 第 13 章自定义类型 ................................................................................................393 13.1 创建类型 ..................................................................................................................393 13.2 创建类型体 ...............................................................................................................394 13.3 重编译类型 ...............................................................................................................395 13.4 删除类型 ...................................................................................................................395 13.4.1 删除类型 ......................................................................................................396 13.4.2 删除类型体 ..................................................................................................396 13.5 自定义类型的使用 ...................................................................................................396 13.5.1 使用规则 .....................................................................................................396 13.5.2 应用实例 .....................................................................................................396 第 14 章 触发器 ......................................................................................................398 14.1 触发器的定义 ..........................................................................................................398 14.1.1 表触发器 ......................................................................................................398 14.1.2 事件触发器 ..................................................................................................408 14.1.3 时间触发器 ..................................................................................................418 14.2 触发器替换 ..............................................................................................................419 14.3 设计触发器的原则 ...................................................................................................419 14.4 触发器的删除 ..........................................................................................................420 14.5 禁止和允许触发器 ..................................................................................................420 14.6 触发器的重编 ..........................................................................................................421 14.7 触发器应用举例 ......................................................................................................421 14.7.1 使用触发器实现审计功能 .........................................................................422 VI 目录 14.7.2 使用触发器维护数据完整性 ......................................................................422 14.7.3 使用触发器保障数据安全性 ......................................................................423 14.7.4 使用触发器生成字段默认值 ......................................................................424 第 15 章 同义词 ......................................................................................................426 15.1 创建同义词 ..............................................................................................................426 15.2 删除同义词 ..............................................................................................................427 第 16 章 外部链接 ..................................................................................................429 16.1 创建外部链接 ..........................................................................................................429 16.2 删除外部链接 ..........................................................................................................433 16.3 使用外部链接 ..........................................................................................................434 第 17 章 闪回查询 ..................................................................................................435 17.1 闪回查询子句 ..........................................................................................................435 17.2 闪回版本查询 ..........................................................................................................437 17.3 闪回事务查询 ..........................................................................................................439 第 18 章 JSON.........................................................................................................440 18.1 数据类型 ...................................................................................................................440 18.1.1 string......................................................................................................440 18.1.2 number......................................................................................................441 18.1.3 true、false...........................................................................................441 18.1.4 null...........................................................................................................443 18.1.5 object......................................................................................................444 18.1.6 array ........................................................................................................444 18.2 函数 ..........................................................................................................................444 18.2.1 json_value ............................................................................................444 18.2.2 json_query ............................................................................................445 18.2.3 函数参数详解 ...........................................................................................446 18.3 使用 IS JSON/IS NOT JSON 条件 ...................................................................448 18.4 视图 ...........................................................................................................................451 18.4.1 视图使用说明 ..............................................................................................451 18.4.2 DBA_JSON_COLUMNS................................................................................451 18.4.3 USER_JSON_COLUMNS .............................................................................452 18.4.4 ALL_JSON_COLUMNS................................................................................452 18.5 一个简单的例子 .......................................................................................................452 第 19 章 高级日志 ..................................................................................................455 19.1 简介 ..........................................................................................................................455 19.2 使用须知 ..................................................................................................................455 19.3 语法 ..........................................................................................................................455 19.3.1 管理日志辅助表 .........................................................................................455 19.3.2 使用日志辅助表的规则与约束 ..................................................................456 VII 目录 19.3.3 日志辅助表结构 .........................................................................................456 19.3.4 系统过程 .....................................................................................................457 19.4 使用高级日志同步数据的原则 ..............................................................................457 19.5 应用实例 ..................................................................................................................459 19.5.1 创建不带主键的源表 .................................................................................459 19.5.2 创建带主键的源表 .....................................................................................462 附录 1 关键字和保留字 .........................................................................................465 附录 2 SQL 语法描述说明 ....................................................................................469 附录 3 系统存储过程和函数 .................................................................................472 1) INI 参数管理 ..............................................................................................................472 2) 系统信息管理 ...............................................................................................................477 3) 备份恢复管理 ...............................................................................................................491 4) 定时器管理 ...................................................................................................................521 5) 数据复制管理 ...............................................................................................................524 6) 模式对象相关信息管理 ...............................................................................................533 7) 数据守护管理 ...............................................................................................................543 8) MPP 管理 ......................................................................................................................548 9) 日志与检查点管理 .......................................................................................................551 10) 数据库重演 ................................................................................................................552 11) 统计信息 ....................................................................................................................553 12) 资源监测 ....................................................................................................................560 13) 类型别名 ....................................................................................................................570 14) 杂类函数 ....................................................................................................................572 15) 编目函数调用的系统函数 .........................................................................................583 16) BFILE.........................................................................................................................593 17) HUGE 表备份还原 ......................................................................................................593 18) 定制会话级 INI 参数 ...............................................................................................595 19) 为 SQL 指定 HINT......................................................................................................597 20) 时区设置 ....................................................................................................................599

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值