本章介绍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选项互斥。 |
参数:
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 |
=to(3).new(~:ID,~*~:A1) |
|
14 |
=A13.select(A13.A1==4) |
|
相关概念:
描述:
返回筛选后的原管道
语法:
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中每条记录计算表达式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(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中每条记录计算表达式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中每条记录计算表达式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() |
|