计算机国家二级SQL语言突击_第1页
计算机国家二级SQL语言突击_第2页
计算机国家二级SQL语言突击_第3页
计算机国家二级SQL语言突击_第4页
计算机国家二级SQL语言突击_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四部分SQL语言SQL是结构化查询语言Structured Query Language的缩写。SQL是关系数据库标准语言,也是学习和使用Visual FoxPro的基础。数据查询:SELECT数据操纵(表记录):INSERT,UPDATE,DELETE数据定义(表结构):CREATE,ALTER,DROP一、 数据查询基本查询格式:SELECT 内容 FROM 表名 查询部分字段。例1:从学生表查询姓名,出生日期,院系,入学成绩信息。 SELECT 姓名,出生日期,院系,入学成绩 FROM 学生注意:另外,在SELECT内容中可以有常量。 查询全部字段。例2:查询学生表中所有信息。 SEL

2、ECT * FROM 学生 取消重复记录。例3:查询选课表中有选课记录的学生的学号代码。SELECT DISTINCT 学号 FROM 选课 查询经过计算的表达式。SELECT内容中除了可以是字段名外,还可以用到运算符和函数,除了第三章的普通函数外,常用的统计函数如下: 表1 常用函数函数功能函数功能AVG(<字段名>)求字段下记录的平均值MAX(<字段名>)求字段下记录的最大值SUM(<字段名>)求字段下记录的和MIN(<字段名>)求字段下记录的最小值COUNT(*)求查询记录的个数例4:查询所有学生的姓名和年龄。SELECT 姓名,YEAR(

3、DATE()YEAR(出生日期)FROM 学生SELECT 姓名,YEAR(DATE()YEAR(出生日期)AS 年龄 FROM 学生例5:查询25岁以上的学生的姓名和年龄。SELECT 姓名,YEAR(DATE()YEAR(出生日期)AS 年龄 FROM 学生; WHERE YEAR(DATE()YEAR(出生日期)>=25注意:不能写成 WHERE 年龄>=25 (WHERE字句中不能用字段别名) 在WHERE子句中不允许出现统计函数(MAX( )、MIN( )、SUM( )、AVG( )、COUNT( )) 例6:查询所有学生的人数。 SELECT COUNT(*) AS 学

4、生人数 FROM 学生 例7:查询所有选课的学生的人数。SELECT COUNT(DISTINCT 学号) AS 选课人数 FROM 选课注意:不允许使用COUNT(DISTINCT *)条件查询格式:WHERE <条件表达式>表2 WHERE子句中的条件运算符运算符含义举例=、>、<、>=、<=、!=、<>比较大小数学>80NOT、AND、OR多重条件数学>=60 AND 数学<=70BETWEEN AND、 NOT BETWEEN AND确定范围数学 BETWEEN 60 AND 70IN、 NOT IN确定集合院系 IN

5、(“会计学院”,“计算机学院”)LIKE、 NOT LIKE字符匹配姓名 LIKE “李%”IS NULL、 IS NOT NULL空值查询成绩 IS NULL 比较大小查询例8:查询入学成绩在560分以上的学生信息。 SELECT * FROM 学生 WHERE 入学成绩>560例9:查询少数民族的学生信息。 SELECT * FROM 学生 WHERE 少数民族否 注意:条件“WHERE 少数民族否”等价于“WHERE 少数民族否=.T.” 多重条件查询例10:查询“会计学院”和“计算机学院”的学生信息。 SELECT * FROM 学生 WHERE 院系=“会计学院” OR 院系=

6、“计算机学院”例11:查询入学成绩在560分到600分之间的学生信息。SELECT * FROM 学生 WHERE 入学成绩>=560 AND 入学成绩<=600 确定范围查询(BETWEEN AND、 NOT BETWEEN AND)例12:查询入学成绩在560分到600分之间的学生信息。SELECT * FROM 学生 WHERE 入学成绩 BETWEEN 560 AND 600注意:例12等价于例11。例13:查询入学成绩不在在560分到600分之间的学生信息。SELECT * FROM 学生 WHERE 入学成绩 NOT BETWEEN 560 AND 600注意:例13等

7、价于下列语句:SELECT * FROM 学生 WHERE 入学成绩<560 OR 入学成绩>600 确定集合查询(IN、 NOT IN)利用IN操作可以查询字段值属于指定集合的纪录,利用NOT IN操作可以查询字段值不属于指定集合的纪录例14:查询云南、江苏、黑龙江三省的学生信息。SELECT * FROM 学生 WHERE 籍贯 IN(“云南”,“江苏”,“黑龙江”)注意:例14等价于下列语句:SELECT * FROM 学生 WHERE 籍贯=“云南”OR籍贯=“江苏”OR籍贯=“黑龙江”例15:查询不是东三省的学生信息。SELECT * FROM 学生 WHERE 籍贯 N

8、OT IN(“黑龙江”,“吉林”,“辽宁”) 字符匹配查询利用LIKE或NOT LIKE进行字符匹配查询。LIKE的一般格式:<字段名> LIKE <字符串常量>说明:字段类型必须为字符型。字符串常量中的字符可以包含“%”、“”两个特殊符号。“%”表示任意长度的字符串。“”表示任意一个字符。注意:一个汉字用一个字符“”表示。 例16:查询所有姓“李”的学生信息。SELECT * FROM 学生 WHERE 姓名 LIKE “李%”注意:例16等价于下列语句:WHERE 姓名=“李” (当前环境处于模糊比较状态)或 WHERE AT(“李”,姓名)=1或 WHERE LE

9、FT(姓名,2)=“李”空值查询 例17:查询所有入学成绩为空值的学生学号和课程号。SELECT 学号,课程号 FROM 选课 WHERE 入学成绩 IS NULL注意:查询空值时,不能写成“入学成绩=NULL”或“入学成绩!=NULL”。3分组统计查询格式:GROUP BY 分组字段 HAVING <限制条件表达式> 利用GROUP BY子句进行分组计算查询使用的非常广泛。可以按一列或多列分组,还可以用HAVING进一步限定分组的条件。 分组查询例18:分别查询统计男女生人数。SELECT 性别,COUNT(性别) FROM 学生 GROUP BY 性别注意:在查询内容中我们也应

10、该把分组字段加进来。例19:分别查询统计男女学生中少数民族学生的人数。SELECT 性别,COUNT(性别) FROM 学生 GROUP BY 性别 WHERE 少数民族否例20:查询选课表中每个学生选课的课程门数。 SELECT 学号,COUNT(*) AS 选课门数 FROM 选课 GROUP BY 学号 限定分组查询例21:查询选课表中至少选修了2门课程以上(包含2门)的学生选课的课程门数。SELECT 学号,COUNT(*)AS 选课门数 FROM 选课;GROUP BY 学号 HAVING COUNT(*)>=2或 HAVING 选课门数>=2注意:字段别名可以用在HAV

11、ING子句中。HAVING子句总是跟在GROUP BY子句之后,不可以单独使用。HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。4排序查询格式:ORDER BY 排序字段 ASC|DESC 单列排序例22:按入学成绩的降序查询学生表中所有学生的信息。 SELECT * FROM 学生 ORDER BY 入学成绩 DESC 多列排序例23:按男女生入学成绩的降序查询学生表中所有学生的信息。SELECT * FROM 学生 ORDER BY 性别 ASC,入学成绩 DESC例24:查询选课表中每个学生所选课程的平均分成绩

12、,按成绩的降序显示。SELECT 学号,AVG(成绩) AS 平均分 FROM 选课 GROUP BY 学号;ORDER BY 平均分 DESC或 ORDER BY 2 DESC (2代表查询内容中第2列 )注意:不能写成 AVG(成绩) DESC。 查询前面部分纪录需要注意的是TOP短语要与ORDERBY短语同时使用才有效。例25:查询学生表中入学成绩前三名的学生信息。 SELECT * TOP 3 FROM 学生 ORDER BY 入学成绩 DESC例26:查询学生表中入学成绩最高的前30%的学生信息。 SELECT * TOP 30 PERCENT FROM 学生 ORDER BY 入学

13、成绩 DESC5查询去向 查询结果存放到永久表中格式:INTO DBF|TABLE <表名>例27:查询学生表中入学成绩前三名的学生信息,将结果保存在表xscjdbf中。SELECT * TOP 3 FROM 学生 ORDER BY 入学成绩 DESC;INTO TABLE xscj例28:使用SELECT语句将学生表复制到表xsdbf中。SELECT * FROM 学生 INTO TABLE xs 查询结果存放到临时表中格式:INTO CURSOR <临时表文件名>该子句生成的表文件是一个临时的只读文件。当查询刚结束时,该临时表文件自动在工作区打开,可以像一般的表文件

14、一样使用(当然是只读的)。当关闭查询相关的的表文件时,该临时表文件自动删除。 查询结果存放到文本文件中格式:TO FILE <文本文件名> 查询结果存放到数组中格式:INTO ARRAY <数组名>例29:将课程表中的课程信息存放到数组a中SELECT * FROM 课程 INTO ARRAY A注意:一般将存放查询结果的数组作为二维数组来使用。6联接查询联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。注意:(1)在Visual FoxPro的SQL命令中分号是续行符号。(2)当FROM之后的多个关系中含有相同的属性名时,这时必须用关系前缀直接指明属性所属的

15、关系,如职工.仓库号,“.”前面是关系名,后面是属性名。 两个表的联接查询例30:查询所有学生的学号,姓名,及所选修的课程号,成绩。SELECT 学生.学号, 学生.姓名, 选课.课程号, 选课.成绩; FROM 学生管理!学生 INNER JOIN 学生管理!选课;ON 学生.学号 = 选课.学号注意:例30等价于下列语句:SELECT 学生.学号, 学生.姓名, 选课.课程号, 选课.成绩;FROM 学生管理!学生, 学生管理!选课;WHERE 学生.学号 = 选课.学号 多个表的联接查询例31:查询所有学生的学号,姓名,及所选修的课程号,课程名,成绩。SELECT 学生.学号, 学生.姓

16、名, 选课.课程号, 课程.课程名, 选课.成绩; FROM 学生管理!学生 INNER JOIN 学生管理!选课; INNER JOIN 学生管理!课程 ; ON 选课.课程号 = 课程.课程号; ON 学生.学号 = 选课.学号注意:三个表间的上述联接写法的格式。注意:例31等价于下列语句:SELECT 学生.学号, 学生.姓名, 选课.课程号, 课程.课程名, 选课.成绩; FROM 学生管理!, 学生管理!选课, 学生管理!课程;WHERE 选课.课程号 = 课程.课程号 AND 学生.学号 = 选课.学号自联接查询例32:查询同时选修了“01101”和“15104”这两门课的学生的学

17、号。 SELECT a学号 FROM 选课a,选课b;WHERE a学号b学号AND a课程号”01101” AND b课程号”15104”7嵌套查询例33:查询和“胡敏杰”同学是老乡的所有其他学生信息。SELECT * FROM 学生 WHERE 籍贯=(SELECT 籍贯 FROM 学生 WHERE 姓名="胡敏杰")例34:查询高于“云南”省所有学生的入学成绩的学生信息。SELECT * FROM 学生 WHERE 入学成绩>ALL;(SELECT 入学成绩 FROM 学生 WHERE 籍贯=”云南”)注意:例34等价于下列语句:SELECT * FROM 学生

18、 WHERE 入学成绩>;(SELECT MAX(入学成绩) FROM 学生 WHERE 籍贯=”云南”)例35:查询高于“云南”省任何一个学生的入学成绩的学生信息。SELECT * FROM 学生 WHERE 入学成绩>ANY;(SELECT 入学成绩 FROM 学生 WHERE 籍贯=”云南”)注意:例35等价于下列语句:SELECT * FROM 学生 WHERE 入学成绩>;(SELECT MIN(入学成绩) FROM 学生 WHERE 籍贯=”云南”)例36:查询所有“男”同学的选课信息。SELECT * FROM 选课 WHERE 学号 IN; (SELECT 学

19、号 FROM 学生 WHERE 性别=”男”)例37:查询所有没有选过课的学生信息。SELECT * FROM 学生 WHERE 学号 NOT IN;注意体会NOT EXISTS的书写格式,用心去体会。 (SELECT 学号 FROM 选课)注意:例37等价于下列语句:SELECT * FROM 学生 WHERE NOT EXISTS; (SELECT * FROM 选课 WHERE 选课.学号=学生.学号) (选课)可以省略 嵌套查询总结:1、嵌套查询就是内查询查出来的结果作为外查询的一个条件。、内查询和外查询之间常用的连接符号有关系运算符(>,=,<,>=等)、IN、NO

20、T IN、ALL、ANY、NOT EXISTS,注意他们的用法。二、 数据操纵1表记录的插入(INSERT)格式:INSERT INTO 表名(字段1,字段2,。) VALUES(值1,值2,。)例1:往选课表中插入一条选课记录(“190101”,“01101”,65)INSERT INTO 选课(学号,课程号,成绩) VALUES(“190101”,“01101”,65)例2:往选课表中再插入一条选课记录(“190101”,“01103”,),成绩暂时未知。INSERT INTO 选课(学号,课程号) VALUES(“190101”,“01101”)格式:INSERT INTO 表名 FRO

21、M ARRAY 数组名表记录的更新(UPDATE)格式:UPDATE 表名 SET 字段名1值1,字段名值一般使用WHERE子句指定条件,以更新满足条件的记录的字段值,并且一次可以更新多个字段;如果不使用WHERE子句,则更新全部记录。例:将学生表中所有云南省学生的入学成绩加上分。UPDATE 学生 SET 入学成绩=入学成绩+10 WHERE籍贯=“云南”例2:将学生表中所有云南省学生的入学成绩加上分,性别都改为“女”。UPDATE 学生 SET 入学成绩=入学成绩+10,性别=“女” WHERE籍贯=“云南”3表记录的删除(DELETE)格式:DELETE FROM 表名 WHERE 条件

22、例:逻辑删除学生表中所有云南省学生的信息。DELETE FROM 学生 WHERE 籍贯=“云南”注意:SQL语言中的DELETE命令同样是逻辑删除记录,如果要物理删除记录,则需继续使用PACK命令三、 数据定义1表结构的定义(CREATE)CREATE TABLE命令除了建立表的基本功能外,它还包括满足实体完整性的主关键字(主索引)PRIMARY KEY、定义域完整性的CHECK约束及出错提示信息ERROR、定义默认值的DEFAULT等关键词,另外还有描述表之间联系的FOREIGN KEY和REFERENCES关键词。注意:(1)用SQL CREATE命令新建的表自动在最低可用工作区打开,并

23、可以通过别名引用。新表的打开方式为独占方式(忽略SET EXCLUSIVE的当前设置);(2)如果建立自由表(当前没有打开的数据库或使用了FREE),则很多选项在命令中不能使用,如NAME、CHECK、DEFAULT、FOREIGN KEY、PRIMARY KEY和REFERENCES等。 定义一个基本的学生表。 CREATETABLEST(XH C(4) ,XM C(10),XB C(2),RXCJ I,CSRQ D) 定义一个基本的学生表,并给XH字段建立一个主索引标识XH。 CREATETABLEST(XH C(4) PRIMARY KEY,XM C(10),XB C(2),RXCJ I

24、,CSRQ D)注意:要用PRIMARY KEY建立主索引,在CREATE命令执行之前先打开一个数据库文件。PRIMARY KEY主索引类型UNIQUE 候选索引类型FOREIGN KEY普通索引类型 定义一个选课表XK,给其中XH字段建立一个普通索引标识XH,并和学生表ST建立关系。 CREATETABLEXK(XH C(4) ,KCH C(10),CJ N(5,1),FOREIGN KEY XH TAG XH REFERENCES ST) 定义一个数据库表,并同时给“性别”字段加上字段的规则有效性。CREATETABLE ST(XH C(4) ,XM C(10),XB C(2) CHECK

25、(性别$“男女”) ERROR“性别只能是男或女” DEFAULT “男”,RXCJ I,CSRQ D) 视图的定义格式:CREATE VIEW 视图名 AS SELECT语句CREATE VIEW myview;AS SELECT * FROM 学生 WHERE 性别=”男”注意:1、视图中的内容是通过SELECT语句从其他表或视图中抽取出来的。2、SELECT语句格式和前面讲述的用法一致。3、在执行CREATE VIEW语句定义视图之前,一定要把数据库打开(OPEN DATABASE命令),因为定义视图不会产生自己的视图文件,视图是存放在数据库中。 视图的删除格式:DROP VIEW 视图

26、名 DROP VIEW myview注意:删除视图之前,先打开数据库(OPEN DATABASE命令)2表结构的修改(ALTER) 增加新的字段,同时也可以给该字段增加字段的规则有效性、错误提示信息、默认值,用法和CREATE命令中的用法一致。例:给学生表增加一个“英语”字段。ALTER TABLE 学生 ADD 英语 N(3) CHECK 英语>=0 ERROR “英语成绩大于零”;DEFAULT 0例2:给学生表增加一个“奖学金”字段。ALTER TABLE 学生 ADD 奖学金 Y 修改已有字段的类型、宽度。例3:修改学生表中“英语”字段,改为N(5,1)。ALTER TABLE

27、学生 ALTER 英语 N(5,1)定义、修改、删除已有字段的规则有效性、错误提示信息、默认值。例4:定义(修改)学生表中“奖学金”字段的规则有效性、错误提示信息、默认值。ALTER TABLE 学生;ALTER 奖学金 SETDEFAULT 10 SET CHECK(奖学金>=0) ERROR “奖学金>=0”注意:如果有默认值的话SET DEFAULT一定要放在SET CHECK语句的前面。例5:删除学生表中“奖学金”字段的规则有效性、错误提示信息。ALTER TABLE 学生 ALTER 奖学金 DROP CHECK例6:删除学生表中“奖学金”字段的默认值。ALTER TAB

28、LE 学生 ALTER 奖学金 DROP DEFAULT删除字段。例7:删除学生表中的“英语”字段。ALTER TABLE 学生 DROP COLUMN 英语给字段改名。例8:将学生表中的“奖学金”字段改为“助学金”。ALTER TABLE 学生 RENAME COLUMN 奖学金 TO 助学金给已有字段增加主索引(PRIMARY KEY)和候选索引(UNIQUE)。例9:将选课表中的“学号”字段和“课程号”定义为候选索引(候选关键字)。ALTER TABLE 选课 ADD UNIQUE 学号+课程号 TAG XHKCH删除已有字段的主索引(PRIMARY KEY)和候选索引(UNIQUE)。

29、例10:删除选课表中的候选索引标识XHKCH。 ALTER TABLE 选课 DROP UNIQUETAG XHKCH3表结构的删除(DROP) DROP TABLE 表名注意:1、DROP TABLE直接从磁盘上删除表文件。2、如果删除的是数据库表,在执行DROP TABLE命令之前一定要把数据库打开,这样才能既把表文件删除了同时又把该表文件在数据库中的链接信息删掉。2004年9月全国计算机等级考试二级笔试试卷一、选择题(1)(13)题使用的数据表如下:当前盘当前目录下有数据库:学院.dbc,其中有“教师”表和“学院”表。“教师”表:职工号系号姓名工资主讲课程1102000101肖海3408

30、数据结构1102000202王岩盐4390数据结构1102000301刘星魂2450C语言1102000403张月新3200操作系统1102000501李明玉4520数据结构1102000602孙民山2976操作系统1102000703钱无名2987数据库1102000804呼延军3220编译原理1102000903王小龙3980数据结构1102001001张国梁2400C语言1102001104林新月1800操作系统1102001201乔小廷5400网络技术1102001302周兴池3670数据库1102001404欧阳秀3345编译原理“学院”表:系号系名01计算机02通信03信息管理04

31、数学(1) 为“学院”表增加一个字段“教师人数”的SQL语句是A) CHANGE TABLE 学院 ADD 教师人数 IB) ALTER STRU 学院 ADD 教师人数 IC) ALTER TABLE 学院 ADD 教师人数 ID) CHANGE TABLE 学院 INSERT 教师人数 I(2) 将“欧阳秀”的工资增加200元SQL语句是A) REPLACE教师WITH 工资=工资+200 WHERE 姓名=“欧阳秀”B) UPDATE 教师 SET 工资=工资+200 WHEN 姓名=“欧阳秀”C) UPDATE 教师工资 WITH 工资+200 WHERE姓名=“欧阳秀”D) UPDA

32、TE 教师SET 工资=工资+200 WHERE姓名=“欧阳秀”(3) 下列程序段的输出结果是CLOSE DATAa=0USE教师GO TOPDO WHILE .NOT. EOF()IF主讲课程"数据结构".OR.主讲课程"C语言"a=a+1ENDIFSKIPENDDO?aA) 4 B) 5 C) 6 D) 7(4) 有SQL语句:(5) SELECT * FROM教师WHERE NOT(工资>3000 OR 工资<2000)(6) 与如上语句等价的SQL语句是A) SELECT * FROM 教师 WHERE 工资 BETWEEN 2000

33、 AND 3000B) SELECT * FROM 教师 WHERE 工资>2000 AND 工资<3000C) SELECT * FROM 教师 WHERE 工资>2000 OR 工资<3000D) SELECT * FROM 教师 WHERE 工资<=2000 AND 工资>=3000(7) 为“教师”表的职工号字段添加有效性规则:职工号的最左边三位字符是110,正确的SQL语句是A) CHANGE TABLE 教师 ALTER 职工号 SET CHECK LEFT(职工号,3)="110"B) ALTERTABLE 教师 ALTER

34、职工号SET CHECK LEFT(职工号,3)="110"C) ALTER TABLE 教师 ALTER职工号CHECK LEFT(职工号,3)="110"D) CHANGE TABLE 教师 ALTER职工号SET CHECK OCCURS(职工号,3)="110"(8) 有SQL语句SELECT DISTINCT 系号 FROM 教师 WHERE工资>=;ALL(SELECT 工资 FROM 教师 WHERE系号"02")该语句的执行结果是系号A) "01"和"02&quo

35、t; B) "01"和"03" C) "01"和"04" D) "02"和"03" (9) 建立一个视图salary,该视图包括了系号和(该系的)平均工资两个字段,正确的SQL语句是:A) CREATE VIEW salary AS系号,AVG(工资) AS 平均工资 FROM 教师;GROUP BY系号B) CREATE VIEW salary AS SELECT 系号,AVG(工资) AS 平均工资 FROM 教师;GROUP BY 系名C) CREATE VIEW sa

36、lary SELECT系号,AVG(工资)AS平均工资FROM教师;GROUP BY系号D) CREATE VIEW salary AS SELECT系号,AVG(工资)AS平均工资FROM教师;GROUP BY系号(10) 删除视图salary的命令是A) DROP salary VIEW B) DROP VIEW salaryC) DELETE salary VIEW D) DELETE salary(11) 有SQL语句:SELECT主讲课程,COUNT(*)FROM 教师 GROUP BY 主讲课程该语句执行结果含有记录个数是A) 3 B) 4 C) 5 D) 6(12) 有SQL语句

37、:SELECT COUNT(*)AS人数,主讲课程 FROM 教师 GROUP BY 主讲课程;ORDER BY人数DESC该语句执行结果的第一条记录的内容是A) 4 数据结构 B) 3 操作系统C) 2 数据库 D) 1 网络技术(13) 有SQL语句:SELECT 学院, 系名,COUNT(*)AS 教师人数FROM 教师,学院;WHERE 教师.系号 = 学院.系号GROUP BY 学院.系名与如上语句等价的SQL语句是:A) SELECT 学院.系名,COUNT(*) AS 教师人数;FROM 教师INNER JOIN 学院;教师.系号 = 学院.系号GROUP BY 学院. 系名B)

38、 SELECT 学院.系名,COUNT(*) AS 教师人数;FROM 教师INNER JOIN 学院;ON 系号 GROUP BY 学院.系名C) SELECT 学院.系名,COUNT(*) AS 教师人数;FROM教师INNERJOIN学院;ON 教师.系号=学院.系号GROUP BY 学院.系名D) SELECT 学院.系名,COUNT(*) AS 教师人数;FROM 教师INNERJOIN 学院;ON 教师.系号 = 学院.系号(14) 有SQL语句:SELECT DISTINCT 系号 FROM 教师 WHERE工资>=;ALL(SELECT 工资 FROM 教师WHERE 系

39、号="02")与如上语句等价的SQL语句是A) SELECT DISTINCT 系号 FROM 教师 WHERE工资>=;(SELECT MAX(工资) FROM 教师 WHERE 系号="02")B) SELECT DISTINCT系号FROM 教师 WHERE 工资>=;(SELECT MIN(工资) FROM 教师 WHERE 系号="02")C) SELECT DISTINCT 系号FROM 教师 WHERE工资>=;ANY(SELECT 工资 FROM 教师 WHERE 系号="02")

40、D) SELECT DISTINCT 系号 FROM 教师 WHERE工资>=;SOME(SELECT 工资 FROM 教师 WHERE 系号="02")答案:C D C A B A D B D A C A二、填空题(1) 为“学生”表增加一个“平均成绩”字段的正确命令是 ALTER TABLE 学生 ADD 【1】平均成绩 N(5,2)。答案:Column2005年4月全国计算机等级考试二级笔试试卷一、选择题(24) 使用SQL语句将学生表S中年龄(AGE)大于30岁的记录删除,正确的命令是A) DELETE FOR AGE > 30 B) DELETE FR

41、OM S WHERE AGE > 30C) DELETE S FOR AGE > 30 D) DELETE S WHERE AGE > 30(26) 在Visual FoxPro中,删除数据库表S的SQL命令是A) DROP TABLE S B) DELETE TABLE SC) DELETE TABLE S.DBF D) ERASE TABLE S(28) 使用SQL语句向学生表S(SNO,SN,AGE,SEX)中添加一条新记录,字段学号(SNO)、姓名(SN)、性别(SEX)、年龄(AGE)的值分别为0401、王芳、女、18,正确命令是A) APPEND INTO S (

42、SNO,SN,SEX,AGE)VALUES(0401,王芳,女,18)B) APPEND S VALUES(0401,王芳,18,女)C) INSERT INTO S(SNO,SN,SEX,AGE)VALUES(0401,王芳,女,18)D) INSERT S VALUES(0401,王芳,18,女)(30) 在SQL的SELECT查询结果中,消除重复记录的方法是A) 通过指定主关系键 B) 通过指定惟一索引 C) 使用DISTINCT子句 D) 使用HAVING子句(31) 在Visual FoxPro中,以下有关SQL的SELECT语句的叙述中,错误的是A) SELECT子句中可以包含表中

43、的列和表达式B) SELECT子句中可以使用别名C) SELECT子句规定了结果集中的列顺序D) SELECT子句中列的顺序应该与表中列的顺序一致(32) 下列关于SQL中HAVING子句的描述,错误的是A) HAVING子句必须与GROUP BY子句同时使用B) HAVING子句与GROUP BY子句无关C) 使用WHERE子句的同时可以使用HAVING子句D) 使用HAVING子句的作用是限定分组的条件第(34)(35)题使用如下三个数据库表:学生表:S(学号,姓名,性别,出生日期,院系)课程表:C(课程号,课程名,学时)选课成绩表:SC(学号,课程号,成绩)在上述表中,出生日期数据类型为

44、日期型,学时和成绩为数值型,其他均为字符型。(34) 用SQL命令查询选修的每门课程的成绩都高于或等于85分的学生的学号和姓名,正确的命令是A) SELECT 学号,姓名 FROM S WHERE NOT EXISTS;(SELECT * FROM SC WHERE SC.学号 = S.学号 AND成绩 < 85)B) SELECT 学号,姓名 FROM S WHERE NOT EXISTS;(SELECT * FROM SC WHERE SC.学号= S.学号 AND >= 85)C) SELECT 学号,姓名 FROM S,SCWHERE S.学号= SC.学号 AND成绩 &

45、gt;= 85D) SELECT 学号,姓名 FROM S,SCWHERE S.学号 = SC.学号 AND ALL成绩 >= 85(35) 用SQL语言检索选修课程在5门以上(含5门)的学生的学号、姓名和平均成绩,并按平均成绩降序排列,正确的命令是A) SELECT S.学号,姓名 平均成绩 FROM S,SC; WHERE S.学号 = SC.学号; GROUP BY S.学号 HAVING COUNT(*)>=5 ORDER BY平均成绩 DESCB) SELECT 学号,姓名,AVG(成绩) FROM S,SC; WHERE S.学号 = SC.学号 AND COUNT(*

46、)>=5; GROUP BY 学号 ORDER BY 3 DESCC) SELECT S.学号,姓名 AVG(成绩) 平均成绩FROM S,SC; WHERE S.学号 = SC.学号 AND COUNT(*)>=5; GROUP BY S.学号 ORDER BY平均成绩 DESCD) SELECT S.学号,姓名 AVG(成绩)平均成绩 FROM S,SC; WHERE S.学号 = SC.学号; GROUP BY S.学号 HAVING COUNT(*)>=5 ORDER BY 3 DESC答案:B A C C D B A D二、填空题(11)(13)题使用如下三个数据库

47、表:金牌榜.DBF 国家代码C(3), 金牌数I, 银牌数I, 铜牌数I获奖牌情况.DBF 国家代码C(3), 运动员名称C(20), 项目名称C(30), 名次I国家.DBF 国家代码 C(3), 国家名称C(20)“金牌榜”表中一个国家一条记录:“获奖牌情况”表中每个项目中的各个名次都有一条记录,名次只取前3名,例如:国家代码 运动员名称 项目名称 名次001 刘翔 男子110米栏 1001 李小鹏 男子双杠 3002 非尔普斯 游泳男子200米自由泳 3002 非尔普斯 游泳男子400米个人混合泳 1001 郭晶晶 女子三米板跳板 1001 李婷/孙甜甜 网球女子双打 1(11) 为表“

48、金牌榜”增加一个字段“奖牌总数”,同时为该字段设置有效性规则:奖牌总数>=0,应使用SQL语句:ALTER TABLE金牌榜 【11】 奖牌总数I 【12】 奖牌总数>=0(12) 使用“获奖牌情况”和“国家”两个表查询“中国”所获金牌(名次为1)的数量,应使用SQL语句:SELECT COUNT(*) FROM 国家 INNER JOIN 获奖牌情况;【13】 国家.国家代码 = 获奖牌情况.国家代码;WHERE 国家.国家名称 = “中国” AND 名次 = 1(13) 将金牌榜.DBF中新增加的字段奖牌总数设置为金牌数、银牌数、铜牌数三项的和,应使用SQL语句【14】 金牌榜

49、 【15】 奖牌总数 = 金牌总数+银牌数+铜牌数 答案:【11】ADD 【12】CHECK【13】ON 【14】UPDATE 【15】SET2005年9月全国计算机等级考试二级笔试试卷一、选择题(25)当前打开的图书表中有字符型字段“图书号”,要求将图书号以字母A开头的图书记录全部打上删除标记,通常可以使用命令A)DELETE FOR 图书号="A"B)DELETE WHILE 图书号="A"C)DELETE FOR 图书号="A*"D)DELETE FOR 图书号 LIKE "A%"第(29)(35)题使用如下

50、三个表:职员.DBF:职员号 C(3),姓名 C(6),性别 C(2),组号 N(1),职务 C(10)客户.DBF:客户号 C(4),客户名 C(36),地址 C(36),所在城市 C(36)订单.DBF:订单号 C(4),客户号 C(4),职员号 C(3),签订日期 D,金额 N(6.2)(29)查询金额最大的那10%订单的信息。正确的SQL语句是A)SELECT * TOP 10 PERCENT FROM 订单B)SELECT TOP 10% * FROM 订单 ORDER BY 金额C)SELECT * TOP 10 PERCENT FROM 订单 ORDER BY 金额D)SELEC

51、T TOP 10 PERCENT * FROM 订单 ORDER BY 金额 DESC(30)查询订单数在3个以上、订单的平均金额在200元以上的职员号。正确的SQL语句是A)SELECT 职员号 FROM 订单 GROUP BY 职员号 HAVING COUNT(*)>3 AND AVG_金额>200B)SELECT 职员号 FROM 订单 GROUP BY 职员号 HAVING COUNT(*)>3 AND AVG(金额)>200C)SELECT 职员号 FROM 订单 GROUP BY 职员号 HAVING COUNT(*)>3 WHERE AVG(金额)&

52、gt;200D)SELECT 职员号 FROM 订单 GROUP BY 职员号 WHERE COUNT(*)>3 AND AVG_金额>200(31)显示2005年1月1日后签订的订单,显示订单的订单号、客户名以及签订日期。正确的SQL语句是A)SELECT 订单号,客户名,签订日期 FROM 订单 JOIN 客户 ON 订单.客户号=客户.客户号 WHERE 签订日期>2005-1-1B)SELECT 订单号,客户名,签订日期 FROM 订单 JOIN 客户 WHERE 订单.客户号=客户.客户号 AND 签订日期>2005-1-1C)SELECT 订单号,客户名,签

53、订日期 FROM 订单,客户 WHERE 订单.客户号=客户.客户号 AND 签订日期<2005-1-1D)SELECT 订单号,客户名,签订日期 FROM 订单,客户 ON 订单.客户号=客户.客户号 AND 签订日期<2005-1-1(32)显示没有签订任何订单的职员信息(职员号和姓名),正确的SQL语句是A)SELECT 职员.职员号,姓名 FROM 职员 JOIN 订单 ON 订单.职员号=职员.职员号 GROUP BY 职员.职员号 HAVING COUNT(*)=0B)SELECT 职员.职员号,姓名 FROM 职员 LEFT JOIN 订单 ON 订单.职员号=职员.

54、职员号 GROUP BY 职员.职员号 HAVING COUNT(*)=0C)SELECT 职员号,姓名 FROM 职员 WHERE 职员号 NOT IN (SELECT 职员号 FROM 订单)D)SELECT 职员.职员号,姓名 FROM 职员 WHERE 职员.职员号 <> (SELECT 订单.职员号 FROM 订单)(33)有以下SQL语句:SELECT 订单号,签订日期,金额 FROM 订单,职员 WHERE 订单.职员号=职员.职员号 AND 姓名="李二"与如上语句功能相同的SQL语句是A)SELECT 订单号,签订日期,金额 FROM 订单 W

55、HERE EXISTS (SELECT * FROM 职员 WHERE 姓名="李二")B)SELECT 订单号,签订日期,金额 FROM 订单 WHERE EXISTS (SELECT * FROM 职员 WHERE 职员号=订单.职员号 AND 姓名="李二")C)SELECT 订单号,签订日期,金额 FROM 订单 WHERE IN (SELECT 职员号 FROM 职员 WHERE 姓名="李二")D)SELECT 订单号,签订日期,金额 FROM 订单 WHERE IN (SELECT 职员号 FROM 职员 WHERE 职员号=订单.职员号 AND 姓名="李二")(34)从订单表中删除客户号为“1001”的订单记录,正确的SQL语句是A)DROP FROM 订单 WHERE 客户号="1001"B)DROP FROM 订单 FOR 客户号=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论