版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL关系数据库查询语言1VFP知识点划分数据库、表及其操作(包括查询和视图)关系数据库标准语言SQL表单、菜单和报表Visual FoxPro程序设计24.1 SQL语言的特点 SQL是英文(Structured Query Language)的缩写,意思为结构化查询语言,是对存放在计算机数据库中的数据进行组织、管理和查询的一种工具,是一种对关系数据库操作的语言。语法结构简单,命令动词只有7个,如下:(1)数据查询 SELECT(2)数据定义 CREATE、DROP、ALTER(3)数据修改 INSERT、UPDATE、DELETE34.3 SQL的定义功能SQL的数据定义功能包括数据库的定
2、义、表的定义、视图的定义、存储过程的定义、规则的定义和索引的定义等。创建数据库CREATE DATABASE 创建表CREATE TABLE |DBF NAME FREE; ( ( ,) ,;NULL | NOT NULL;CHECK 域完整性约束条件 ERROR 出错信息 DEFAULT 默认值;PRIMARY KEY ;,FOREIGN KEY TAG REFERENCES )44.3.1 创建表创建表CREATE TABLE |DBF NAME FREE ( ( ,) ,NULL | NOT NULL CHECKERRORDEFAULTPRIMARY KEY字段类型宽度小数字符型(C)N
3、数值型(N)Nn逻辑型(L)1日期型(D)8日期时间(T)8货币型(Y)8双精度型(B)8n浮点型(F)Nn整数型(I)4通用型(G)4备注型(M)4【注意】1.数据库或表建立完之后将自动打开。2.建立自由表(FREE),将不能使用CHECK、ERROR、DEFAULT、PRIMARY KEY等命令进行约束条件的设置。54.3.1 创建表【例】建立教室管理数据库。CREATE DATABASE 教室管理CREATE TABLE 教室;(教室编号 C(4) PRIMARY KEY,所在楼名 C(12) ,坐位数 I ;CHECK 坐位数0 ERROR 坐位数应为非负 DEFAULT 100)64
4、.3.1 创建表两个表进行永久性联接FOREIGN KEY TAG REFERENCES 【例】CREATE TABLE 教室使用;(教室编号 C(4),使用者 C(12),使用时间 T, ;FOREIGN KEY 教室编号 TAG 教室编号 REFERENCES 教室) FOREIGN KEY:建立普通索引74.3.2 删除表删除表【格式】DROP TABLE 将表从数据库中物理性的删除将数据库打开,再删除其中的表。84.3.3 表结构的修改【例】向教室表中添加一个“面积”字段,面积应该大于零,如果输入错误,系统则提示 “面积应为非负”,其默认值为100 。ALTER TABLE 教室 AD
5、D 面积 I ;CHECK 面积0 ERROR 面积应为非负 DEFAULT 100;【例】添加两个字段,“使用时间”字段和”面积”字段。ADD 使用时间 TALTER TABLE ;ADD | ALTER COLUMN |DROP COLUMN |RENAME COLUMN ; ( ( ,) ;SET|DROP CHECK 域完整性约束条件 ERROR 出错信息;SET|DROP DEFAULT 默认值;ADD|DROP PRIMARY KEY TAG ;ADD|DROP UNIQUE TAG ;ADD|DROP FOREIGN KEY TAG REFERENCES 94.3.3 表结构的修
6、改ALTER TABLE ;ADD | ALTER COLUMN |DROP COLUMN |RENAME COLUMN ; ( ( ,) ;SET|DROP CHECK 域完整性约束条件 ERROR 出错信息;SET|DROP DEFAULT 默认值;ADD|DROP PRIMARY KEY TAG ;ADD|DROP UNIQUE TAG ;ADD|DROP FOREIGN KEY TAG REFERENCES 【例】将教室表中“所在楼名” 定义为候选索引,索引名为ABC。ALTER TABLE 教室 ADD UNIQUE 所在楼名 TAG ABC【例】删除教室表中的候选索引ABC。ALT
7、ER TABLE 教室 DROP UNIQUE TAG ABCALTER TABLE 教室 DROP UNIQUE 所在楼名 TAG ABC 10ALTER TABLE ;ADD | ALTER COLUMN |DROP COLUMN |RENAME COLUMN ; ( ( ,) ;SET|DROP CHECK 域完整性约束条件 ERROR 出错信息;SET|DROP DEFAULT 默认值;ADD|DROP PRIMARY KEY TAG ;ADD|DROP UNIQUE TAG ;ADD|DROP FOREIGN KEY TAG REFERENCES 4.3.3 表结构的修改【例】修改教
8、室表中的“坐位数”字段的有效性规则,坐位数大于30,错误提示为“坐位数应大于30平方米”,其默认值为40。ALTER TABLE 教室 ;ALTER 坐位数 SET CHECK 坐位数30 ERROR 坐位数应大于30平方米 ;ALTER 坐位数 SET DEFAULT 40【例】删除 “面积”字段的有效性规则。ALTER TABLE 教室 ALTER 面积 DROP CHECK【例】将教室表中的教室编号字段的宽度改为6。ALTER TABLE 教室 ALTER 教室编号 C(6)11ALTER TABLE ;ADD | ALTER COLUMN |DROP COLUMN |RENAME CO
9、LUMN ; ( ( ,) ;SET|DROP CHECK 域完整性约束条件 ERROR 出错信息;SET|DROP DEFAULT 默认值;4.3.3 表结构的修改【例】修改教室表中“面积”字段的名称为“使用面积”。ALTER TABLE 教室 RENAME COLUMN 面积 TO 使用面积【例】删除教室表中“使用面积”字段。ALTER TABLE 教室 DROP COLUMN 使用面积ALTER TABLE DROP COLUMNALTER TABLE RENAME COLUMN TO 12【1】为“歌手”表增加一个字段“最后得分”的 SQL 语句是_。(P11-66)A.ALTER T
10、ABLE 歌手 ADD 最后得分 F(6,2) B.ALTER DBF 歌手 ADD 最后得分 F 6,2C.CHANGE TABLE 歌手 ADD 最后得分 F(6,2)D.CHANGE TABLE 学院 INSERT 最后得分 F 6,2练习A【2】为“评分”表的“分数”字段添加有效性规则:“分数必须大于等于 0 并且小于等于10”,正确的 SQL 语句是_。(2006年9月P12-70 )A.CHANGE TABLE 评分 ALTER 分数 SET CHECK 分数=0 AND 分数=0 AND 分数=0 AND 分数=0 OR 分数0,应该使用的SQL语句是_ TABLE使用零件 _
11、数量SET _ 数量0。(2004年4月)练习ALTERALTERCHECK【5】在Visual FoxPro中,使用SQL的CREATE TABLE语句建立数据库表时,使用 _ 子句说明主索引。(2005年9月)PRIMARY KEY【6】如下命令将“产品”表的“名称”字段名修改为“产品名称”:ALTER TABLE 产品 RENAME _ 名称 TO 产品名称。(2006年9月)COLUMN【7】已有“歌手”表,将该表中的“歌手号”字段定义为候选索引、索引名是temp,正确的SQL语句是:_ TABLE 歌手 ADD _歌手号 _ temp(2007年4月)ALTERUNIQUETAG【8
12、】为“教师”表的职工号字段添加有效性规则:职工号的最左边三位字符是110,正确的SQL语句是_。( P7-14)ALTER TABLE 教师 ALTER 职工号 SET CHECK LEFT(职工号,3)=11014练习【9】在Visual FoxPro中,如果要将学生表S(学号,姓名,性别,年龄)中“年龄”属性删除,正确的SQL命令是_。(2007年4月P10-55 )A.ALTER TABLE S DROP COLUMN 年龄 B.DELETE 年龄 FROM SC.ALTER TABLE S DELETE COLUMN 年龄 D.ALTEER TABLE S DELETE 年龄A【10】
13、如果学生表STUDENT是使用下面的SQL语句创建的CREATE TABLE STUDENT(SNO C(4) PRIMARY KEY NOT NULL,; SN C(8), SEX C(2), AGE N(2) CHECK(AGE15 AND AGE30) )下面的SQL语句中可以正确执行的是_。(P8-25)A)INSERT INTO STUDENT(SNO, SEX, AGE) VALUES (S9, 男,17)B)INSERT INTO STUDENT(SN, SEX, AGE) VALUES (李安琦, 男 , 20)C)INSERT INTO STUDENT(SEX, AGE) V
14、ALUES (男, 20)D)INSERT INTO STUDENT(SNO, SN) VALUES (S9, 安琦,16)A154.4 SQL的数据修改功能SQL的数据库修改功能:数据的插入(INSERT)、更新(UPDATA)和删除(DELETE)。插入记录命令【格式】INSERT INTO 字段名1,字段名2, VALUES (数值1,数值2,)【例】向教室表中插入一条记录INSERT INTO 教室 VALUES (0001,博文楼,120,200)INSERT INTO 教室 (坐位数,面积) VALUES (120,200)【例】向学生表中插入一条记录,只插入出生年月属性的值。IN
15、SERT INTO 学生 (出生年月) VALUES ( 2008/08/08 )164.4.1 插入记录【格式】INSERT INTO 字段名1,字段名2, VALUES (数值1,数值2,)【注意】当数据库中的表定义了主索引或候选索引后,只能用SQL语言的插入(INSERT)命令,不能使用VFP的插入命令(INSERT或APPEND)。插入日期型数据时应使用严格日期格式。当插入所有字段时,可以不用指定字段,当插入部分字段时,应指定字段。174.4.2 删除记录删除记录命令【格式】DELETE FROM WHERE 【例】删除教室表中教室编号为0002的记录DELETE FROM 教室 WH
16、ERE 教室编号=0002【注意】没有WHERE语句,将删除表中所有的记录。该命令是逻辑删除表中的记录,如果是物理删除还需要再使用PACK命令。不需要打开数据表就可以执行DELETE删除操作。USE 教室DELETE ALL FOR 教室编号=“0002”184.4.3 更新记录更新记录命令【格式】UPDATE SET 字段名1=表达式1; ,字段名2=表达式2, WHERE 【例】将教室表中的面积增加10% UPDATE 教室 SET 面积=面积*1.1【例】将教室表中教室编号为0002的面积增加20%UPDATE 教室 SET 面积=面积*1.2 WHERE 教室编号=0002“【例】将学
17、生表中的入学成绩都加100分。 UPDATE 学生 SET 入学成绩=入学成绩+100【注意】没有WHERE语句,将更新表中所有的记录。USE 教室REPLACE ALL 入学成绩 WITH 入学成绩+10019练习【1】插入一条记录到“评分”表中,歌手号、分数和评委号分别是“1001”、9.9 和“105”,正确的 SQL 语句是_。(2006年9月P11-67)A.INSERT VALUES (1001,9.9, 105) INTO 评分 (歌手号,分数,评委号)B.INSERT TO 评分 (歌手号,分数,评委号) VALUES (1001,9.9, 105)C.INSERT INTO
18、评分 (歌手号,分数,评委号) VALUES (1001,9.9, 105)D.INSERT VALUES (100,9.9, 105)TO 评分 (歌手号,分数,评委号)C【2】将“欧阳秀”的工资增加200元SQL语句是_。(2004年9月P7-12 )A.REPLACE 教师 WITH 工资=工资+200 WHERE 姓名=欧阳秀B.UPDATE 教师 SET 工资= 工资+200 FOR 姓名=欧阳秀C.UPDATE 教师 工资 WITH 工资+200 WHERE姓名=欧阳秀D.UPDATE 教师 SET 工资=工资+200 WHERE 姓名=欧阳秀 D20练习【3】在VFP中,关于删除
19、记录的描述中,正确的是_。(05.4 P9-32 )A. SQL的DELETE命令在删除数据库表中的记录之前,不需要用USE命令打开表B. SQL的DELETE命令和传统Visual FoxPro的DELETE命令在删除数据库表中的记录之前,都需要用USE命令打开表C. SQL的DELETE命令可以物理的删除数据库表中的记录,而传统Visual FoxPro的DELETE命令只能逻辑删除数据库表中的记录D. 传统Visual FoxPro的DELETE命令在删除数据库表中的记录之前不需要用USE命令打开表A【4】使用SQL语句将学生表S中年龄(AGE)大于30岁的记录删除,正确的命令是_。(2
20、005年4月P9-33 )A. DELETE FOR AGE 30B. DELETE FROM S WHERE AGE 30C. DELETE S FOR AGE 30D. DELETE S WHERE AGE 30B21练习【5】使用SQL语句向学生表S(SNO,SN,AGE,SEX)中添加一条新记录,字段学号(SNO)、姓名(SN)、性别(SEX)、年龄(AGE)的值分别为0401、王芳、女、18,正确命令是_。(2005年4月P9-35 )A. APPEND INTO S (SNO,SN,SEX,AGE)VALUES(0401“, 王芳“, 女“,18)B. APPEND S VALUE
21、S(0401 ,王芳“,18 ,女)C. INSERT INTO S(SNO,SN,SEX,AGE)VALUES(0401 ,王芳“, 女“,18)D. INSERT S VALUES(0401 ,王芳“,18, 女)C【6】从订单表中删除客户号为“1001”的订单记录,正确的SQL语句是_。(2005年9月P10-47 )A.DROP FROM 订单 WHERE 客户号=1001B.DROP FROM 订单 FOR 客户号=1001C.DELETE FROM 订单 WHERE 客户号=1001 D.DELETE FROM 订单 FOR 客户号=1001C22练习【7】将订单号为“0060”的
22、订单金额改为169元,正确的SQL语句是_。(2005年9月P10-48)A.UPDATE 订单 SET 金额=169 WHERE 订单号=0060B.UPDATE 订单 SET 金额 WITH 169 WHERE 订单号=0060C.UPDATE FROM 订单 SET 金额=169 WHERE 订单号=0060D.UPDATE FROM 订单 SET 金额 WITH 169 WHERE 订单号=0060A【8】“图书”表中有字符型字段“图书号”。要求用SQL DELETE命令将图书号以字母A开头的图书记录全部打上删除标记,正确的命令是_。(2006年4月P11-60 )A.DELETE F
23、ROM 图书 FOR 图书号 LIKE A B.DELETE FROM 图书 WHILE 图书号 LIKE AC.DELETE FROM 图书 WHERE 图书号= A* D.DELETE FROM 图书 WHERE 图书号 LIKE AD23练习【9】要使“产品”表中所有产品的单价上浮8,正确的SQL命令是_。(2006年4月P11-62)A.UPDATE 产品 SET 单价=单价+单价*8 FOR ALL B.UPDATE 产品 SET 单价=单价*1.08 FOR ALLC.UPDATE 产品 SET 单价=单价+单价*8 D.UPDATE 产品 SET 单价=单价*1.08D练习(改错
24、) 22.2.2&所有器件的单价增加5元UPDATE order_detail1 SET 单价 WITH 单价 + 5=244.3.4 视图的定义1.定义视图命令 CREATE VIEW AS 2.删除视图命令DROP VIEW 或 DELETE VIEW 【例4.39】建立学生的学号、姓名、课程名和成绩的视图,视图名为“成绩表”CREATE VIEW 成绩表 AS ;SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 ;WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号 视图是一个虚拟的表,在存储介质中找不到相应的存储文件。视图最大的特点是,虽然不保
25、存真正的数据,但是可以像一般的表一样进行建立查询、表单、报表等。25练习【1】删除视图salary的命令是_。 ( P7-15)A) DROP salary VIEW B) DROP VIEW salary C) DELETE salary VIEW D) DELETE salary B【2】教师表: (职工号,系号,姓名,工资,主讲课程) 学院表: (系号,系名) 建立一个视图salary,该视图包括了系号和(该系的)平均工资两个字段,正确的SQL语句是:_。 ( P7-16)A) CREATE VIEW salary AS; 系号,AVG(工资)AS平均工资FROM教师GROUP BY系号
26、B) CREATE VIEW salary AS; SELECT系号,AVG(工资)AS平均工资FROM教师GROUP BY系名C) CREATE VIEW Salary ; SELECT系号,AVG(工资)AS平均工资FROM教师GROUP BY系号D) CREATE VIEW salary AS; SELECT系号,AVG(工资)AS平均工资FROM教师GROUP BY系号D26练习【3】根据“歌手”表建立视图 myview,视图中含有包括了“歌手号”左边第一位是“1”的所有记录,正确的 SQL 语句是:_。 ( P12-71)A)CREATE VIEW myview AS SELECT
27、* FROM 歌手 WHERE LEFT(歌手号,1)=“1”B)CREATE VIEW myview AS SELECT * FROM 歌手 WHERE LIKE(“1”,歌手号) C)CREATE VIEW myview SELECT * FROM 歌手 WHERE LEFT(歌手号,1)=“1” D)CREATE VIEW myview SELECT * FROM 歌手 WHERE LIKE(“1”,歌手号)A274.2 SQL的查询功能 SQL语法格式SELECT ALL|DISTINCT TOP|PERCENT, AS FROM ,WHERE GROUP BY HAVING ORDE
28、R BY ASC|DESCINTO ARRAY |INTO CURSOR | INTO DBF|TABLE |TO FILE ADDITIVE|TO PRINTERPROMPT284.2.2 简单查询简单查询是指对单表的简单查询。利用WHERE语句筛选出符合条件的记录;利用AS语句显示出虚拟字段。格式SELECT FROM SELECT FROM WHERE SELECT AS FROM 294.2.2 简单查询1.显示部分或全部字段【例】显示教师表中所有人的姓名和性别信息SELECT FROM姓名,性别教师【例】显示教师表中所有信息SELECT FROM教师号,姓名,性别,职称,党员否教师*
29、【例】显示教师表中男教师的姓名、职称和性别信息。SELECT 姓名,职称,性别 FROM 教师 WHERE 性别=男30【例】显示学生表中入学成绩小于500的日语生或英语生的信息。SELECT * FROM 学生; WHERE 入学成绩500 AND 专业=日语 OR 专业=英语 SELECT * FROM 学生; WHERE 入学成绩500 AND (专业=日语 OR 专业=英语)SELECT * FROM 学生 WHERE (入学成绩500 AND 专业=日语) ;OR (入学成绩500 AND专业=英语)31= DATE() YEAR( )虚拟字段2.查询结果可以是通过某一字段或几个字段
30、计算得到的虚拟字段。【例】显示学生表中所有人的学号、姓名和年龄信息。年龄=?2007年出生的人的年龄=2008-2007=1年龄= 现在年份-出生年份-YEAR(出生年月)SELECT AS FROM SELECT 学号,姓名, 年龄FROM 学生YEAR(DATE()-YEAR(出生年月) AS 年龄 ;32注意:WHERE语句后不能使用虚拟字段进行条件限定。【例】显示学生表中年龄大于19岁女生的学号、姓名和年龄信息。SELECT 学号,姓名,YEAR(DATE()-YEAR(出生年月) AS 年龄; FROM 学生 WHERE 性别=“女” AND 年龄19 SELECT 学号,姓名,YE
31、AR(DATE()-YEAR(出生年月) 年龄 FROM 学生;WHERE 性别=女 AND YEAR(DATE()-YEAR(出生年月)1933去掉重复记录3.去掉查询结果中的重复记录【例】显示学生表中都有哪些专业。SELECT DISTINCT 专业 FROM 学生SELECT 专业 FROM 学生利用DISTINCT去掉查询结果中的重复记录。34练习【1】查询1962年10月27日出生的职工信息的正确命令是_。(2004.4 P6-6)A. SELECT * FROM 职工 WHERE 出生日期=1962-10-27B. SELECT * FROM 职工 WHERE 出生日期=1962-
32、10-27C. SELECT * FROM 职工 WHERE 出生日期=1962-10-27D. SELECT * FROM 职工 WHERE 出生日期=(1962-10-27)【2】查询所有目前年龄在35岁以上(不含35岁)的职工信息(姓名、性别和年龄),正确的命令是_。(2004.4 P6-9)A.SELECT 姓名,性别,YEAR(DATE()-YEAR(出生日期) 年龄 ; FROM 职工 WHERE 年龄35B.SELECT 姓名,性别,YEAR(DATE()-YEAR(出生日期) 年龄; FROM 职工 WHERE YEAR(出生日期)35C.SELECT 姓名,性别,YEAR(D
33、ATE()-YEAR(出生日期) 年龄; FROM 职工 WHERE YEAR(DATE()-YEAR(出生日期)35D.SELECT 姓名,性别,年龄=YEAR(DATE()-YEAR(出生日期); FROM 职工 WHERE YEAR(DATE()-YEAR(出生日期)35AC354.2.3 联接查询(简单联接)1.简单联接查询【例】显示学生的学号、姓名和成绩的信息。SELECT 学生.学号,学生.姓名,选课.成绩 FROM 学生,选课; 在一个数据库中多个表之间一般都存在着某些联系,在一个查询语句中如果同时涉及到两个或两个以上的表时,这种查询称之为联接查询(也称为多表查询)。 WHERE
34、后是联接条件,通常表示为两个表中共有字段相等。当不同表中含有相同的字段名时,必须指明是哪个表的字段。 WHERE 学生.学号=选课.学号364.2.3 联接查询(简单联接)【例】显示学生的学号、姓名、课程名和成绩的信息。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 ;WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号37超联接查询超联接查询SELECTFROM INNER|LEFT|RIGHT|FULL JOIN ON INNER JOIN或JOIN为内联接(等值联接)LEFT JOIN 为左联接RIGHT JOIN 为右联接FULL JOIN
35、为全联接ON 指明联接条件38内联接SELECTFROM INNER JOIN ON INNER JOIN 或JOIN为内联接,也称为等值联接。按照条件进行联接,不满足条件的记录不会出现在查询结果中。 【例】显示学生的学号、姓名和成绩的信息。SELECT 学生.学号,姓名, 成绩 ;SELECT 学生.学号, 姓名, 成绩 FROM 学生,选课;WHERE 学生.学号=选课.学号FROM 学生 JOIN 选课 ON 学生.学号=选课.学号简单联接=内联接39内联接SELECT 学生.学号,姓名,课程名,成绩 ;FROM 学生 JOIN 选课 JOIN 课程 ;ON 选课.课程号=课程.课程号
36、ON 学生.学号=选课.学号注意:多个表用“JOIN”语句联接的顺序要与联接条件“ON”的顺序恰好相反。 【例】显示学生的学号、姓名、课程名和成绩的信息。SELECT * FROM A JOIN B JOIN C ON B.*=C.* ON A.*=B.*40左联接LEFT JOIN 为左联接,除按照联接条件进行联接外,左边表中不满足条件的记录也会出现在查询结果中。【例】左联接查询SELECT 学生.学号,姓名,成绩;FROM 学生 LEFT JOIN 选课 ON 学生.学号=选课.学号41右联接RIGHT JOIN 为右联接,除按照联接条件进行联接外,右边表中不满足条件的记录也会出现在查询结
37、果中。 【例】右联接查询SELECT 学号, 课程名,成绩; FROM 选课 RIGHT JOIN 课程 ON 选课.课程号=课程.课程号42全联接FULL JOIN 为全联接,除按照联接条件进行联接外,两个表中不满足条件的记录也会出现在查询结果中。 全联接查询的结果是左联接查询和右联接查询结果的并集。【例】全联接查询SELECT 学生.学号,姓名,课程名,成绩 ;FROM 学生 FULL JOIN 选课 FULL JOIN 课程 ;ON 选课.课程号=课程.课程号 ON 学生.学号=选课.学号43别名在联接操作中,经常需要使用关系名用前缀,有时显得很麻烦。【例】显示学生的学号、姓名、课程名和
38、成绩的信息。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 ;WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号在联接操作中,可在FROM语句中定义别名来代替关系名。【格式】 SELECT A.学号,姓名,课程名,成绩 ;FROM 学生A,选课B,课程C ;WHERE A.学号=B.学号 AND C.课程号=B.课程号别名并不是必须的,但在关系的自联接操作中,就必不可少了。44自联接查询2.自联接查询【例】查询所有课程的先行课信息。SELECT A.课程名,的先行课是 AS 先行课程,B.课程名 ;FROM 课程表 A,课程表 B WHERE B.
39、课程号= A.先行课当一个表自己与自己联接时,可以给表取两个别名别名为:课程表 A和课程表 BA BA.课程号= B.先行课45练习下题使用如下三个表: 部门.DBF:部门号C(8),部门名C(12),负责人C(6),电话C(16)职工.DBF:部门号C(8),职工号C(10),姓名C(8),性别C(2),出生日期D工资.DBF:职工号C(10),基本工资N(8,2),津贴N(8,2),奖金N(8,2),扣除N(8,2)【1】查询职工实发工资的正确命令是_。(2004年4月 P6-5)A. SELECT 姓名,(基本工资+津贴+奖金-扣除) AS 实发工资 FROM 工资B. SELECT 姓
40、名,(基本工资+津贴+奖金-扣除) AS 实发工资 FROM 工资 WHERE 职工.职工号=工资.职工号C. SELECT 姓名,(基本工资+津贴+奖金-扣除) AS 实发工资FROM 工资,职工 WHERE 职工.职工号=工资.职工号D. SELECT 姓名,(基本工资+津贴+奖金-扣除) AS 实发工资FROM 工资 JOIN 职工 WHERE 职工.职工号=工资.职工号CON46练习【2】显示2005年1月1日之后签订的订单,显示订单的订单号、客户名以及签订日期。正确的SQL语句是_。(2005年9月 P10-44 )A.SELECT 订单号,客户名,签订日期 FROM 订单 JOIN
41、 客户 ; ON 订单.客户号=客户.客户号 WHERE 签订日期2005-1-1B.SELECT 订单号,客户名,签订日期 FROM 订单 JOIN 客户; WHERE 订单.客户号=客户.客户号 AND 签订日期2005-1-1C.SELECT 订单号,客户名,签订日期 FROM 订单,客户 ; WHERE 订单.客户号=客户.客户号 AND 签订日期2005-1-1D.SELECT 订单号,客户名,签订日期 FROM 订单,客户 ; ON 订单.客户号=客户.客户号 AND 签订日期 =(SELECT 成绩 FROM 选课 WHERE 学号=07010002)11ALL注意:在使用、=、
42、!=等比较运算符时,子查询的结果只能是一条记录或一个字段(即唯一值)。当子查询结果是多条记录或多个字段时,应使用带有量词(ANY、SOME、ALL)的查询语句。ANY9095、8550谓词查询NOT IN和NOT EXISTS谓词运算IN和NOT IN表示某个字段值是否在子查询中出现过。【例】查询选修了“C001”或“C004”课程的学生的学号。SELECT 学号 FROM 选课 WHERE 课程号=C001 OR 课程号=C004SELECT 学号 FROM 选课 WHERE 课程号 IN (C001,C004)SELECT 学号 FROM 选课 WHERE 课程号=C001 AND 课程号
43、=C004“SELECT 学号 FROM 选课 WHERE 课程号=C001 AND;学号 IN (SELECT 学号 FROM 选课 WHERE 课程号=C004)【例】查询同时选修了“C001”和“C004”课程的学生的学号。学号 =(SELECT )?C001C00451谓词查询集合运算:交():既属于第一个关系又属于第二个关系的所有元组。 交运算R1R2的结果为: 差():属于第一个关系而不属于第二个关系的所有元组。 交运算R1R2的结果为: 52谓词查询EXISTS和NOT EXISTS:子查询中是否有结果返回(是否存在子查询的结果)。使用 EXISTS 和 NOT EXISTS 引
44、入的子查询可用于两种集合原理的操作:交集与差集。交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。【例】查询没有选修任何一门课的学生信息。SELECT * FROM 学生 WHERE NOT EXISTS ; (SELECT * FROM 选课 WHERE 学号=学生.学号)注意: NOT EXISTS前没有相应的字段名。53谓词查询【例】查询至少选修一门课的学生信息。SELECT * FROM 学生 WHERE EXISTS ; (SELECT * FROM 选课 WHERE 学号=学生.学号)EXISTS等同于简单联接SELECT DISTINCT 学生.学
45、号,姓名 FROM 学生,选课 ; WHERE 学生.学号=选课.学号54NOTEXISTS与NOTIN的区别两者的区别:NOTEXISTS:指定一个子查询,检测最终结果中是否存在子查询的结果。 子查询:根据两个表的关系进行查询,可以查询多个字段 如:NOT EXISTS (SELECT * FROM 选课 WHERE 学号=学生.学号)NOTEXISTS前没有字段名NOTIN:确定给定的值是否与子查询或列表中的值相匹配。子查询:只对表中的某个字段进行查询, 如: 学号 IN (SELECT 学号 FROM 选课 WHERE 课程号=C004)NOT IN 前必须有字段名55NOTEXISTS
46、与NOTIN的区别【例】查询至少选修一门课的学生信息。SELECT * FROM 学生 WHERE EXISTS ; (SELECT * FROM 选课 WHERE 学号=学生.学号)SELECT * FROM 学生 WHERE 学号 IN (SELECT 学号 FROM 选课)【例】查询没有选修任何一门课的学生信息。SELECT * FROM 学生 WHERE NOT EXISTS ; (SELECT * FROM 选课 WHERE 学号=学生.学号)SELECT * FROM 学生 WHERE 学号 NOT IN (SELECT 学号 FROM 选课)56谓词查询【例】查询每个人的所有成绩
47、都高于或等于90分的学生的学号和姓名。SELECT 学生.学号,姓名 FROM 学生,选课 ; WHERE 成绩 = 90 AND 学生.学号 =选课.学号SELECT 学号,姓名 FROM 学生 WHERE(SELECT * FROM 选课 WHERE 成绩 90 AND 学号 = 学生.学号)NOT EXISTS;SELECT 学号,姓名 FROM 学生 WHERE 学号 NOT IN;(SELECT 学号 FROM 选课 WHERE 成绩 = 500 AND 入学成绩3000 OR 工资2000 AND 工资2000 OR 工资3000D.SELECT * FROM 教师 WHERE 工
48、资=3000 A62【3】有SQL语句SELECT DISTINCT 系号 FROM 教师 WHERE 工资=ALL (SELECT 工资 FROM 教师 WHERE 系号=02) 该语句的执行结果是系号_。(04.9 P7-17)A.01和02 B.01和03 C.01和04 D.02和03 练习系号姓名工资01肖海340802王岩盐439001李明玉452002孙民山297603钱无名298701乔小延540002周兴池367004欧阳秀3345A【4】在Visual FoxPro中,以下有关SQL的SELECT语句的叙述中,错误的是_。(2005年4月 P9-37 )A. SELECT子
49、句中可以包含表中的列和表达式B. SELECT子句中可以使用别名C. SELECT子句规定了结果集中的列顺序D. SELECT子句中列的顺序应该与表中列的顺序一致D63练习【5】用SQL命令查询选修的每门课程的成绩都高于或等于85分的学生的学号和姓名,正确的命令是_。(2005年4月 P9-40)A.SELECT 学号,姓名 FROM S WHERE NOT EXISTS ; (SELECT * FROM SC WHERE SC.学号 = S.学号 AND 成绩 = 85)C.SELECT 学号,姓名 FROM S,SC WHERE; S.学号= SC.学号 AND 成绩 = 85D.SELE
50、CT 学号,姓名 FROM S,SC WHERE ; S.学号 = SC.学号 AND ALL 成绩 = 85ASELECT 学号,姓名 FROM S WHERE 学号 NOT IN ; (SELECT 学号 FROM SC WHERE 成绩 85)学生表S(学号,姓名,性别,年龄)学生选课表SC(学号,课程号,成绩)64练习【6】设有学生选课表SC(学号,课程号,成绩),用SQL检索同时选修课程号为“C1”和“C5”的学生的学号的正确命令是_。(2007年4月P10-57) A.SELECT 学号 FROM SC WHERE 课程号=C1AND 课程号=C5B.SELECT 学号 FROM
51、SC WHERE 课程号=C1AND 课程号=; (SELECT 课程号 FROM SC WHERE 课程号=C5)C.SELECT 学号 FROM SC WHERE 课程号=C1AND 学号=; (SELECT 学号 FROM SC WHERE 课程号=C5)D.SELECT 学号 FROM SC WHERE 课程号=C1AND 学号 IN ; (SELECT 学号 FROM SC WHERE 课程号=C5)D65练习【7】设有S(学号, 姓名, 性别)和SC(学号, 课程号, 成绩)两个表,下面SQL的SELECT语句检索选修的每门课程的成绩都高于或等于85分的学生的学号、姓名和性别。(2
52、005年9月P14-16 )SELECT 学号, 姓名, 性别 FROM S WHERE _; (SELECT * FROM SC WHERE SC.学号 = S.学号 AND成绩 85)NOT EXISTS664.2.6 排序【格式】ORDER BY|ASC|DESC ,|ASC|DESC对最终查询结果中的某些字段(或虚假字段)进行排序,不能在子查询中使用。ASC为升序,DESC为降序,默认为升序排列。ORDER BY语句不能按某个表达式的运算结果进行排序。【例】查询国际贸易专业的学生信息,查询结果按入学成绩升序排列。SELECT * FROM 学生WHERE 专业=国际贸易ORDER BY
53、 入学成绩【例】查询国际贸易专业的学生信息,查询结果按性别降序、入学成绩升序排列。SELECT * FROM 学生 WHERE 专业=国际贸易 ORDER BY 性别 DESC,入学成绩SELECT * FROM 学生 ORDER BY (YEAR(DATE()-YEAR(出生年月)6SELECT 学号, 入学成绩 FROM 学生 WHERE 专业=国际贸易 2674.2.6 排序【格式】ORDER BY|ASC|DESC ,|ASC|DESC对于空值排序,升序时空值记录在最前显示,降序时在最后显示。SELECT * FROM 学生1 ORDER BY 入学成绩SELECT * FROM 学生
54、1 ORDER BY 入学成绩 DESC684.2.6 排序【格式】 SELECT TOPPERCENT FROM ORDER BYASC|DESC满足条件的前几个前百分之几的记录。TOP要与ORDER BY同时使用。TOP :1N32767TOP PERCENT: 0.01N99.99SELECT * TOP 4 FROM 学生1 ORDER BY 入学成绩SELECT * TOP 30 PERCENT FROM 学生1 ORDER BY 入学成绩【例】查询入学成绩最高的4个人的信息。DESC【例】查询入学成绩最低的那30%学生的信息。69练习【1】查询金额最大的那10%订单的信息。正确的S
55、QL语句是_。(2005年9月P12-75 )A.SELECT * TOP 10 PERCENT FROM 订单 B.SELECT TOP 10% * FROM 订单 ORDER BY 金额C.SELECT * TOP 10 PERCENT FROM 订单 ORDER BY 金额D.SELECT TOP 10 PERCENT * FROM 订单 ORDER BY 金额 DESC【2】“歌手”表中有“歌手号”、“姓名”、和“最后得分”三个字段,“最后得分”越高名次越靠前,查询前10名歌手的SQL语句是:(07.4 P14-17)SELECT * _ FROM 歌手 ORDER BY 最后得分_
56、。DTOP 10DESC70练习【3】设有学生表S(学号,姓名,性别,年龄),查询所有年龄小于等于18岁的女同学,并按年龄降序排序,正确的SQL命令是_ 。(07.4 P10-56) A.SELECT * FROM S WHERE 性别=女 AND ; 年龄=18 ORDER BY 4 DESC B.SELECT * FROM S WHERE 性别=女 AND ; 年龄=18 ORDER BY 年龄 C.SELECT * FROM S WHERE 性别=女 AND ; 年龄=18 ORDER BY 年龄 DESC D.SELECT * FROM S WHERE 性别=女 OR ; 年龄=18
57、ORDER BY 年龄 ASC A714.2.7 计算查询SQL不仅具有一般的检索能力,而且还有计算方式的检索。COUNT()统计记录的个数。SUM() 计算某一列值的总和(此列必须是数值型)。AVG() 计算某一列值的平均值(此列必须是数值型)。MAX() 计算某一列值的最大值。MIN() 计算某一列值的最小值。724.2.7 计算查询【例】查询选修了课程的学生人数。SELECT COUNT( 学号) FROM 选课DISTINCT 【说明】除非对关系中记录的个数进行计数,否则都应该使用DISTINCTSELECT COUNT(*) FROM 选课【例】查询所有成绩之和。SELECT SUM
58、(成绩) FROM 选课SUM(*) SELECT SUM(DISTINCT成绩) FROM 选课734.2.7 计算查询【例】查询国际贸易专业最高的入学成绩。SELECT MAX(入学成绩) FROM 学生 WHERE 专业=国际贸易【例】查询日语专业的平均入学成绩。SELECT AVG(入学成绩) FROM 学生 WHERE 专业= 日语744.2.7 计算查询【例】查询大于等于 “07010001”的所有科成绩的学号。SELECT 学号FROM 选课 WHERE 成绩 =(SELECT 成绩 FROM 选课 WHERE 学号=07010001)ALL等价于:(SELECT MAX(成绩)
59、 FROM 选课 WHERE 学号=07010001)SELECT 学号FROM 选课 WHERE 成绩 =754.2.7 计算查询【例】查询课程名为“大学计算基础”的所有成绩之和。SELE SUM(成绩) FROM 选课 WHERE 课程号; (SELECT 课程号 FROM 课程 WHERE 课程名=大学计算机基础)【例】查询课程名中带有“大学”的所有成绩之和。 (SELECT 课程号 FROM 课程 WHERE 课程名SELE SUM(成绩) FROM 选课 WHERE 课程号; LIKE %大学%) IN IN 76练习【1】有SQL语句:“SELECT DISTINCT 系号 FRO
60、M 教师 WHERE 工资=ALL (SELECT 工资 FROM 教师 WHERE 系号=”02“)”与如上语句等价的SQL语句是_。(2004年9月 P7-21 )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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国外原料订购合同
- 饲料行业同盟购销合同
- 房屋买卖合同规范化的意义
- 版合同协议广告业务发布
- 钢琴独奏演出安全保障合同
- 短期贷款抵押合同
- 热水器产品销售分红合同
- 工程用砂石料采购合同
- 借款合同争议解决上诉状
- 智能工厂自动化改造研发合作合同
- DB3710T 190-2023 花生病虫草害绿色防控技术规程
- 《如何解决台湾问题》课件
- 大部分分校:地域文化形考任务四-国开(CQ)-国开期末复习资料
- 理论力学知到智慧树章节测试课后答案2024年秋浙江大学
- 【MOOC】中西文化鉴赏-郑州大学 中国大学慕课MOOC答案
- 2024-2030年中国橄榄油行业市场发展动态及前景趋势分析报告
- 事业单位考试职业能力倾向测验(综合管理类A类)试题与参考答案(2024年)
- 《《论语》导读(复旦版)》章节测试答案
- 杜绝“死亡游戏”(梦回大唐)学生安全主题班会课件
- GB/T 15934-2024电器附件电线组件和互连电线组件
- 文学与伦理学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论