find()

阅读(2637) 标签: find,

本章介绍find()函数的多种用法。

A.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()计算,取最新的日期。

相关概念:

A.pfind()

T.find(k,…)

描述:

获取内表中指定主键所在的记录。

语法:

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)

 设置EIDNAME为内表键字段。

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.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()

打开维为EIDNAME的组表基表。

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.ctx2.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选项,查找多条记录,返回内容如下: