本章介绍select()的多种用法。
描述:
选出序列中符合条件的成员。
语法:
A.select( x ) |
|
A.select(x1:y1, x2:y2, ......xi:yi) |
多个条件用&&组合查询时的简化写法,相当于A.select(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是序表且返回值为空时,返回一个保留数据结构的空序表 |
@c |
从第一个成员往后取,取到第一个不满足条件的成员 |
@r |
从前往后查找第一个满足条件的成员,然后从这个成员一直取到最后 |
参数:
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(GENDER:"F",SALARY:7000) |
|
12 |
=A6.select() |
省略参数,返回所有成员 |
13 |
=A6.select@m(EID==9) |
数据量大时提升性能 |
14 |
=A6.select@t(EID==501) |
返回一个保留数据结构的空序表 |
15 |
=to(3).new(~:ID,~*~:A1) |
|
16 |
=A15.select(A15.A1==4) |
当列名与格名冲突时,表达式中引用列名需要加上序列名称作为前缀 |
17 |
[1,3,5,7,9,11,13] |
|
18 |
=A17.select@c(~<10) |
[1,3,5,7,9] ,从前往后取到第一个不符合条件的成员 |
19 |
=A17.select@zc(~>10) |
[13,11],从后往前取到第一个不符合条件的成员 |
20 |
=A17.select@r(~>10) |
[11,13] |
相关概念:
描述:
选出序表中符合条件的成员。
语法:
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创建的索引 |
描述:
选出虚表中符合条件的记录
语法:
T.select( x ) |
|
备注:
针对虚表T中每条记录计算表达式x,返回使表达式x的值为真的原虚表。参数x省略时返回所有记录组成的原虚表。
参数:
T |
虚表 |
x |
布尔表达式,过滤条件,可为null |
返回值:
虚表对象
示例:
|
A |
|
1 |
=create(file).record(["D:/file/pseudo/app.ctx"]) |
|
2 |
=pseudo(A1)
|
生成虚表对象 |
3 |
=A2.select(eid>7) |
筛选出eid>7的记录,返回虚表对象 |
4 |
=A2.select() |
返回所有记录组成的虚表 |
描述:
返回筛选后的原管道
语法:
ch.select(x)
备注:
针对管道ch中每条记录计算表达式x,返回使表达式x的值为真的原管道。参数省略时返回所有记录组成的原管道。
参数:
ch |
管道 |
x |
布尔表达式 |
返回值:
原管道ch
示例:
|
A |
|
1 |
=demo.cursor("select * from SALES") |
|
2 |
=channel() |
创建管道 |
3 |
=A2.select(ORDERID>100) |
给管道附加ch.select()计算动作,筛选ORDERID>100的数据返回成原管道 |
4 |
=A2.fetch() |
保留管道当前数据 |
5 |
=A1.push(A2) |
将游标A1中的数据推送到管道 |
6 |
=A1.fetch() |
|
7 |
=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 |
|
=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() |
|