第三章 SQL语言
一、选择题
1. SQL语言是(B)的语言,容易学习。
A.过程化 B. 非过程化C.格式化 D. 导航式
2. SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是(A)。
A. SELECT B. INSERT C. UPDATE D. DELETE
3. 在视图上不能完成的操作是(C)。
A. 更新视图 B. 查询
C. 在视图上定义新的表 D. 在视图上定义新的视图
4. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能(C)。
A. 数据查询 B.数据操纵 C. 数据定义 D. 数据控制
5. SQL语言中,删除一个视图的命令是(B)。
A.DELETE B.DROPC.CLEARD.REMOVE
6. 在SQL语言中的视图VIEW是数据库的(A)。
A. 外模式 B. 模式 C. 内模式 D. 存储模式
7. 下列的SQL语句中,(D)不是数据定义语句。
A. CREATE TABLE B. DROP VIEW C. CREATE VIEW D. GRANT
8. 若要撤销数据库中已经存在的表S,可用(C)。
A. DELETE TABLE S B. DELETE SC. DROP TABLE S D. DROP S
9. 若要在基本表S中增加一列CN(课程名),可用(C)。
A.ADD TABLE S(CN CHAR(8))
B.ADD TABLE S ALTER(CN CHAR(8))
C.ALTERTABLE S ADD(CN CHAR(8))
D.ALTER TABLE S (ADD CN CHAR(8))
10. 学生关系模式 S( S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是()。
A. DELETE Age from S B. ALTER TABLE S DROP Age
C. UPDATE S Age D. ALTER TABLE S ‘Age’
11. 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是(A)。
A. S.S# = SC.S# and C.C# = SC.C# andSAGE>=20 and CNAME=‘ACCESS’
B. S.S# = SC.S# and C.C# = SC.C# and SAGE in>=20 and CNAME in ‘ACCESS’
C. SAGE in>=20 and CNAME in ‘ACCESS’
D. SAGE>=20 and CNAME=’ ACCESS’
12. 设关系数据库中一个表S的结构为S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要把“张二的化学成绩80分”插入S中,则可用(D)。
A. ADD
INTO S
VALUES(’张二’,’化学’,’80’)
B. INSERT
INTO S
VALUES(’张二’,’化学’,’80’)
C. ADD
INTO S
VALUES(’张二’,’化学’,80)
D.INSERT
INTO S
VALUES(’张二’,’化学’,80)
13. 设关系数据库中一个表S的结构为:S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要更正王二的化学成绩为85分,则可用()。
A.UPDATE S
SETgrade=85
WHERESN=’王二’ AND CN=’化学’
B. UPDATE S
SET grade=’85’
WHERE SN=’王二’ AND CN=’化学’
C. UPDATE grade=85
WHERE SN=’王二’ AND CN=’化学’
D. UPDATE grade=’85’
WHERE SN=’王二’ AND CN=’化学’
14. 在SQL语言中,子查询是(D)。
A. 返回单表中数据子集的查询语言
B. 选取多表中字段子集的查询语句
C. 选取单表中字段子集的查询语句
D. 嵌入到另一个查询语句之中的查询语句
15. SQL是一种(C)语言。
A. 高级算法 B. 人工智能C. 关系数据库 D. 函数型
16. 有关系S(S#,SNAME,SEX),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SEX是性别, C#是课程号,CNAME是课程名称。要查询选修“数据库”课的全体男生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是(A)。
A.S.S# = SC.S# and C.C# = SC.C# and SEX=’男’ and CNAME=’数据库’
B.S.S# = SC.S# and C.C# = SC.C# and SEX in’男’and CNAME in’数据库’
C.SEX ’男’ and CNAME ’ 数据库’
D.S.SEX=’男’ and CNAME=’ 数据库’
17. 若用如下的SQL语句创建了一个表SC:
CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插入如下行时,(B)行可以被插入。
A.(’201009’,’111’,60,必修)
B.(’200823’,’101’,NULL,NULL)
C.(NULL,’103’,80,’选修’)
D.(’201132’,NULL,86,’ ’)
18. 假设学生关系S(S#,SNAME,SEX),课程关系C(C#,CNAME),学生选课关系SC(S#,C#,GRADE)。要查询选修“Computer”课的男生姓名,将涉及到关系(D)。
A. S B. S,SC C. C,SC D. S,C,SC
二、简答题
1. 试述SQL语言的特点。
答:(1)综合统一。SQL语言集定义语言DDL,数据操纵语言DML、数据控制语言DCL的功能与一体。
(2)高度非过程化。用SQL语言进行数据操纵,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。
(3)面向集合的操作方式。SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
(4)以同一种语法结构提供两种使用方式。SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。
(5)语言简洁,易学易用。
2. 试述SQL的定义功能。
答:SQL的数据定义功能包括定义表、定义视图和定义索引。SQL语言使用CREATE TABLE语句建立基本表,ALTER TABLE语句修改基本表定义,DROP TABLE语句删除基本表;使用CREATE INDEX语句建立索引,DROP INDEX语句删除索引;使用CREATEVIEW语句建立视图,DROPVIEW语句删除视图。
3. 用SQL语句建立第3章习题3中的四个表。
答:
对于S表:S ( SNO, SNAME,STATUS, CITY);
建S表:
CREATE TABLE S ( SNO CHAR(2) UNIQUE,SNAME CHAR(6), STATUS CHAR(2), CITY CHAR(4));
对于P表:P(PNO, PNAME, COLOR,WEIGHT);
建P表:CREATE TABLE P (PNOCHAR(2) UNIQUE, PNAM CHAR(6), COLOR CHAR(2), WEIGHT INTEGER);
对于J表:J (JNO, JNAME, CITY);
建J表: CREATE TABLE J ( JNOCHAR(2) UNIQUE, JNAME CHAR(8), CITY CHAR(4));
对于SPJ表:SPJ( SNO, SNO, JNO,QTY);
建SPJ表:CREATE TABLE SPJ (SNOCHAR(2), PNO CHAR(2), JNO CHAR(2), QTY INTEGER);
4. 针对上题中建立的四个表试用SQL语言完成第3章习题3中的查询。
(1) 求供应工程J零件的供应商号码SNO;
SELECTDISTINCY SNO FROM SPJ WHERE JNO = ‘J1’
(2) 求供应工程J零件P1的供应商号码SNO
SELECT DISTINCY SNO FROM SPJ WHEREJNO = ‘J1’ AND PNO = ‘P1’
(3) 求供应工程J1零件为红色的供应商号码SNO
SELECT SNO FROM SPJ, P WHERE JNO = ‘J1’ AND SPJ.PNO = P.PNO AND COLOR = ‘红’
(4) 求没有使用天津供应商生产的红色零件的工程号JNO;
SELECT DISTINCY JNO FROM SPJ WHERE JNONOT IN ( SELECT JNO FROM SPJ, P, S WHERE S.CITY = ‘天津’ AND COLOR =’红’ AND S.SNO = SPJ.SNO AND P.PNO = SPJ.PNO)
(5) 求至少用了供应商S1所供应的全部零件工程号JNO
将查询分为两步:
1. 查询S1供应商供应的零件号
SELECTDISTINCY PNO FROM SPJ WHERE SNO = ‘S1’
2.查询哪一个工程既使用P1零件又P2零件
SELECT JNOFROM SPJ WHERE PNO = ‘P1’
AND JNO IN(SELECT JNO FROM SPJ WHERE PNO = ‘P2’)
5. 针对习题3中的四个表试用SQL语言完成以下各项操作:
(1)找出所有供应商的姓名和所在城市。
SELECT SNAME, CITY FROM S
(2)找出所有零件的名称、颜色、重量。
SELECT PNAME,COLOR, WEIGHT FROM P
(3)找出使用供应商S1所供应零件的工程号码。
SELECT DISTINCY JNO FROM SPJ WHERE SNO = ‘S1’
(4)找出工程项目J2使用的各种零件的名称及其数量。
SELECT PNAME,QTY FROM SPJ, P
WHERE P.PNO = SPJ.PNO AND SPJ.JNO= ‘J2’
(5)找出上海厂商供应的所有零件号码。
SELECT PNO FROM SPJ, S WHERE S.SNO = SPJ.SNO AND CITY = ‘上海’
(6)找出使用上海产的零件的工程名称。
SELECT JNAME FROM SPJ, S, J
WHERE S.SNO = SPJ.SNO AND S.CITY =‘上海’ AND J.JNO = SPJ.JNO
(7)找出没有使用天津产的零件的工程号码。
SELECT DISTINCY JNO FROM SPJ WHERE JNO NOT IN (SELECT JNO FROM SPJ, P, S WHERE S.CITY = ‘天津’ AND COLOR =’红’AND S.SNO = SPJ.SNO AND P.PNO = SPJ.PNO)
(8)把全部红色零件的颜色改成蓝色。
UPDATE P SET COLOR = ‘蓝’WHERECOLOR =‘红’
(9)由S5供给J4的零件P6改为由S3供应,请作必要的修改。
UPDATE SPJ SET SNO = ‘S3’ WHERE SNO = ‘S5’AND JNO = ‘J4’ AND PNO=’P6’
(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。
A. DELETE FROM S WHERE SNO = ‘S2’
B. DELETE FROM SPJ WHERE SNO = ‘S2’
(11)请将 (S2,J6,P4,200) 插入供应情况关系。
INSERT INTO SPJ VALUES (‘S2’,‘J6’, ‘P4’, 200)
6. 什么是基本表?什么是视图?两者的区别和联系是什么?
答:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存在视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同使用基本表那样使用视图,可以在视图上再定义视图。
7. 试述视图的优点。
答:(1)视图能够简化用户的操作;(2)视图使用户以多种角度看待同一数据。
(3)视图对重构数据库提供一定程度的逻辑独立性。(4)视图能够对机密数据提供安全保护
8. 所有的视图是否都可以更新?为什么?
答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。如《概论》3.5.1中的视图S_G(学生的学号及他的平均成绩)
CREAT VIEW S_G(Sno,Gavg)
AS SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;
要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。
9. 哪类视图是可以更新的,哪类视图是不可更新的?各举一例说明。
答:基本表的行列子集视图一般是可更新的。如《概论》3.5.3中的例11。
若视图的属性来自集函数、表达式,则视图肯定是不可以更新的。
10. 试述某个你熟悉的实际系统中对视图更新的规定。
11. 请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件
代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:
答:建视图:
CREATEVIEW V_SPJ AS
SELECTSNO, PNO, QTY
FROMSPJ
WHEREJNO =
(SELECT JNO
FROM J
WHERE JNAME = ‘三建’);
对视图的查询:
(1)找出三建工程项目使用的各种零件代码及其数量。
SELECT PNO, QTY
FROM V_SPJ;
(2)找出供应商S1的供应情况。
SELECT PNO, QTY /* S1供应三建工程的零件号和对应的数量*/
FROM V_SPJ
WHERE SNO='S1';