收藏 分享(赏)

vf资料.doc

上传人:HR专家 文档编号:7519381 上传时间:2019-05-20 格式:DOC 页数:41 大小:95.50KB
下载 相关 举报
vf资料.doc_第1页
第1页 / 共41页
vf资料.doc_第2页
第2页 / 共41页
vf资料.doc_第3页
第3页 / 共41页
vf资料.doc_第4页
第4页 / 共41页
vf资料.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、第 4 章 SQL 关系数据库查询查询语言 85第 7章 SQL关系数据库查询语言7.1 SQL语言概述SQL是 Structured Query Language的缩写,意思为“结构化查询语言” ,它是关系数据库的标准语言。SQL 包含:(1)数据查询 SELECT(2)数据定义 CREATE、DROP、ALTER(3)数据修改 INSERT、UPDATE、DELETE(4)数据控制 GRANT、REVOKE其中数据查询是 SQL语言的重要组成部分。Visual FoxPro6.0在 SQL方面没有提供数据控制功能。例:1. SQL 语言的核心是()CA 数据操纵B 数据定义C 数据查询D

2、数据控制7.2 SQL的数据查询功能由 SELECT构成的数据查询语句是 SQL的核心语句。SELECT 语句86 可视化程序设计Visual FoxPro包括单表查询、多表连接查询、嵌套查询和集合查询等。7.2.1SQL语法格式SQL的查询命令也称作 SELECT命令,它的基本形式由 SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。【格式】SELECT ALL|DISTINCT TOP|PERCENT, AS FROM ,WHERE GROUP BY HAVING ORDER BY ASC|DESCINTO ARRAY |INTO CURSOR |INTO DBF|TA

3、BLE |TO FILE ADDITIVE|TO PRINTERPROMPT【说明】整个语句的含义是,根据 WHERE子句的条件表达式,从FROM子句指定的基本表或视图中查找出满足条件的记录,再按SELECT子句中的目标表达式选出记录中的字段值形成结果表。GROUP限定结果分组,ORDER 限定结果的排序。其中主要短语的含义如下:SELECT说明要查询的数据;第 4 章 SQL 关系数据库查询查询语言 87FROM说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询;WHERE说明查询条件,即选择元组的条件;GROUP BY短语用于对查询结果进行分组,可以利用它进行分组汇总;HAVI

4、NG短语必须跟随 GROUP BY使用,它用来限定分组必须满足的条件;ORDER BY短语用来对查询的结果进行排序。本章都是以“教学”数据库为例进行查询。7.2.2简单查询简单查询是对一个基本表做的简单查询,有以下几种情况:1查询全部或部分字段【例 7.1】 显示学生表中所有信息SELECT * FROM 学生说明:*表示输出显示所有的字段。查询结果的字段顺序可以和原表中的字段的顺序不一致。【例 7.2】 显示教师表中男教师的姓名、职称和部门信息。SELECT 姓名,职称, 部门 FROM 教师 WHERE 性别=“男“2查询结果可以是通过某一字段或几个字段计算得到的虚拟字88 可视化程序设计

5、Visual FoxPro段【例 7.3】 显示入学成绩表中学生的语、数、外的平均成绩。SELECT 学号,姓名,(语文数学外语)/3 AS 平均分 FROM 入学成绩AS 短语可以省略,AS 后面只是标识,不是字段。3去掉查询结果中的重复记录【例 7.4】 显示教师表中都有哪些部门。SELECT 部门 FROM 教师利用 DISTINCT去掉查询结果中的重复记录。SELECT DISTINCT 部门 FROM 教师例:05:8.查询“ 教师“ 表中“ 职称“ 为“ 教授“ 的教师信息,应该使用的命令是()DASELECT* FROM 教师 WHERE“ 教授“ $ ALLTRIM(职称)B.

6、SELECT* FROM教师 WHERE RIGHT(ALLTRIM(职称) ,4)=“教授“ CSELECT* FROM 教师 WHERE HEAD(ALLTRIM(职称) ,4)=“教授“ DSELECT* FROM 教师 WHERE LEFT(ALLTRIM(职称) ,4)=“ 教授“ 05: “教师“表教师(教工号 C (5),姓名 C (6),职称 C (6),出生日期 D,工资 N 第 4 章 SQL 关系数据库查询查询语言 89(10,2),系号 N(1)教工号 姓名 职称 出生日期 工资 系号10001张立中 副教授 07/01/70 2000.00 120002 王秋艳 教授

7、 02/05/63 3000.00 210003 刘星斌 讲师 07/01/78 1500.00 130004 张月新 讲师 07/23/75 1600.00 310005 李明玉 教授 12/01/69 2600.00 120006 孙民山 助教 07/03/82 1100.00 230007 刘芳菲 教授 09/01/60 2200.00 3写出下述 SQL语句的查询结果。SELECT姓名,职称 FROM教师 WHERE工资=2500王秋艳 教授李明玉 教授07:14.在 SQL查询中,使用 WHERE子句指出的是()DA.查询目标 B.查询结果C.查询视图 D.查询条件7.2.3联接查询

8、有一些查询同时涉及到两个或两个以上的表时,这种查询称之为90 可视化程序设计Visual FoxPro联接查询(也称为多表查询) 。在多表之间进行查询时,必须处理表与表之间的联接关系,具体按照哪一个关键字进行联接。1简单联接查询【例 7.5】 显示学生的学号、姓名、课程名和成绩的信息。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号在该查询中学号、姓名是学生表的字段,课程名是课程表的字段,成绩是选课表的字段。FROM 后面是这三个表名,WHERE 后面是表之间联接的条件,当不同表中含有相同的字段名时

9、(如学号和课程号字段),必须指明是哪个表的字段。2超联接查询以上的联接只是按照联接条件两个表进行联接,那么不符合联接条件的记录也要查询出来,就要利用超联接查询,超联接分为内联接(也称为等值联接) 、左联接、右联接和全联接。其语法结构如下:【格式】SELECTFROM INNER|LEFT|RIGHT|FULL JOIN ON WHERE【说明】INNER JOIN 或 JOIN为内联接,也称为等值联接,按照联接条件进行联接,不满足条件的记录不会出现在查询结果中,是常用的一种联接形式。LEFT JOIN 为左联接,除按照联接条件进行联接外,第一个表不第 4 章 SQL 关系数据库查询查询语言 9

10、1满足条件的记录也会出现在查询结果中。RIGHT JOIN 为右联接,除按照联接条件进行联接外,第二个表不满足条件的记录也会出现在查询结果中。FULL JOIN 为全联接,除按照联接条件进行联接外,两个表中不满足条件的记录也会出现在查询结果中。ON 指明联接条件,而不能在 WHERE后面给出联接条件。下面举例来比较这四种联接方式的不同,我们以简单联接查询的【例 7.6】为例分别以四种联接方式进行查询,比较查询结果的不同之处。查询学生的学号、姓名、课程名和成绩的信息。【例 7.6】 内联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM( 学生 JOIN 选课 ON 学生.学号=选课.

11、学号) JOIN 课程 ON 选课.课程号=课程.课程号等价于另一种内联接查询方式。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生 JOIN 选课 JOIN 课程 ON 选课.课程号=课程.课程号 ON 学生.学号=选课.学号注意:多个表用“JOIN”语句联接的顺序要与联接条件“ON”的顺序恰好相反。内联接查询等价于简单联接查询。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号92 可视化程序设计Visual FoxPro【例 7.7】 左联接查询SELECT 学生.学号,姓名,课程名

12、,成绩 FROM (学生 LEFT JOIN 选课 ON 学生.学号=选课.学号)LEFT JOIN 课程 ON 选课.课程号=课程.课程号因为是左联接查询,其中学生表中有四个学生记录没有选课,不符合联接条件,同样也被查询出来,该学生没有选课,因此相应的课程名和成绩为空。【例 7.8】 右联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 RIGHT JOIN 选课 ON 学生.学号=选课.学号)RIGHT JOIN 课程 ON 选课.课程号=课程.课程号因为是右联接查询,其中课程表中有的课程记录没有被学生所选,不符合联接条件,同样也被查询出来,该课程没有被学生所选,因此相

13、应的学号和姓名为空。【例 7.9】 全联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 full JOIN 选课 ON 学生.学号=选课.学号)full JOIN 课程 ON 选课.课程号=课程.课程号全联接查询的结果是左联接查询和右联接查询结果的并集。例:第 4 章 SQL 关系数据库查询查询语言 932.SQL语句中,SELECT 命令中的 JOIN是用来建立表间的联系短语,联接条件应出现在下列哪个短语中()BA. WHEREB. ONC. HAVINGD. INNER7.2.4嵌套查询在 SQL语言中,可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。如果

14、把 SELECT-FROM-WHERE语句称为一个查询块,那么嵌套查询就是指将一个查询块嵌套在另一个查询块 WHERE子句或HAVING短语条件中的一种查询方式。1带有比较运算的子查询当子查询的返回结果是个单列时,可以使用、=、!=等或使用带有谓词 ANY、SOME、ALL 的比较运算符进行查询。【例 7.10】 查询教师表中与李明同一职称的姓名和职称。SELECT 姓名,职称 FROM 教师 WHERE 职称=(SELECT 职称 FROM 教师 WHERE 姓名=“李明“)注意:在使用、=、!=等比较运算符不带有谓词ANY、SOME、ALL 时,子查询的查询结果一定就是一条记录的一个字段9

15、4 可视化程序设计Visual FoxPro(即一个数值) ,当查询结果是多条记录或多个字段时将无法进行比较运算。【例 7.11】 查询每一门课程成绩都大于等于学号为“080102”的所有科成绩的学生学号(这里并不是每一门课程对应比较) 。SELECT 学号 FROM 选课 WHERE 成绩=ALL (SELECT 成绩 FROM 选课 WHERE 学号=“ 080102“)2其它运算的子查询子查询中使用最多的是谓词 IN,EXISTS 和 NOT IN,NOT EXISTS,含义为当查询的指定字段值包含(或不包含)在子查询结果字段值表中时条件为真。【例 7.12】 查询选课程号是 1001课

16、的学生的学号和姓名。select 学号,姓名 from 学生 where 学号 in (select 学号 from 选课 where 课程号=“1001“)【例 7.13】 查询没有选修任何一门课的学生信息。SELECT * FROM 学生 WHERE NOT EXISTS (SELECT * FROM 选课 WHERE 学号=学生.学号)注意:NOT EXISTS即不是比较,也不是运算,只是判断子查询中是否有查询结果,所以与其它嵌套查询不同,在谓词NOT EXISTS前没有相应的字段名。例:第 4 章 SQL 关系数据库查询查询语言 9506:5.根据“工资”表中的数据,以下 SQL语句中

17、执行结果相同的有( )ADEA. SELETE * FROM 工资 WHERE 部门号 IN(“21“,“22“) B. SELETE * FROM 工资 WHERE LEFT(部门号,1)=(SELECT 物理 FROM 成绩表)A. SOME B. EXITS96 可视化程序设计Visual FoxProC. ANYD. ALL5.当前目录下有 XUESH.dbf和 CHJI.dbf两个表文件,要求查找同时选修了课程号为“9801”和“9802”的学生姓名,下列 SQL语句的空白处应填入的语句为()ASELECT 姓名 FROM XUESH.CHJI;WHERE XUESH.学号=CHJL

18、.学号;AND 课程号=“9801”;AND 姓名 ;(SELECT 姓名 FROM XUESH,CHJI WHERE XUESH.学号=CHJI.学号;AND 课程号=”9802”)A. IN B. EXITSC. LIKED. ALL7.2.5 几个特殊的运算符当查询的值介于什么范围之内,可以使用NOT BETWEENAND。【例 7.14】 查询入学成绩在 550到 610之间的学生信息。第 4 章 SQL 关系数据库查询查询语言 97SELECT * FROM 学生 WHERE 入学成绩 BETWEEN 550 AND 610当查询是进行字符串匹配时,可以使用NOT LIKE。【例 7

19、.15】 查询所有姓李的学生信息。SELECT * FROM 学生 WHERE 姓名 LIKE “李%“在字符串匹配查询中可以使用通配符,%(百分号)表示任意长度的字符串,_(下划线)表示任意单个字符串。当涉及空值查询时,可以使用 IS NOT NULL。【例 7.16】 查询有哪些课程还没有选定老师来上课。SELECT * FROM 课程 WHERE 教师号 IS NULLNULL表示空,意思是还没有确定,与数值“0”不一样,0 表示一个确切的数。在判断空值时要使用“IS”语句,不确定就不能进行比较,因此不能使用比较运算符“=”来判断。例:6.有如下 SQL SELECT 语句:SELECT

20、 *FROM 工资表 WHERE 基本工资=1000下列语句与该语句等价的是()AA. SELECT * FROM 工资表 WHERE 基本工资 BETWEEN 1000 AND 3000B. SELECT * FROM 工资表 WHERE 基本工资 BETWEEN 3000 AND 98 可视化程序设计Visual FoxPro1000C. SELECT * FROM 工资表 WHERE 基本工资 FROM 1000 INTO 3000D. SELECT * FROM 工资表 WHERE 基本工资 FROM 3000 INTO 10007.查询“学生成绩”表中所有不是姓“李”的学生记录,其

21、SQL语句为:SELECT * FROM 学生成绩 WHERE 姓名 “李%” NOT LIKE8.检索尚未确定的供应商的订单号,正确的语句是()CA. SELECT * FROM 订购单 WHERE 供应商号 NULLB. SELECT * FROM 订购单 WHERE 供应商号 =NULLC. SELECT * FROM 订购单 WHERE 供应商号 IS NULLD. SELECT * FROM 订购单 WHERE 供应商号 IS NOT NULL7.2.6排序我们可以使用 ORDER BY语句按照一个或多个字段对查询结果进行升序(ASC)或降序(DESC)排列,默认为升序排列。对于空值

22、排序,升序时空值记录将最后显示,降序时将最先显示。ORDER BY语句只能对最终的查询结果进行排序,在子查询中不能使用。ORDER BY语句后不能接任何运算表达式,不能按某个表达式的运算结果进行排序。第 4 章 SQL 关系数据库查询查询语言 99使用 TOP PERCENT语句可以只显示排序之后的前几条记录或前百分之多少条记录。【例 7.17】 查询计算机专业的学生信息,查询结果按入学成绩降序排列。SELECT * FROM 学生 WHERE 专业=“计算机“ ORDER BY 入学成绩 DESC【例 7.18】 查询入学成绩前二名的学生信息。SELECT * TOP2FROM 学生 ORD

23、ER BY 入学成绩 DESC【例 7.19】 显示入学成绩由高到低的前百分之三十的学生信息。SELECT * TOP 30 PERCENT FROM 学生 ORDER BY 入学成绩 DESC注意: TOP 语句要与 ORDER BY语句同时使用才有效。例:05:10.在 Visual FoxPro的查询设计器中“排序“,选项卡对应的SQL短语是()BA. SET B.ORDER BY C. WHERE D. JOIN08: 11.按工资升序显示“人才”表中的人员“姓名”和“工资”的SQL语句是()AA. SELECT姓名,工资 FROM人才 ORDER BY工资 ASC100 可视化程序设

24、计Visual FoxProB. SELECT姓名,工资 FROM人才 ORDER BY工资 DESCC. SELECT姓名,工资 FROM人才 GROUP BY工资 ASCD. SELECT姓名,工资 FROM人才 GROUP BY工资 DESC9.下列对于 SQL的嵌套查询排序的描述中,说法正确的是()DA. 既能对外层查询排序,也能对内层查询排序B. 只能对外层查询排序,不能对内层查询排序C. 不能对外层查询排序,只能对内层查询排序D. 既不能对外层查询排序,也不能对内层查询排序10.在成绩表中要求按“物理”降序排列,并查询前两名学生的姓名,正确的语句是()DA. SELECT 姓名 T

25、OP 2 FROM 成绩表 WHERE 物理 DESCB. SELECT 姓名 TOP 2 FROM 成绩表 FOR 物理 DESCC. SELECT 姓名 TOP 2 FROM 成绩表 GROUP BY 物理 DESCD. SELECT 姓名 TOP 2 FROM 成绩表 ORDER BY 物理 DESC7.2.7计算查询与分组查询在查询过程中,可能会遇到一些简单的计算,下面我们介绍几个在查询中用到的计算函数。 COUNT()统计记录的个数。 COUNT(DISTINCT|ALL )统计一列中值的个数第 4 章 SQL 关系数据库查询查询语言 101 SUM(DISTINCT|ALL)计算某

26、一列值的总和(此列必须是数值型)。 AVG(DISTINCT|ALL)计算某一列值的平均值(此列必须是数值型)。 MAX(DISTINCT|ALL)计算某一列值的最大值。 MIN(DISTINCT|ALL)计算某一列值的最小值。如果指定 DISTINCT短语,则表示在计算时要取消指定列中的重复值。【例 7.20】 查询选修了课程的学生人数。SELECT COUNT(DISTINCT 学号) FROM 选课注意:一个学生可能选修了多门课程,所以要用 DISTINCT语句去掉重复的记录。【例 7.21】 查询学生的入学平均成绩。SELECTAVG(入学成绩) FROM 学生例:05:4.在 Vis

27、ual FoxPro中用 SQL语句进行查询时,用于统计数据表中记录个数的函数是()CA. AVG() B. MAX() C .COUNT()D. SUM()06:17. 查询应发工资最高的职工姓名和应发工资,正确的 SQL语句是( )C102 可视化程序设计Visual FoxProA. SELETE 姓名,AVG(应发工资) FROM 工资B. SELETE 姓名,MIN(应发工资) FROM 工资C. SELETE 姓名,MAX(应发工资) FROM 工资D. SELETE 姓名,最高应发工资 FROM 工资“职工”表职工(编号(C,3),姓名(C,8),性别(C,2),出生日期(D),

28、婚否(L),职务号(C,2),工资(N,7,2)编号姓名 性别 出生日期 婚否 职务号工资001 王云鹤男 01/05/1969 T 03 1276.00002 张晓云女 12/25/1974F04 980.00003 刘玉龙男 04/17/1955T 01 1580.00004 刘宗武男 10/18/1975F05 876.00005 孙大鹏男 06/15/1975T 05 850.00006 李莉女 12/12/1970T 02 1290.00“职务”表职务(职务号(C,2),职务名称(C,6)职务号 职务名称01 处长02 副处长03 科长第 4 章 SQL 关系数据库查询查询语言 10

29、304 秘书05 科员07:13.显示“职工”表中女职工的工资和,程序如下:SET TALK OFFCLEARSELECT_FROM 职工;WHERE 性别“女“RETURN13、Sum(工资)例:11.利用 SQL语句统计选修了“日语”课程的学生人数。请将下列的语句补充完整。SELECT FROM 选课表 WHERE 课程名= “日语”COUNT(*)上面的一些计算函数是对整个表中的记录进行计算,可以利用GROUP BY语句把记录分组分别进行计算。GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。同时还可以用 HAVING语句对分组的记录加以限定再计算,HAVING 语句

30、不能单独使用只能跟在 GROUP BY语句之后,在查询过程中与 WHERE语句并不矛盾,WHERE语句限定所有记录,HAVING 语句只限定分组。104 可视化程序设计Visual FoxPro【例 7.22】 查询选修了两门以上课程的学生平均成绩等信息。SELECT 学号,AVG(成绩) AS 平均成绩 FROM 选课 GROUP BY 课程号 HAVING COUNT(*)=2实际上在分组查询时,有时要求分组需要满足某个条件时才可以检索,这时可以用 HAVING子句来限定分组。注意:HAVING 子句和 WHERE子句的区别:WHERE 子句是用来指定表中各行所应满足的条件,用于基表或视图

31、,而 HAVING子句是用来指定每一分组所满足的条件,作用于组,只有满足 HAVING条件的那些组才能在结果中被显示。另外 HAVING子句总是跟在 GROUP BY子句之后,不可以单独使用。HAVING 子句和 WHERE子句不矛盾,在查询中是先用 WHERE子句限定元组,然后进行分组,最后再用 HAVING子句限定分组。例:07:12.“职工”表中求每种职务的平均工资的 SQL语句是()BA.SELECT 职务号,AVG(工资) FROM 职工 ORDER BY 职务号 B.SELECT 职务号,AVG(工资) FROM 职工 GROUP BY 职务号C.SELECT 职务号,AVG(工资

32、) FROM 职工 GROUP BY 工资D.SELECT 职务号,AVG(工资) FROM 职工 ORDER BY 工资例:12.在成绩表中,检索选修三门以上课程的学生及格学科的总成第 4 章 SQL 关系数据库查询查询语言 105绩。成绩表中包含学号、姓名、课程名和成绩 4个字段。将下列的SQL语句补充完整。HAVINGSELECT 学号,SUN(成绩) FROM 成绩表;WHERE 成绩=60GROUP BY 学号;COUNT (*)=37.2.8集合的并运算使用 UNION子句可以进行集合的并运算,即可以将两个 SELECT语句的查询结果合并成一个查询结果。但是要求进行并运算的两个查询

33、结果要具有相同的字段个数,并且对应字段的值要具有相同的数据类型和取值范围。【例 7.23】 查询教师表中助教和副教授的教师号、姓名、性别和职称。SELECT 教师号,姓名,性别,职称 FROM 教师 WHERE 职称=“助教“;UNIONSELECT 教师号,姓名,性别,职称 FROM 教师 ;WHERE 职称=“副教授“7.2.9查询去向1在查询窗口中显示查询结果使用 SELECT语句查询默认情况下,是将结果显示在查询窗口中。106 可视化程序设计Visual FoxPro本章上面的例子都是将查询结果查询窗口。2利用临时表文件存放查询结果使用 INTO CURSOR语句可以将查询结果存放在临

34、时表文件中,该表是一个只读的表文件,可以像一般的表文件一样在程序中使用,程序结束关闭文件时该表文件将自动删除。【例 7.24】 将学生表中入学成绩最高的三位学生信息存放到临时表 aab中。SELECT * TOP 3 FROM 学生 ORDER BY 入学成绩 DESCINTO CURSOR aab该语句执行完成之后,临时表将自动打开,并且是当前文件。可以通过浏览命令查看查询结果。在一些复杂的查询中,需要分步来完成,利用临时表文件存放每一步的查询结果,最终完成这个复杂的查询。3利用永久表文件存放查询结果使用 INTO DBFTABLE语句可以将查询结果存放在永久表文件中,该 SELECT语句执

35、行完查询之后,该表将以自由表保存并作为当前文件自动打开。【例 7.25】 将男学生的信息存放到永久表 abc中。SELECT * FROM 学生 WHERE 性别=“男“ INTO DBF abc4利用文本文件存放查询结果第 4 章 SQL 关系数据库查询查询语言 107使用 TO FILEADDITIVE语句可以将查询结果存放在文本文件中,如果使用 ADDITIVE语句,查询结果将追加到该文本文件尾部,否则将覆盖原有文件。【例 7.26】 将男学生的信息存放到文本文件 abc中。SELECT * FROM 学生 WHERE 性别=“男“ TO FILE abc5利用数组存放查询结果使用 IN

36、TO ARRAY语句将查询结果存放在变量数组中,如果查询结果是多列多条记录,将其自动存在二维数组中,数组的行列与记录的行列元素对应。在涉及到计算查询时,查询结果一般是一个数值,如平均值、最值等,可以将其存放到一维数组的第一元素中,然后在程序中再进行处理。【例 7.27】 计算学生表中有多少位男学生将其存放在变量 aa中。SELECT COUNT(*) FROM 学生 WHERE 性别=“男“ INTO ARRAY aa变量 aa中存放的是 5,在学生表中有 5位男学生。注意:变量 aa其实也是一个数组,但是数组 aa就一个数据元素aa(1,1),使用时可以省略下标,直接用变量 aa即可。【例

37、7.28】 将学生的信息存放到二维数组 ab中。SELECT * FROM 学生 INTO ARRAY ab二维数组 ab(1,1)存放着第一条记录的第一个字段的值“080101” 。108 可视化程序设计Visual FoxPro例:13.SQL查询语句中,要将结果输入到一个临时表中,应选择的字句是 ()CA. TO FILEB. INTO ARRARYC. INTO CURSORD. INTO TABLE14.检索学生表中“性别”为“男”的学生记录,将结果保存到文本文件 XB中,其 SQL语句为:TO FILESELECT *FROM 学生表 WHERE 性别=“男” XB7.3 SQL的

38、定义功能标准 SQL的数据定义功能非常广泛,在本节将主要介绍 Visual FoxPro6.0支持的表定义功能和视图定义功能。7.3.1创建表创建表命令:【格式】CREATE TABLE ( ( ,)第 4 章 SQL 关系数据库查询查询语言 109NULL|NOT NULL CHECK 域完整性约束条件 ERROR 出错信息DEFAULT 默认值 PRIMARY KEY,)【说明】创建一个只有字段没有记录的空数据表。【例 7.29】 建立仓库管理数据库,在此库中建立仓库数据库表 。CREATE DATABASE 仓库管理CREATE TABLE 仓库(仓库编号 C(4) PRIMARY KE

39、Y,楼名 C(12),面积 I CHECK(面积0) ERROR “面积应为非负“ DEFAULT 100)使用 FOREIGN KEYTAGREFERENCES 短语,将两个表进行永久性联接。CREATE TABLE仓库用户 (仓库编号 C(4),使用者 C(12),使用时间 C(10), FOREIGN KEY 仓库编号 TAG 仓库编号 REFERENCES 仓库) “FOREIGN KEY 仓库编号”是为“仓库用户”表建立普通索引,“TAG 仓库编号 REFERENCES仓库”是将仓库编号字段与“仓库”表进行永久性联接。注意:数据库或表建立完之后将自动打开,如果建立自由表,将不能使用

40、CHECK、ERROR、DEFAULT、PRIMARY KEY等命令进行约束条件的设置。例:110 可视化程序设计Visual FoxPro15.利用 SQL语句的定义功能,建立一个学生文件,其中为学号建立主索引,年龄的默认值为 18,语句格式为:PRIMARY KEY CREATE TABLE 学生(学号 C(5) 年龄 I DEFAULT 18)7.3.2删除表删除表命令:【格式】DROP TABLE 【说明】该命令将表从数据库中物理性的删除,在执行该命令时最好将数据库打开,再删除其中的表,否则表可以删除,但是表在数据库中的信息将不能删除,此后打开数据库之后将会出现错误。7.3.3表结构的

41、修改修改表结构命令【格式】ALTER TABLE ADD|ALTER|DROP|RENAME COLUMNSET|DROP CHECK域完整性约束条件 ERROR 出错信息SET|DROP DEFAULT 默认值 ADD DROP PRIMARY KEY【例 7.30】 向仓库表中添加一个“楼层”字段。ALTER TABLE 仓库 ADD楼层 I CHECK楼层0 ERROR “楼层应为非第 4 章 SQL 关系数据库查询查询语言 111负“ DEFAULT 100【例 7.31】 将仓库表中的仓库编号字段的宽度由 4改为 6ALTER TABLE仓库 ALTER仓库编号 C(6)【例 7.3

42、2】 修改仓库表中的面积字段的有效性规则。ALTER TABLE 仓库 ALTER面积 SET CHECK面积30 ERROR “面积应大于 30平方米“ ALTER 面积 SET DEFAULT 40【例 7.33】 修改仓库表中“面积”字段的名称为“使用面积” 。ALTER TABLE 仓库 RENAME COLUMN 面积 TO 使用面积【例 7.34】 删除仓库表中“使用面积”字段。ALTER TABLE 仓库 DROP COLUMN 使用面积例:16.为“仓库”表增加一个“面积”字段,类型为数值型,宽度是7,小数位数为 2,正确的命令是()CA. CREATE TABLE 仓库 AD

43、D 面积 N(7,2)B. CREATE TABLE 仓库 ALTER 面积 N(7,2)C. ALTER TABLE 仓库 ADD 面积 N(7,2)D. ALTER TABLE 仓库 ALTER 面积 N(7,2)7.3.4视图的定义112 可视化程序设计Visual FoxPro视图是一个虚拟的表,在存储介质中找不到相应的存储文件。视图类似 SELECT 语句的查询窗口,视图保存了这个查询窗口,保存了查询的数据是满足什么样的条件来自于哪几个表,真正的数据还是分别保存在各自的表中。由于视图是表中派生出来的,所以不存在修改结构的问题。视图最大的特点是,虽然不保存真正的数据,但是可以像一般的表

44、一样进行建立查询、表单、报表等。1.定义视图命令【格式】CREATE VIEW AS 【例 7.35】 建立学生的学号、姓名、课程名和入学成绩的视图CREATE VIEW 成绩表 AS SELECT 学生.学号,姓名,课程名,入学成绩 FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号2.删除视图命令【格式】DROP VIEW 例:17.删除视图 STUDENT 的命令是()DA. DELETE STUDENT VIEWB. DELETE STUDENTC.DROP STUDENT VIEW第 4 章 SQL 关系数据库查询查询语言 113D.D

45、ROP VIEW STUDENT7.4 SQL的数据操作功能SQL语言的操作功能是指对数据的操作功能,包括对数据库中表的数据的增加、删除和更新操作。7.4.1插入记录插入记录命令【格式】INSERT INTO (字段名 1,字段名 2, VALUES (数值 1,数值 2,)【例 7.36】 向上一节创建的仓库表中插入一条记录。INSERT INTO 仓库(仓库编号,楼名,面积,楼层) VALUES(“0001“,“基楼“,120,5)注意:当数据库中的表定义了主索引或候选索引后,只能用 SQL语言的插入(INSERT)命令,不能使用 VFP的插入命令(INSERT 或APPEND),因为 V

46、FP的插入命令是先插入一条空记录,然后再输入各字段的数值,设置了主索引或候选索引后的表不能插入空记录。在插入日期型数据时应使用严格日期格式。例:07:8.使用 SQL语句将一条新的记录插入职务表,正确的语句是:INSERT_ Into_职务(职务号,职务名称) VALUES (“06“,“114 可视化程序设计Visual FoxPro副科长“)例:18.若有如下 SQL语句:INSERT INTO 职工 VALUES(“WH4”,”E15”,”张清”,2800)则在命令窗口执行该命令后() 。DA. 向表中任意位置插入一条新消息B. 在当前记录之前,插入一条新语句C. 在当前记录之后,插入一条新语句D. 在表末尾新增一条记录7.4.2删除记录删除记录命令【格式】DELETE FROM WHERE 【例 7.37】 删除仓库表中仓库编号为 0002的记录。DELETE FROM仓库 WHERE 仓库编号=“0002“注意:如果没有 WHERE语句,那么将删除表中所有的记录。该命令只是逻辑删除表中的记录,如果是物理删除还需要再使用 PACK

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报