4. 关键字 ALL 与 DISTINCT 的使用 请显示出表employee中所有员工的雇佣日期,但是日期相同者只要显示一次即可。本查询需求的解答有下列两种: *采用SQL命令的解答如下:
CLEAR ALL
SELECT DISTINCT hire_date;
FROM emloyee;
INTO CURSOR tmp *采用程序化命令的解答如下:
CLEAR ALL
USE employee
INDEX ON hire_date TAG Uhire_date UNIQUE
COPY TO tmp FIELDS hire_date 预设状况下,所有的数据记录都会被显示出来。但如果您不想显示重复的数据记录(亦即若有多笔相同的数据记录时,只要显示其中一笔),请加入关键字DISTINCT。不过请记得,每一道SELECT命令仅能拥有一个DISTINCT关键字。 但是大家必须注意,事实上当数据记录越多,SELECT…DISTINCT的速度就越底。这是因为它必须进行更多的比较,更惨的是,它无法利用既存的索引来比较。所以当数据记录非常多时,除非真的确定不要显示重复的列,否则请勿使用关键字DISTINCT。 即使如此,关键字DISTINCT在某些查询需求中确实能帮助使用者轻易取得所需的数据。比方说,您想要知道表employee记载了哪些部门的员工数据,只需执行下列的查询命令即可: SELECT DISTINCT depatrment FROM employee 5. 查询结果输出地 在预设状态下,SQL SELECT的查询结果会被输出至BROWSE视窗。但是面对众多程序设计师而言,他们可能更希望将查询结果输出至一储存处以便进行更进一步的处理。事实上,利用INTO参数便可将查询结果输出至一个数组(Array)、虚拟暂存表(Cusor)或是一个真实表(Table)中。 此外,您亦可利用TO参数将查询结果输出至一个ASCII文本文件、打印机或是直接输出于屏幕画面。但是,假如您同时使用INTO与TO参数,则TO参数将会被忽略。 INTO ARRAY ArrayName 于SQL SELECT命令叙述中加入INTO ARRAY ArrayName参数,表示将查询结果储存至ArrayName参数所指定的变量数组中。例如:
SELECT * FROM employee INTO ARRAY myary 表示将表employee中所有的数据纪录存入数组myary中。而且我们可以发现,用来存放查询结果的数组无须事先建立,因为SELECT命令会自动建立此数组。注意: 1. 如果SELECT命令叙述没有产生任何查询结果,亦即查询结果中的数据纪录数目是0,数据将不会自动被建立。因此如果后续的程序代码会进行数组读取动作的话,请务必先判断此数组是否存在。由于系统内存变量_TALLY会记载有多少笔数据记录出现在查询结果中,因此当您想在程序中去测知有多少笔数据记录符合查询的过滤条件,只要去读取_TALLY即可。由此可知,我们可以这样编写代码: 。。。 。。。 SELECT 。。。 INTO ARRAY storage IF _TALLY=0 &&表示数组没有被建立 WAIT WINDOW “没有任何符合查询过滤条件的数据记录” NOWAIT RETURN ELSE 。。。 <处理数组之程序代码> 。。。 ENDIF 2. 数组的大小是有限的。因此再将查询结果之如数组前,请确定查询结果的数组两的大小不会超过数组所能符合的极限。在Visual FoxPro中,一个数组最多能拥有65,000个元素。 INTO DBF | TABLE TAB | eNAME [DATABASE DatabaseName [NAME Long TAB | Ename ] ] 如果您希望将查询结果储存至TABLE参数所指定名称的表文件中,请于SQL SELECT 命令叙述中加入INTO DBF或INTO TABLE参数。 如果您所指定的表文件已经打开,Visual FoxPro会关闭此表文件并且不经警告便重新建立一个新的表文件(如果SAFETY 被设定成OFF——SET SAFETY OFF)。而且除非您自行指定后缀名,否则此表文件之后缀名为 .DBF。于SELECT被执行后,此表文件便努被打开并成为作用表。例如: SELECT name,address FROM employee INTO TABLE test