select()

阅读(1620) 标签: select,

本章介绍select()的多种用法。

A.select()

描述:

选出序列中符合条件的成员。

语法:

A.select( x )

 

A.select(x1:y1, x2:y2, ......xi:yi)

多个条件用&&组合查询时的简化写法,相当于A.select(x1== y1 && x2== y2 &&...... xi==yi).。多个条件组合时的@b选项,不需要写cmp()了,可以直接写成A.select@b(x1:y1, x2:y2, ......xi:yi)

备注:

针对序列A的每个成员计算表达式x,返回使表达式的值为真的成员组成的新序列。参数省略时返回所有成员。当序列中的列名与格名冲突时,表达式中引用列名时需要加上序列名称作为前缀。

选项:

@1

返回第一个成员

@z

从后往前查找

@b

A为有序序列时,使用二分法查询,如果A不是有序序列,则不能使用@b选项,否则会导致结果有误。

A.select(x1:y1, x2:y2, ......xi:yi)中使用@b选项,选出cmp(x,y)x值为0的成员,此处不需使用cmp()A.select@b(x1:y1, x2:y2, ......xi:yi) 即可。

@m

数据量大的复杂运算中并行计算提升性能,计算次序不确定,与@1bz选项互斥。

@t

A是序表且返回值为空,则返回一个保留数据结构的空序表

参数:

A

序列

x

布尔表达式,可为null,当使用@b选项时,x必须为数值型表达式

xi:yi

xi 为表达式,yi为比较值

返回值:

使得表达式x的结果为真的成员组成的新序列。

示例:

 

A

 

1

[2,5,4,3,2,1,4,1,3]

 

2

=A1.select(~>3)

[5,4,4]

3

=A1.select@1(~>3)

[5]

4

=A1.select@z(~>3)

[4,4,5]

5

=[1,2,3,4,5,6].select@b(~-4)

[4]

6

=demo.query("select * from EMPLOYEE order by EID")

 

7

=A6.select(EID==9)

 

8

=A6.select@b(EID-9)

使用@b表达式x需要转成数值

9

=A6.select(EID:9)

 

10

=A6.select@b(EID:9)

采用冒号的写法, @b的时候不需要改变

11

=A6.select()

省略参数,返回所有成员

12

=A6.select@m(EID==9)

数据量大时提升性能

13

=A6.select@t(EID==501)

返回一个保留数据结构的空序表

14

=to(3).new(~:ID,~*~:A1)

15

=A14.select(A14.A1==4)

相关概念:

A.pselect()

T.select()

描述:

选出序表/内表中符合条件的成员。

语法:

T.select( x )

 

备注:

针对序表/内表T的每个成员计算表达式x,返回符合过滤条件的成员组成的新序表/内表。参数省略时返回所有成员。

选项:

@i

复用T的索引,结果集次序可能会被打乱

参数:

T

序表/内表

x

过滤条件,可为null

返回值:

序表/内表

示例:

 

A

 

1

=demo.query("select * from DEPT").keys@i(DEPTID)

创建索引

2

=A1.select@i(FATHER:12)

复用A1创建的索引

 

ch.select()

描述:

返回筛选后的原管道

语法:

ch.select(x)

备注:

为管道附加筛选运算,返回原管道。针对管道ch中每条记录计算表达式x,返回使表达式x的值为真的原管道。参数省略时返回所有记录组成的原管道。

该函数为附加计算动作

参数:

ch

管道

x

布尔表达式

返回值:

原管道ch

示例:

 

A

 

1

=demo.query("select * from SALES")

 

2

=channel()

创建管道

3

=A2.select(ORDERID>100)

给管道附加ch.select()计算动作,筛选ORDERID>100的数据返回成原管道

4

=A2.fetch()

保留管道当前数据

5

=A1.push(A2)

将序列A1中的数据推送到管道

6

=A2.result()

获取管道计算结果

ch.select(x,ch’)

描述:

把管道中不满足条件的记录推送到另一个管道

语法:

ch.select(x,ch’)

备注:

针对管道ch中每条记录计算表达式x,把使表达式x的值为假的记录推送到管道ch’中。

参数:

ch

管道

x

布尔表达式

ch’

管道

返回值:

管道ch

示例:

 

A

 

1

=demo.cursor("select EID,NAME,SALARY from EMPLOYEE " )

 

2

=channel()

创建管道

3

=channel()

创建管道

4

=A1.push(A2)

将游标A1中的数据推送到管道A2

5

=A2.select(EID<5,A3)

将管道A2中不满足EID<5的数据推送到管道A3

6

=A2.fetch()

A2管道附加结果集函数ch.fetch(),保留管道当前数据

7

=A3.fetch()

A3管道附加结果集函数ch.fetch(),保留管道当前数据

8

=A1.skip()

 

9

=A2.result()

10

=A3.result()

cs.select()

描述:

返回筛选后的原游标

语法:

cs.select(x)

备注:

针对游标cs中每条记录计算表达式x,返回使表达式x的值为真的原游标。

参数x省略时返回所有记录组成的原游标。支持多路游标。

参数:

cs

游标

x

布尔表达式

返回值:

原游标cs

示例:

 

A

 

1

=demo.cursor("select * from SCORES")

 

2

=A1.select(STUDENTID>10)

筛选STUDENTID大于10的学生成绩信息

3

=A2.fetch()

cs.select(x,ch’)

描述:

把游标中不满足条件的记录推送到管道

语法:

cs.select(x,ch’)

备注:

针对游标cs中每条记录计算表达式x,把使表达式x的值为假的记录推送到管道ch’中。

参数:

cs

游标

x

布尔表达式

ch’

管道

返回值:

管道ch

示例:

 

A

 

1

=demo.cursor("select EID,NAME,SALARY from EMPLOYEE" )

 

2

=channel()

创建管道

3

=A1.select(EID<5,A2)

将不满足EID<5的数据推送到管道

4

=A2.fetch()

保留管道当前数据

5

=A1.fetch()

6

=A2.result()

获取管道计算结果

 

cs.select(x;f)

描述:

把游标中不满足条件的记录写入集文件

语法:

cs.select(x;f)

备注:

针对游标cs中每条记录计算表达式x,把使表达式x的值为假的记录写入集文件f中。

参数:

cs

游标

x

布尔表达式

f

集文件

返回值:

  原游标cs

示例:

 

A

 

1

=demo.cursor("select * from dept")

 

2

=file("dept.btx")

 

3

=A1.select(DEPTID<5;A2)

将不满足DEPTID <5的记录写入集文件dept.btx

4

=A3.fetch()