第三部分 关系数据库语言SQL
(一)、考核内容
(1)SQL功能特点、SQL基本操作
(2)SQL数据查询
(3)SQL视图操作、子查询
(二)、考核要求
(1)了解SQL语言的概貌、发展、标准化、主要特点。
(2)掌握SQL表基本操作方法:定义、修改与撤消基本表。
(3)掌握SQL数据更新方法:INSERT、DELETE、UPDATE语句的格式和用法。
(4)掌握SQL数据查询方法:SELECT语句的格式及各种用法。
(5)了解SQL的库函数。
(6) 了解视图的概念、作用;掌握视图的定义与撤消。
(一)选择
1.SQL语言是( )的语言,易学习。
A.过程化 B.非过程化 C.格式化 D.导航式
2.SQL语言是( )语言。
A.层次数据库 B.网络数据库 C.关系数据库 D.非数据库
3.SQL语言具有( )的功能。
A.关系规范化、数据操纵、数据控制 B.数据定义、数据操纵、数据控制
C.数据定义、关系规范化、数据控制 D.数据定义、关系规范化、数据操纵
4.SQL语言具有两种使用方式,分别称为交互式SQL和( )。
A.提示式SQL B.多用户SQL C.嵌入式SQL D.解释式SQL
5.假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系( )。
A.S B.SC,C C.S,SC D.S,C,SC
6.若用如下的SQL语句创建一个student表:
CREATE TABLE student(NO Char(4) NOT NULL,
NAME Char(8) NOT NULL,
SEX Char(2),
AGE tinyint)
可以插入到student表中的是 。
A.(‘1031’,‘曾华’,男,23) B.(‘1031’,‘曾华’,NULL,NULL)
C.(NULL,‘曾华’,‘男’,‘23’) D.(‘1031’,NULL,‘男’,23)
7. SL语言的数据操纵语句包括SELECT,INSQERT,UPDATE和DELETE等。其中最重要的,也是使用最频繁的语句是()。
A.SELECT B.INSERT C.UPDATE D.DELETE
第8到第10题基于这样的三个表即学生表S、课程表C和学生选课表SC,它们的结构如下:
S(S#,SN,SEX,AGE,DEPT)
C(C#,CN)
SC(S#,C#,GRADE)
其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩。
8.检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是( )
A.SELECT SN,AGE,SEX FROM S
WHERE AGE>(SELECT AGE FROM S
WHERE SN=“王华”)
B.SELECT SN,AGE,SEX
FROM S
WHERE SN=“王华”
C.SELECT SN,AGE,SEX FROM S
WHERE AGE>(SELECT AGE
WHERE SN=“王华”)
D.SELECT SN,AGE,SEX FROM S
WHERE AGE>王华.AGE
9、检索选修课程“C2”的学生中成绩最高的学生的学号。正确的SELECT语句是 。
A.SELECT S# FORM SC
WHERE C#=“C2” AND GRAD>=(SELECT GRADE FORM SC
WHERE C#=“C2”)
B.SELECT S# FORM SC
WHERE C#=“C2” AND GRADE IN
(SELECT GRADE FORM SC
WHERE C#=“C2”)
C.SELECT S# FORM SC
WHERE C#=“C2” AND GRADE NOT IN
(SELECT GRADE FORM SC
WHERE C#=“C2”)
D.SELECT S# FORM SC
WHERE C#=“C2” AND GRADE>=ALL
(SELECT GRADE FORM SC
WHERE C#=“C2”)
10、检索学生姓名及其所选修课程的课程号和成绩。正确的SELECT语句是 。
A.SELECT S.SN,SC.C#,SC.GRADE
FROM S
WHERE S.S#=SC.S#
B.SELECT S.SN,SC.C#,SC.GRADE
FROM SC
WHERE S.S#=SC.GRADE
C.SELECT S.SN,SC.C#,SC.GRADE
FROM S,SC
WHERE S.S#=SC.S#
D.SELECT S.SN,SC.C#,SC.GRADE
FROM S.SC
11.视图是一个“虚表”,视图的构造基于( )
A.基本表 B.视图
C.基本表或视图 D.数据字典
12.关系代数中的π运算符对应SELECT语句中的以下哪个子句?( )
A.SELECT B.FROM
C.WHERE D.GROUP BY
13.关系代数中的σ运算符对应SELECT语句中的以下哪个子句?( )
A.SELECT B.FROM
C.WHERE D.GROUP BY
14.关系代数中的×(笛卡尔积)运算符对应SELECT语句中的以下哪个子句?( )
A.SELECT B.FROM
C.WHERE D.GROUP BY
15.在SQL的排序子句:ORDER BY 总分 DESC, 英语 DESC 表示( )
A. 总分和英语分数都是最高的在前面
B. 总分和英语分数之和最高的在前面
C. 总分高的在前面,总分相同时英语分数高的在前面
D. 总分和英语分数之和最高的在前面,相同时英语分数高的在前面
16.使用查询语句:
SELECT STUDENT.学号, STUDENT.姓名, SUM(分数) FROM STUDENT, GRADE
WHERE STUDENT.学号=GRADE.学号
GROUP BY STUDENT.学号, STUDENT.姓名
查询结果是()
A.按学号分类的每个学生所有课程成绩的总分
B.按学号分类的每个学生各课程成绩
C.全体学生的各课程分类的成绩总分
D.所有学生的所有课程成绩总分
17.在T-SQL语言中,用于删除一个视图的命令的关键字是()
A. DELETE B. DROP C. CLEAR D. REMOVE
18. T-SQL语言的GRANT和REMOVE语句主要是用来维护数据库的()
A.完整性 B.可靠性 C.安全性 D.一致性
19.SQL语言中,实现数据检索的语句是( )。
A.SELECT B.INSERT
C.UPDATE D.DELETE
20.下列SQL语句中,修改表结构的是( )。
A.ALTER B.CREATE
C.UPDATE D.INSERT
21. 用于实现数据存取安全性的SQL语句是( )
A.CREATE TABLE B.COMMIT
C.GRANT和REVOKE D.ROLLBACK
(二)概念、术语:
术语
聚合函数
分组查询
视图
简述
(1)简述数据定义语句、数据查询语句、数据操纵语句和数据控制语句的功能用途是什么?
(2)简述 SQL 的定义功能。
(3)简述视图的优点。
(三)应用题
1.以下面的数据库关系模式为例,写出完成以下查询功能的SQL语句。(每小题2分)
关系模式如下:
l 学生(学号,学生姓名,出生年月,出生地,专业号,班级)
简写为:s(s#,sname,ssex,sbirthin,placeofb,scode#,class)
l 课程(课程号,课程名,学时)
简写为:c(c#,cname,classh)
l 学习关系(学号,课程号,分数)
简写为:sc(s#,c#,grade)
l 专业(专业代码,专业名称)
简写为:ss(scode#,ssname)
l 教师(教职工号,教师姓名,教师性别,教师出生年月,职称,教研室,电话号码)
简写为:t(t#,tname,tsex,tbirthin,titleof,tresction,tel)
l 讲授关系(教职工号,课程号)
简写为:teach(t#,c#)
(1)查询201002班男生的信息。
(2)查询最低分大于70、最高分小于90的学生的姓名。
(3)查询所有女生记录信息,并以班级降序排列。
(4)查询选取修数据结构课程的学生姓名及所在专业代码。
(5)查询至少有5名学生选修的并以3开头的课程号的平均分。
2. 以下面的数据库关系模式为例,写出完成以下查询功能的SQL语句。(每小题2分)
关系模式如下:
l 学生(学号,学生姓名,出生年月,出生地,专业号,班级)
简写为:s(s#,sname,ssex,sbirthin,placeofb,scode#,class)
l 课程(课程号,课程名,学时)
简写为:c(c#,cname,classh)
l 学习关系(学号,课程号,分数)
简写为:sc(s#,c#,grade)
l 专业(专业代码,专业名称)
简写为:ss(scode#,ssname)
l 教师(教职工号,教师姓名,教师性别,教师出生年月,职称,教研室,电话号码)
简写为:t(t#,tname,tsex,tbirthin,titleof,tresction,tel)
l 讲授关系(教职工号,课程号)
简写为:teach(t#,c#)
(1)查询来自南京或上海的学生学号和姓名。
(2)查询选修课程号为C401001的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
(3)查询计算机科学或网络工程专业姓张的学生的信息。
(4)查询缺少了成绩的学生的学号和课程号。
(5)查询每个专业的男、女生分别有多少人数。
3. 设有如下所示的三个关系A、B、AB。
其中各个属性的含义如下:A#(商店代号)、ANAME(商店名)、WQTY(店员人数)、CITY(所在城市)、B#(商品号)、BNAME(商品名称)、PRICE(价格)、QTY(商品数量)。
试用SQL语言写出下列查询,并给出执行结果:
(1).找出店员人数不超过100人或者在长沙市的所有商店的代号和商店名。
(2).找出供应书包的商店名。
(3).找出至少供应代号为256的商店所供应的全部商品的商店名和所在城市。
4. 己知三个关系R(A,B,C)、S(A,D,E)和T(D,F),其中,名称相同的属性为关联属性,C、E为数值型属性。
试用SQL语句实现如下操作:
(1).将R、S和T三个关系按关联属性建立一个视图R-S-T;
(2).对视图R-S-T按属性A分组后,求属性C和E的平均值。
5. 设有关系R(A,B)和S(A,C),A为相同属性。
试用SQL语句实现:
(1).查询属性C>50时,R中相关联的属性B之值。
(2).当属性C=40时,将R中与之相关连的属性B值修改为b4。
6. 已知学生表S和学生选课表SC。其关系模式如下:
S(SNo,SN,SD,PROV)
SC(SNO,CN,GR)
其中,SNO为学号,SN为姓名,SD为系名,PROV为省区,CN为课程名,GR为分数。
试用SQL语言实现下列操作:
(1).查询“信息系”的学生来自哪些省区。
(2).按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。
7. 设有关系模式:
SB(SN,SNAME,CITY)
其中,S表示供应商,SN为供应商代号,SNAME为供应商名字,CITY为供应商所在城市,主关键字为SN。
PB(PN,PNAME,COLOR,WEIGHT)
其中P表示零件,PN为零件代号,PNAME为零件名字,COLOR为零件颜色,WEIGHT为零件重量,主关键字为PN。
JB(JN,JNAME, CITY)
其中,J表示工程,JN为工程编号,JNAME为工程名字,CITY为工程所在城市,主关键字为JN。
SPJB(SN,PN,JN,QTY)
其中,SPJ表示供应关系,SN是为指定工程提供零件的供应商代号,PN为所提供的零件代号,JN为工程编号,QTY表示提供的零件数量,主关键字为(SN,PN,JN),外部关键字为SN,PN,JN。
写出实现以下各题功能的SQL语句:
(1).取出所有工程的全部细节;
(2).取出所在城市为上海的所有工程的全部细节;
(3).取出重量最轻的零件代号;
(4).取出为工程J1提供零件的供应商代号;
(5).取出为工程J1提供零件P1的供应商代号;
(6).取出由供应商S1提供零件的工程名称;
(7).取出供应商S1提供的零件的颜色;
(8).取出为工程J1或J2提供零件的供应商代号;
(9).取出为工程J1提供红色零件的供应商代号;
(10).取出为所在城市为上海的工程提供零件的供应商代号;
(11).取出为所在城市为上海或北京的工程提供红色零件的供应商代号;
(12).取出供应商与工程所在城市相同的供应商提供的零件代号;
(13).取出上海的供应商提供给上海的任一工程的零件的代号;
(14).取出至少由一个和工程不在同一城市的供应商提供零件的工程代号;
(15).取出上海供应商不提供任何零件的工程的代号;
(16).取出这样一些供应商代号,它们能够提供至少一种由红色零件的供应商提供的零件;
(17).取出由供应商S1提供零件的工程的代号;
8. 以下面的数据库为例,用SQL完成以下检索。关系模式如下:
仓库(仓库号,城市,面积)←→ WAREHOUSE(WMNO,CITY,SIZE)
职工(仓库号,职工号,工资)←→ EMPLOYEE(WHNO,ENO,SALARY)
订购单(职工号,供应商号,订购单号,订购日期)←→ ORDER(SNO,SNO,ONO,DATE)
供应商(供应商号,供应商名,地址)←→ SUPPLIER(SNO,SNAME,ADDR)
(1).检索在北京的供应商的名称。
(2).检索发给供应商S6的订购单号。
(3).检索出职工E6发给供应商S6的订购单号。
(4).检索出向供应商S3发过订购单的职工的职工号和仓库号。
(5).检索出目前与S3供应商没有联系的职工信息。
(6).检索出目前没有任何订购单的供应商信息。
(7).检索出和职工E1、E3都有联系的北京的供应商信息。
(8).检索出目前和华通电子公司有业务联系的每个职工的工资。
(9).检索出与工资在1220元以下的职工没有联系的供应商的名称。
(10).检索出向S4供应商发出订购单的仓库所在的城市。
(11).检索出在上海工作并且向S6供应商发出了订购单的职工号。
(12).检索出在广州工作并且只向S6供应商发出了订购单的职工号。
(13).检索出由工资多于1230元的职工向北京的供应商发出的订购单号。
(14).检索出仓库的个数。
(15).检索出有最大面积的仓库信息。
(16).检索出所有仓库的平均面积。
(17).检索出向S4供应商发出订购单的那些仓库的平均面积。
(18).检索出每个城市的供应商个数。
(19).检索出每个仓库中工资多于1220元的职工个数。
(20).检索出和面积最小的仓库有联系的供应商的个数。
(21).检索出工资低于本仓库平均工资的职工信息。
9. 以下面的数据库为例,用SQL完成以下更新操作。关系模式如下:
仓库(仓库号,城市,面积)←→ WAREHOUSE(WMNO,CITY,SIZE)
职工(仓库号,职工号,工资)←→ EMPLOYEE(WHNO,ENO,SALARY)
订购单(职工号,供应商号,订购单号,订购日期)←→ ORDER(SNO,SNO,ONO,DATE)
供应商(供应商号,供应商名,地址)←→ SUPPLIER(SNO,SNAME,ADDR)
(1).插入一个新的供应商元组(S9,智通公司,沈阳)。
(2).删除目前没有任何订购单的供应商。
(3).删除由在上海仓库工作的职工发出的所有订购单。
(4).北京的所有仓库增加100m2的面积。
(5).给低于所有职工平均工资的职工提高5%的工资。
10.现有关系数据库如下:
学生(学号,姓名,性别,专业)
课程(课程号,课程名,学分)
学习(学号,课程号,分数)
分别用关系代数表达式和SQL语句实现下列1—5小题(注意:每小题都要分别写出关系代数表达式和SQL语句):
(1)检索所有选修了课程号为“C112”的课程的学生的学号和分数;
(2)检索“英语”专业学生所学课程的信息,包括学号、姓名、课程名和分数;
(3)检索“数据库原理”课程成绩高于90分的所有学生的学号、姓名、专业和分数;
(4)检索没学课程号为“C135”课程的学生信息,包括学号,姓名和专业;
(5)检索至少学过课程号为“C135”和“C219”的课程的学生的信息,包括学号、姓名和专业。
11.关系模式如下:
学生S(SNO, SN, SEX, AGE)
课程C(CNO, CN, PCNO) PCNO为直接先行课
选课SC(SNO,CNO,G) G为课程考试成绩
(1)用关系代数及SQL语言写出查询语句,查询所有学生都选修的课程名CN。
(2)用关系代数及SQL语言写出查询语句,查询“DB”课成绩在90分以上的学生的姓名。
(3)将选修课程“DB”的学生学号,姓名建立视图SDB。
(4)在学生选课关系SC中,把英语课的成绩提高10%。
12. 在教学管理数据库中有学生、课程和选课三个表,它们的定义分别为为:
Student(Sno Char(5),Sname Char(6),Ssex Char(2),
Sage Int,Sdept Char(2))
Course(Cno Char(1), Cname Char (10), Cpno Char(1),
Ccredit Int)
SC(Sno Char(5), Cno Char(1), Grade int)
根据下面的要求,写出SQL语句。
① 用SQL语句建立数据表SC,以(Sno, Cno)作为主键;
② 向Student表插入一条记录(95011, 张三, 女, 19,CS);
③ 检索计算机系(CS)所有女同学的姓名和年龄;
④ 检索选修了2号课程学生的学号、姓名、成绩,并按成绩降序排序;
⑤ 建立一个信息系(IS)所有不及格(Grade<60)学生的视图。
第三部分 关系数据库语言SQL
(一)选择
1. B 2. C 3. B 4. C 5. D
6. B 7. A. 8. A 9. D 10. C
11. C 12 . A 13. C 14. B 15. C
16. A 17. B 18. C 19. A 20. A
21. C
(二)概念、术语
术语
聚合函数:能够根据查询结果的记录集或根据查询结果的记录集中某列值的特点返回一个汇总信息的函数。
分组查询:在SQL语言中,把元组按某个或某些列上相同的值分组,然后再对各组进行相应操作的查询方式称为分组查询。
视图:也称用户视图或外模式,反映了数据库的局部逻辑结构,是数据库应用系统中各不同用户看到和使用的数据库。
简述
(1)简述数据定义语句、数据查询语句、数据操纵语句和数据控制语句的功能用途是什么?
答:数据定义语句用于定义数据库的逻辑结构,包括定义基本表、定义视图和定义索引。
数据查询语句按不同查询条件实现对数据库中数据的检索查询。
数据操纵语句用于更改和操作表中的数据,包括数据插入、数据修改和数据删除。
数据控制语句法实现用户授权、基本表和视图授权、事务控制、完整性和安全性控制等。
(2)简述 SQL 的定义功能。
答:SQL 的数据定义功能包括定义表、定义视图和定义索引。 SQL 语言使用 cREATE TABLE 语句建立基本表, ALTER TABLE 语句修改基本表定义, DROP TABLE 语句删除基本表;使用 CREATE INDEX 语句建立索引, DROP INDEX 语句删除索引;使用 CREATE VIEW 语句建立视图, DROP VIEW 语句删除视图。
(3)简述视图的优点。
答:
( l )视图能够简化用户的操作; ( 2 )视图使用户能以多种角度看待同一数据; ( 3 )视图对重构数据库提供了一定程度的逻辑独立性; ( 4 )视图能够对机密数据提供安全保护。
(三)应用题
1.
参考答案:
(1)查询201002班男生的信息。
select * from s where class=‘201002’ and ssex=‘男’
(2)查询最低分大于70、最高分小于90的学生的姓名。
select s# from sc group s#
having min(grade)>70 and max(grade)<90
(3)查询所有女生记录信息,并以班级降序排列。
select * from s where ssex=‘女’ order by class desc
(4)查询选取修数据结构课程的学生姓名及所在专业代码。
select sname,scode# from s,sc,c where s.s#=sc.s# and sc.c#=c.c# and cname=‘数据结构’;
(5)查询至少有5名学生选修的并以3开头的课程号的平均分。
select c#,avg(grade) from sc where c# like ‘3%’ group by c# having count(*)>=5
2.
参考答案:
(1)查询来自南京或上海的学生学号和姓名。
select s#,sname from s where placeofb='上海' or placeofb='南京'
(2)查询选修课程号为C401001的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
select s#,grade from sc where c#='C401001' order by grade desc,s# asc
(3)查询计算机科学或网络工程专业姓张的学生的信息。
select * from s where scode# in (select scode# from ss where ssname=’计算机科学’or ssname=’网络工程’) and sname like '张%'
(4)查询缺少了成绩的学生的学号和课程号。
select s#,c# from sc where grade is null
(5)查询每个专业的男、女生分别有多少人数。
select scode#,ssex,count(*) from s group by scode#,ssex
3. 参考答案:
(1).找出店员人数不超过100人或者在长沙市的所有商店的代号和商店名。
SELECT A#,ANAME
FROM A;
WHERE WQTY<=100 OR CITY=“长沙”
(2).找出供应书包的商店名。
SELECT A.ANAME
FROM A,B,AB;
WHERE A.A#=AB.A# AND B.B#=AB.B# AND B.BNAME=“书包”
(3).找出至少供应代号为256的商店所供应的全部商品的商店名和所在城市。
SELECT A.ANAME,A.CITY
FROM A,B;
WHERE A.A#=AB.A# AND AB.B# IN
(SELECT AB.B#;
FROM AB
WHERE A#=“256”)
4. 参考答案:
(1).CREATE VIEW R-S-T
AS SELECT R.A,B,C,S.D,E,F
FROM R,S,T
WHERE R.A=S.A AND S.D=T.D
(2).SELECT AVG(C),AVG(E)
FROM R-S-T
GROUP BY A
5. 参考答案:
(1).SELECT B
FROM R,S
WHERE R.A=S.A AND C>50
(2).UPDATE R
SET B=‘b4’
WHERE A IN
(SELECT A
FROM S
WHERE C=40)
6. 参考答案:
(1).SELECT DISTINCT PROV
FROM S
WHERE SD=“信息系”
(2).SELECT SN,GR
FROM S,SC
WHERE SD=“英语系”AND CN=“计算机”AND S.SNO=SC.SNO
ORDER BY GR DESC;
7. 参考答案:
(1).取出所有工程的全部细节;
SELECT *
FROM JB
(2).取出所在城市为上海的所有工程的全部细节;
SELECT *
FROM JB
WHERE CITY=“上海”
(3).取出重量最轻的零件代号;
SELECT PN
FROM PB
WHERE WEIGHT=
(SELECT MIN(WEIGHT) FROM PB)
(4).取出为工程J1提供零件的供应商代号;
SELECT SN
FROM SPJB
WHERE JN=“J1”
(5).取出为工程J1提供零件P1的供应商代号;
SELECT SN
FROM SPJB;
WHERE JN=‘Jl’AND PN=‘Pl’
(6).取出由供应商S1提供零件的工程名称;
SELECT JB.JNAME
FROM JB,SPJB
WHERE JB.JN=SPJB.JN AND SPJB.SN=‘S1’
(7).取出供应商S1提供的零件的颜色;
SELECT DISTINCT PB.COLOR
FROM PB,SPJB
WHERE PB.PN=SPJB.PN AND SPJB.SN=‘S1’
(8).取出为工程J1或J2提供零件的供应商代号;
SELECT DISTINCT SN
FROM SPJB
WHERE JN=‘J1’OR JN=‘J2’
(9).取出为工程J1提供红色零件的供应商代号;
SELECT DISTINCT SPJB.SN
FROM SPJB,PB
WHERE PB.PN=SPJB.PN AND SPJB.JN=‘J1’AND PB.COLOR=‘红’
(10).取出为所在城市为上海的工程提供零件的供应商代号;
SELECT DISTINCT SPJB.SN
FROM SPJB, JB
WHERE SPJB.JN=JB.JN AND JB.CITY‘上海’
(11).取出为所在城市为上海或北京的工程提供红色零件的供应商代号;
SELECT SPJB.SN
FROM PB,JB SPJB
WHERE SPJB.PN=PB.PN AND JB.JN=SPJB.JN AND PB.COLOR=’红’ AND JB.CITY=’上海’
(12).取出供应商与工程所在城市相同的供应商提供的零件代号;
SELECT DISTINCT SPJB.PN
FROM SB,JB,SPJB
WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY=JB.CITY
(13).取出上海的供应商提供给上海的任一工程的零件的代号;
SELECT SPJB.PN
FROM SB,JB,SPJB
WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY=’上海’
(14).取出至少由一个和工程不在同一城市的供应商提供零件的工程代号;
SELECT DISTINCT SPJB.JN
FROM SB,JB,SPJB
WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY
(15).取出上海供应商不提供任何零件的工程的代号;
SELECT DISTINCT JN
FROM SPJB
WHERE JN NOT IN
(SELECT DISTINCT SPJB.JN
FROM SB,SPJB
WHERE SB.SN=SPJB.SN AND SB.CITY=’上海’)
(16).取出这样一些供应商代号,它们能够提供至少一种由红色零件的供应商提供的零件;
SELECT DISTINCT SPJB.SN
FROM PB,SPJB
WHERE SPJB.PN IN
(SELECT SPJB.PN
FROM SPJB,SB,PB
WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND PB.COLOR=’红’)
(17).取出由供应商S1提供零件的工程的代号;
SELECT DISTINCT SPJB.JN
FROM SB,PB,SPJB
WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND SB.SN=’S1’
8. 参考答案:
(1).检索在北京的供应商的名称。
SELECT SNAME
FROM SUPPLIER
WHERE ADDR=“北京”;
(2).检索发给供应商S6的订购单号。
SELECT ONO
FROM ORDER
WHERE SNO=“S6”;
(3).检索出职工E6发给供应商S6的订购单号。
SELECT ONO
FROM ORDER
WHERE SNO=“S6” AND ENO=“E6”;
(4).检索出向供应商S3发过订购单的职工的职工号和仓库号。
SELECT ENO,WHNO
FROM EMPLOYEE
WHERE ENO IN
(SELECT ENO
FROM ORDER
WHERE SNO=“S3”);
或:SELECT ENO,WHNO
FROM EMPLOYEE,ORDER
WHERE EMPLOYEE.ENO=ORDER.ENO AND ORDER.SNO=“S3”;
(5).检索出目前与S3供应商没有联系的职工信息。
SELECT ENO,WHNO
FROM EMPLOYEE
WHERE ENO NOT IN
(SELECT ENO
FROM ORDER WHERE SNO=“S3”);
(6).检索出目前没有任何订购单的供应商信息。
SELECT *
FROM SUPPLIER
WHERE SNO NOT IN
(SELECT SNO FROM ORDER);
(7).检索出和职工E1、E3都有联系的北京的供应商信息。
SELECT *
FROM SUPPLIER
WHERE ADDR=“北京” AND
(EXISTS (SELECT * FROM ORDER WHERE SNO=SUPPIER.SNO AND ENO=“E3”))
AND
(EXISTS (SELECT * FROM ORDER WHERE SNO=SUPPIER.SNO AND ENO=“E6”));
(8).检索出目前和华通电子公司有业务联系的每个职工的工资。
SELECT ENO,SALARY
FROM EMPLOYEE
WHERE ENO IN
(SELECT ENO FROM ORDER WHERE SNO IN
(SELECT SNO FROM SUPPLIER WHERE ADDR=“华通电子公司”));
或:SELECT ENO,SALARY
FROM EMPLOYEE,ORDER,SUPPLIER
WHERE EMPLOYEE.ENO=ORDER.ENO AND ORDER.SNO=SUPPLIER.SNO
AND SUPPLIER.ADDR=“华通电子公司”;
(9).检索出与工资在1220元以下的职工没有联系的供应商的名称。
SELECT SNAME
FROM SUPPLIER
WHERE SNO NOT IN
(SELECT SNO FROM ORDER WHERE ENO IN
(SELECT ENO FROM EMPLOYEE WHERE SALARY<1220));
(10).检索出向S4供应商发出订购单的仓库所在的城市。
SELECT CITY
FROM WAREHOUSE
WHERE WHNO IN (SELECT WHNO FROM EMPLOYEE
WHERE ENO IN (SELECT ENO FROM ORDER WHERE SNO=“S4”));
或:SELECT CITY
FROM WAREHOUSE,EMPLOYEE,ORDER
WHERE WAREHOUSE.WHNO=EMPLOYEE.WHNO
AND EMPLOYEE.ENO=ORDER.ENO AND ORDER.SNO=“S4”;
(11).检索出在上海工作并且向S6供应商发出了订购单的职工号。
SELECT ENO
FROM EMPLOYEE
WHERE WHNO IN
(SELECT WHNO FROM WAREHOUSE WHERE CITY=“上海”)
AND (ENO IN SELECT ENO FROM ORDER WHERE SNO=“S6”);
或:SELECT ENO
FROM EMPLOYEE,WAREHOUSE,ORDER
WHERE EMPLOYEE.WHNO=WREHOUSE.WHNO
AND WREHOUSE.CITY=“上海”
AND EMPLOYEE.ENO=ORDER.ENO AND ORDER.SNO=“S6”;
(12).检索出在广州工作并且只向S6供应商发出了订购单的职工号。
SELECT ENO
FROM EMPLOYEE
WHERE (WHNO IN SELECT WHNO FROM WAREHOUSE WHERE CITY=“广州”)
AND (ENO IN SELECT ENO FROM ORDER WHERE SNO=“S6”)
AND (NOT EXISTS (SELECT * FROM ORDER
WHERE SNO<>“S6” AND ENO=EMPLOYEE.ENO));
(13).检索出由工资多于1230元的职工向北京的供应商发出的订购单号。
SELECT ONO
FROM ORDER
WHERE (ENO IN SELECT ENO FROM EMPLOYEE WHERE SALARY>1230)
AND (SNO IN SELECT SNO FROM SUPPLIER WHERE ADDR=“北京” );
或:SELECT ONO
FROM ORDER,EMPLOYEE,SUPPLIER
WHERE ORDER.ENO= EMPLOYEE.ENO AND EMPLOYEE.SALARY>1230
AND ORDER.SNO= SUPPLIER.SNO AND SUPPLIER. ADDR=“北京”;
(14).检索出仓库的个数。
SELECT COUNT(*) FROM WAREHOUSE;
(15).检索出有最大面积的仓库信息。
SELECT *
FROM WAREHOUSE OUTER
WHERE OUTER.SIZE=(SELECT MAX(SIZE) FROM WAREHOUSE INNER);
(16).检索出所有仓库的平均面积。
SELECT AVG(SIZE) FROM WAREHOUSE;
(17).检索出向S4供应商发出订购单的那些仓库的平均面积。
SELECT AVG(SIZE)
FROM WAREHOUSE
WHERE WHNO IN (SELECT WHNO FROM EMPLOYEE
WHERE ENO IN (SELECT ENO FROM ORDER WHERE SNO=“S4”));
(18).检索出每个城市的供应商个数。
SELECT CITY,COUNT(SNO)
FROM SUPPLIER
GROUP BY CITY;
(19).检索出每个仓库中工资多于1220元的职工个数。
SELECT WHNO,COUNT(ENO)
FROM EMPLOYEE
WHERE SALARY>1220
GROUP BY WHNO;
或:SELECT WHNO,COUNT(ENO)
FROM EMPLOYEE
GROUP BY WHNO
HAVING SALARY>1220;
(20).检索出和面积最小的仓库有联系的供应商的个数。
SELECT COUNT(DISTINCT SNO)
FROM ORDER
WHERE ENO IN
SELECT ENO FROM EMPLOYEE
WHERE WHNO IN
SELECT WHNO FROM WAREHOUSE OUTER
WHERE OUTER.SIZE=SELECT MIN(SIZE)
FROM WAREHOUSE INNER;
(21).检索出工资低于本仓库平均工资的职工信息。
SELECT * FROM EMPLOYEE OUTER
WHERE OUTER.SALARY<(SELECT AVG(SALARY) FROM EMPLOYEE INNER
WHERE INNER.WHNO=OUTER.WHNO GROUP BY WHNO);
9. 参考答案:
(1).插入一个新的供应商元组(S9,智通公司,沈阳)。
INSERT INTO SUPPLIER VALUES(S9,智通公司,沈阳);
(2).删除目前没有任何订购单的供应商。
DELETE FROM SUPPLIER
WHERE NOT EXISTS (SELECT * FROM ORDER WHERE ORDER.SNO=SUPPLIER.SNO);
或:DELETE FROM SUPPLIER
WHERE SNO NOT IN (SELECT SNO FROM ORDER);
(3).删除由在上海仓库工作的职工发出的所有订购单。
DELETE FROM ORDER
WHERE ENO IN (SELECT ENO FROM EMPLOYEE
WHERE WHNO IN {SELECT WHNO FROM WAREHOUSE WHERE CITY=“上海”}};
(4).北京的所有仓库增加100m2的面积。
UPDATE WAREHOUSE
SET SIZE=SIZE+100 WHERE CITY=“北京”;
(5).给低于所有职工平均工资的职工提高5%的工资。
UPDATE EMPLOYEE OUTER
SET OUTER.SALARY=OUTER.SALARY*1.05
WHERE OUTER.SALARY<SELECT AVG(SALARY) FROM EMPLOYEE INNER
10. 参考答案:
(1). 检索所有选修了课程号为“C112”的课程的学生的学号和分数;
SQL语句:
SELECT 学号,分数 FROM 学习 WHERE 课程号=’C112’
(SELECT 学号,分数 FROM 学习1分,WHERE 课程号=’C112’1分)
关系代数:
π学号,分数(课程号=’C112’(学习))
(π学号,分数1分,课程号=’C112’(学习)1分。
(2). 检索“英语”专业学生所学课程的信息,包括学号、姓名、课程名和分数;
SQL语句:
SELECT 学生.学号,姓名,课程名,分数
FROM 学生,学习,课程
WHERE 学习.学号=学生.学号 AND 学习.课程号=课程.课程号 AND 专业=’英语’
关系代数:
π学号,姓名,课程名,分数(π学号,姓名(专业=’英语’(学生))学习π课程号,课程名(课程))
(3). 检索“数据库原理”课程成绩高于90分的所有学生的学号、姓名、专业和分数;
SQL语句:
SELECT 学生.学号,姓名,专业,分数
FROM 学生,学习,课程
WHERE 学生.学号=学习.学号 AND 学习.课程号=课程.课程号 AND分数>90 AND 课程名=‘数据库原理’
关系代数:
π学号,姓名,专业,分数(π学号,姓名,专业(学生)(分数>90(学习))π课程号,课程名( 课程名=’数据库原理’(课程)))
(4). 检索没学课程号为“C135”课程的学生信息,包括学号,姓名和专业;
SQL语句:
SELECT 学号,姓名,专业
FROM 学生
WHERE 学号 NOT IN
(SELECT 学号 FROM 学习 WHERE 课程号=‘C135’)
关系代数:
(π学号(学生)-π学号(课程号=‘C135’ (学习)))(π学号,姓名,专业(学生)
(5). 检索至少学过课程号为“C135”和“C219”的课程的学生的信息,包括学号、姓名和专业。
SQL语句:
SELECT 学号,姓名,专业 FROM 学生 WHERE 学号 IN
(SELECT X1.学号 FROM 学习 X1,学习 X2 WHERE X1.学号=X2.学号 AND X1.课程号=‘C135’AND X2.课程号=‘C219’)
关系代数:
(π学号,课程号(学习)÷π课程号(课程号=‘C135’∨课程号=‘C219’ (课程)))π学号,姓名,专业(学生)
11. 参考答案:
(1)ЛCN (ЛCNO,SNO(SC)÷ЛSNO(S) ЛCNO,CN(C))
SELECT CN
FROM C
WHERE NOT EXISTS (SELECT * FROM S WHERE NOT EXISTS
(SELECT * FROM SC
WHERE SNO=S.SNO AND CNO=C.CNO));(3分)
(2)ЛSN(SσG>90(SC) σCN=’DB’(C) )
SELECT SN
FROM S, SC, C
WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND CN=’DB’AND G>90;
(3)CTEATE VIEW SDB
AS
SELECT SNO, SN
FROM S, SC, C
WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND C.CN=’DB’;
(4)UPDATE SC
SET G=1.1*G
WHERE CNO IN
(SELECT CNO
FROM C
WHERE CN=’英语’);
12. 参考答案:
① 用SQL语句建立数据表SC,以(Sno, Cno)作为主键
CREATE TABLE SC (
Sno CHAR(5),
Cno CHAR(1),
Grade INT,
PRIMARY KEY (Sno,Cno)
);
② 向Student表插入一条记录(95011, 张三, 女, 19,CS)
INSERT INTO Student VALUES('95011', '张三', '女', 19, 'CS');
③ 检索计算机系(CS)所有女同学的姓名和年龄;
SELECT Sname, Sage FROM Student
WHERE Sdept='CS' AND Ssex='女';
④ 检索选修了2号课程学生的学号、姓名、成绩,并按成绩降序排序;
SELECT Student.Sno, Sname, Grade
FROM Student INNER JOIN SC ON Student.Sno=SC.Sno
WHERE SC.Cno='2'
ORDER BY Grade DESC
⑤ 建立一个信息系(IS)所有不及格(Grade<60)学生的视图vwStudent。
CREATE VIEW vwStudent AS (
SELECT Student.*
FROM Student INNER JOIN SC ON Student.Sno=SC.Sno
WHERE Sdept='IS' AND Grade < 60
)