本章介绍find()函数的多种用法。
描述:
查找主键为k的成员。
语法:
A.find(k)
从排列/序表A中找到主键为k的成员,有索引表则使用索引表。A有时间键时,在基本键相同的记录中寻找时间键值不大于k值中最大者对应的记录,k中若未写时间键值则按now()计算,即取最新的。
参数:
A |
排列/序表。 |
k |
主键,主键多个时用序列表示。 |
选项:
@b |
二分法查找,要求A必须有序,否则会导致结果不正确,忽略索引表。 |
@k |
查找多条记录,当参数k是序列时被认为是键值序列,返回键值对应的A的成员;缺省返回查找第一个k的记录。 |
返回值:
记录
示例:
|
A |
|
1 |
=demo.query("select * from EMPLOYEE") |
|
2 |
=A1.keys(NAME,DEPT) |
|
3 |
=A1.find(["Alexis","Sales"]) |
键有多个,因此组成序列 。 |
4 |
=demo.query("select * from EMPLOYEE") |
该序表按照EID字段有序。 |
5 |
=A4.keys(EID) |
|
6 |
=A4.find@b(3) |
使用@b选项,二分法查找,提高运算速度。 |
7 |
=A4.find@k(2,15,69,220) |
使用@k选项,返回键值对应的成员。 |
8 |
=A4.find(2,15,69,220) |
不使用@k选项,仅返回第一个键值对应的成员。 |
9 |
=demo.query("select EID,NAME,STATE,HIREDATE from EMPLOYEE where GENDER='M'") |
|
10 |
=A9.keys@t(STATE,HIREDATE) |
设置基础键为STATE,时间键为HIREDATE。 |
11 |
=A9.find(["Florida",date("2006-03-12")]) |
在STATE为“Florida”的记录中寻找时间键值小于2006-03-12中的最大者对应的记录。 |
12 |
=A9.find("Florida") |
时间键值按now()计算,取最新的日期。 |
相关概念:
描述:
获取内表中指定主键所在的记录。
语法:
T.find(k,…)
备注:
从内表T中查找主键为k的记录,未建索引时用二分法查找。
参数:
T |
内表。 |
k |
主键,主键多个时用序列表示。 |
选项:
@k |
查找多条记录,返回成排列;缺省返回查找第一个k的记录。主键有多个时,参数k的写法为 [[k1,k2],[...],...]。 |
返回值:
记录/排列
|
A |
|
1 |
=demo.cursor("select EID,NAME,GENDER from employee where EID< 10") |
返回游标。 |
2 |
=A1.memory() |
返回内表:
|
3 |
=A2.keys(EID,NAME) |
设置EID,NAME为内表键字段。 |
4 |
=A2.find([8,"Megan"]) |
因为有多个主键,所以组成序列:
|
5 |
=A2.keys(EID,GENDER) |
设置EID,GENDER为内表键字段。 |
6 |
=A2.find@k([[8,"F"],[2,"F"]]) |
用@k选项,查询多条记录:
|
7 |
=A2.keys(EID) |
设置EID为内表键字段。 |
8 |
=A2.find(3) |
查询主键为3的记录:
|
描述:
根据键值查找实表/复组表中的记录。
语法:
T.find(k;x:C,..)
备注:
从实表/复组表T中查找主键值为k的记录,用C构成记录返回,C省略则返回所有字段,k可以只用前面维字段的键值,只要能确定唯一即可。
T有时间键时,在基本键相同的记录中寻找时间键值不大于k值中最大者对应的记录,k中若未写时间键值则按now()计算,即取最新的。
参数:
T |
实表/复组表。 |
k |
键值,多个键值时用序列表示,可用时间键。 |
x |
列名,缺省读取全部列。 |
C |
列别名,可省略。 |
选项:
@k |
查找多条记录,返回成排列;缺省返回查找第一个k的记录。主键字段有多个的情况下查找多条记录,参数k的写法为:[[k1,k2],[...],...]。 |
记录/排列
示例:
T为基表:
|
A |
|
1 |
=file("E:/find1.ctx") |
返回游标。 |
2 |
=A1.open() |
打开维为EID,NAME的组表基表。 |
3 |
=A2.find([8,"Megan"]) |
x省略返回所有列:
|
4 |
=A2.find([8,"Megan"];EID,SALARY) |
返回指定列:
|
5 |
=A2.find@k([[4,"Emily"], [8,"Megan"]];EID,SALARY) |
用@k选项,查询多条记录:
|
T为附表:
|
A |
|
1 |
=file("ctb.ctx").open() |
打开组表文件。 |
2 |
=A1.attach(table2) |
返回组表中名为table2的附表。 |
3 |
=A2.find(1,2) |
获取附表中主键为1,2的记录:
|
4 |
=A2.find@k([[1,2],[3,6]]) |
使用@k选项,查找多条记录:
|
T有时间键:
|
A |
|
1 |
=demo.cursor("select top 10 STATE,HIREDATE,EID,NAME from EMPLOYEE ").sortx(STATE,HIREDATE) |
|
2 |
=file("ef.ctx") |
|
3 |
=A2.create@yt(#STATE,#HIREDATE,EID,NAME) |
创建组表,STATE为基本键,HIREDATE为时间键。 |
4 |
=A3.append@i(A1) |
将A1游标中的数据追加到组表的基表中,此时组表基表内容如下:
|
5 |
=A4.find(["Texas",date("2006-03-12")]) |
在STATE为“Texas”的记录中寻找时间键值小于等于2006-09-12中的最大者对应的记录:
|
6 |
=A4.find("Texas") |
时间键值按now()计算,取最新的日期:
|
T为复组表:
|
A |
|
1 |
=connect("demo").cursor("select EID,NAME,GENDER from employee") |
返回游标。 |
2 |
=file("ef.ctx":[1,2]) |
文件组1.ef.ctx、2.ef.ctx。 |
3 |
=A2.create@y(#EID,NAME,GENDER;if(GENDER=="F",1,2)) |
创建复组表,EID为键,GENDER值为F的记录分到1.ef.ctx中,其余分到2.ef.ctx中。 |
4 |
=A3.append@ix(A1) |
将A1游标中的数据追加到复组表中。 |
5 |
=A4.find(3) |
获取复组表中主键值为3的记录,省略参数x,读取全部列,返回内容如下:
|
6 |
=A4.find(3;NAME) |
获取复组表中主键值为3的记录,只读取NAME列的值,返回内容如下:
|
7 |
=A4.find@k([3,6]) |
使用@k选项,查找多条记录,返回内容如下:
|