2023年6月21日发(作者:)
数据库系统概论习题集第三章SQL语⾔第三章 SQL语⾔
⼀、选择题 1. SQL语⾔是( )的语⾔,容易学习 。 A.过程化 B. ⾮过程化 C.格式化 D. 导航式 2. SQL语⾔的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使⽤最频繁的语句是( ) 。 A. SELECT B. INSERT C. UPDATE D. DELETE 3. 在视图上不能完成的操作是( ) 。 A. 更新视图 B. 查询 C. 在视图上定义新的表 D. 在视图上定义新的视图 4. SQL语⾔集数据查询、数据操纵、数据定义和数据控制功能于⼀体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )。 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制 5. SQL语⾔中,删除⼀个视图的命令是( )。 6. 在SQL语⾔中的视图VIEW是数据库的( ) 。 A. 外模式 B. 模式 C. 内模式 D. 存储模式 7. 下列的SQL语句中,( )不是数据定义语句。 A. CREATE TABLE B. DROP VIEW C. CREATE VIEW. D GRAN T 8. 若要撤销数据库中已经存在的表S,可⽤( )。 A. DELETE TABLE S B. DELETE S C. DROP TABLE S D. DROP S 9. 若要在基本表S中增加⼀列CN(课程名),可⽤( )。 TABLE S(CN CHAR(8)) TABLE S ALTER(CN CHAR(8)) TABLE S ADD(CN CHAR(8)) 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. S.S# = SC.S# and C.C# = SC.C# and SAGE>=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中,则可⽤( )。 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 SET grade=85 WHERE SN=’王⼆’ 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语⾔中,⼦查询是( ) 。 A. 返回单表中数据⼦集的查询语⾔ B. 选取多表中字段⼦集的查询语句 C. 选取单表中字段⼦集的查询语句 D. 嵌⼊到另⼀个查询语句之中的查询语句 15. SQL是⼀种( )语⾔。 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.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’数据库’ ’男’ and CNAME ’ 数据库’ =’男’ and CNAME=’ 数据库’ 17. 若⽤如下的SQL语句创建了⼀个表SC: CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插⼊如下⾏时,( )⾏可以被插⼊ 。 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”课的男⽣姓名,将涉及到关系()。 A. S B. S,SC C. C,SC D. S,C,SC 选择题答案: (1) B (2) A (3) C (4) C (5) B (6) A (7) D (8) C (9) C (10) B (11) A (12) D (13) A (14) D (15) C (16) A (17) B (18) D ⼆、简答题 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语句建⽴索引, DROPINDEX语句删除索引表;SQL语⾔使⽤CREATE VIEW命令建⽴视图,DROP VIEW语句删除视图。 3. ⽤SQL语句建⽴第3章习题3中的四个表。 答: 对于S表:S( SNO,SNAME,STATUS,CITY); 建S表 CREATE TABLE S (SNO CHAR(3), SNAME CHAR(10), STATUS CHAR(2), CITY CHAR(10)); P(PNO,PNAME,COLOR,WEIGHT); 建P表 CREATE TABLE P (PNO CHAR(3), PNAME CHAR(10), COLOR CHAR(4), WEIGHT INT); J(JNO,JNAME,CITY); 建J表 CREATE TABLE J (JNO CHAR(3), JNAME CHAR(10), CITY CHAR(10)); SPJ(SNO,PNO,JNO,QTY); 建SPJ表 CREATE TABLE SPJ (SNO CHAR(3), PNO CHAR(3), JNO CHAR(3), QTY INT); 4. 针对上题中建⽴的四个表试⽤SQL语⾔完成第3章习题3中的查询。 答: (1) 求供应⼯程J1零件的供应商号码SNO; SELECT SNO FROM SPJ WHERE JNO=‘J1’; (2) 求供应⼯程J1零件P1的供应商号码SNO; SELECT SNO FROM SPJ WHERE JNO=‘J1’ AND PNO=‘P1’; (3) 求供应⼯程J1零件为红⾊的供应商号码SNO; SELECT SNO FROM SPJ WHERE JNO=‘J1’ AND PNO IN (SELECT PNO FROM P WHERE COLOR=‘红’); 或 SELECT SNO FROM SPJ,P WHERE JNO=‘J1’ AND = AND COLOR=‘红’; (4) 求没有使⽤天津供应商⽣产的红⾊零件的⼯程号JNO; 解析: ⽤SQL语⾔表⽰如下: SELECT JNO FROM J WHERE NOT EXISTS (SELECT * FROM SPJ WHERE = AND SNO IN (SELECT SNO FROM S WHERE CITY=‘天津’) AND PNO IN (SELECT PNO FROM P WHERE COLOR=‘红’)); 或 SELECT JNO FROM J WHERE NOT EXISTS (SELECT *1 FROM SPJ, S, P WHERE = AND = AND = AND =‘天津’ AND P. COLOR=‘红’); 注意:从 J 表⼊⼿,以包含那些尚未使⽤任何零件的⼯程号。 (5) 求⾄少⽤了供应商S1所供应的全部零件的⼯程号JNO 。 解析: ⽤SQL语⾔表⽰如下: SELECT DISTINCT JNO FROM SPJ SPJZ WHERE NOT EXISTS (SELECT * FROM SPJ SPJX WHERE SNO='S1' AND NOT EXISTS (SELECT * FROM SPJ SPJY WHERE = AND = AND =’S1’)); AND ='S1' )); 5. 针对习题3中的四个表试⽤SQL语⾔完成以下各项操作: (1)找出所有供应商的姓名和所在城市。 (2)找出所有零件的名称、颜⾊、重量。 (3)找出使⽤供应商S1所供应零件的⼯程号码。 (4)找出⼯程项⽬J2使⽤的各种零件的名称及其数量。 (5)找出上海⼚商供应的所有零件号码。 (6)找出使⽤上海产的零件的⼯程名称。 (7)找出没有使⽤天津产的零件的⼯程号码。 (8)把全部红⾊零件的颜⾊改成蓝⾊。 (9)由S5供给J4的零件P6改为由S3供应,请作必要的修改。 (10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。 (11)请将 (S2,J6,P4,200) 插⼊供应情况关系。 答: (1) 找出所有供应商的姓名和所在城市。 SELECT SNAME, CITY FROM S; (2) 找出所有零件的名称、颜⾊、重量。 SELECT PNAME, COLOR, WEIGHT FROM P; (3) 找出使⽤供应商S1所供应零件的⼯程号码。 SELECT JNO FROM SPJ WHERE SNO=‘S1’; (4) 找出⼯程项⽬J2使⽤的各种零件的名称及其数量。 SELECT , FROM P, SPJ WHERE = AND ='J2'; (5) 找出上海⼚商供应的所有零件号码。 SELECT DISTINCT PNO FROM SPJ WHERE SNO IN (SELECT SNO FROM S WHERE CITY='上海'); (6) 找出使⽤上海产的零件的⼯程名称。 SELECT JNAME FROM J, SPJ, S WHERE J. JNO=SPJ. JNO AND SPJ. SNO= AND ='上海'; 或 SELECT JNAME FROM J WHERE JNO IN (SELECT JNO FROM SPJ, S WHERE SPJ. SNO= AND ='上海'); (7) 找出没有使⽤天津产的零件的⼯程号码。 SELECT JNO FROM J WHERE NOT EXISTS (SELECT * FROM SPJ WHERE = AND SNO IN (SELECT SNO FROM S WHERE CITY=‘天津’)); 或 SELECT JNO FROM J WHERE NOT EXISTS (SELECT *1 FROM SPJ, S WHERE = AND = AND =‘天津’); (8) 把全部红⾊零件的颜⾊改成蓝⾊。 UPDATE P SET COLOR='蓝' WHERE COLOR='红' ; (9) 由S5供给J4的零件P6改为由S3供应,请作必要的修改。 UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'; (10) 从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。 DELETE FROM SPJ WHERE SNO='S2'; 或 DELETE FROM S WHERE SNO='S2'; 解析:注意删除顺序,应该先从SPJ表中删除供应商S2所供应零件的记录,然后从从S表中删除S2。 (11) 请将 (S2,J6,P4,200) 插⼊供应情况关系。 INSERT INTO SPJ(SNO, JNO, PNO, QTY) VALUES (S2,J6,P4,200); 或 INSERT INTO SPJ VALUES (S2,P4,J6,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中的例1。 若视图的属性来⾃集函数、表达式,则该视图肯定是不可以更新的。 如《概论》3.5.3中的S_G视图。 10. 试述某个你熟悉的实际系统中对视图更新的规定。 答:(略) 解析:不同的系统对视图更新的规定是不同的,读者必须了解你所⽤系统对视图更新的规定。 11. 请为三建⼯程项⽬建⽴⼀个供应情况的视图,包括供应商代码(SNO)、零件 代码(PNO)、供应数量(QTY)。针对该视图完成下列查询: (1)找出三建⼯程项⽬使⽤的各种零件代码及其数量。 (2)找出供应商S1的供应情况。 答:建视图: CREATE VIEW V_SPJ AS SELECT SNO, PNO, QTY FROM SPJ WHERE JNO= (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';
2023年6月21日发(作者:)
数据库系统概论习题集第三章SQL语⾔第三章 SQL语⾔
⼀、选择题 1. SQL语⾔是( )的语⾔,容易学习 。 A.过程化 B. ⾮过程化 C.格式化 D. 导航式 2. SQL语⾔的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使⽤最频繁的语句是( ) 。 A. SELECT B. INSERT C. UPDATE D. DELETE 3. 在视图上不能完成的操作是( ) 。 A. 更新视图 B. 查询 C. 在视图上定义新的表 D. 在视图上定义新的视图 4. SQL语⾔集数据查询、数据操纵、数据定义和数据控制功能于⼀体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )。 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制 5. SQL语⾔中,删除⼀个视图的命令是( )。 6. 在SQL语⾔中的视图VIEW是数据库的( ) 。 A. 外模式 B. 模式 C. 内模式 D. 存储模式 7. 下列的SQL语句中,( )不是数据定义语句。 A. CREATE TABLE B. DROP VIEW C. CREATE VIEW. D GRAN T 8. 若要撤销数据库中已经存在的表S,可⽤( )。 A. DELETE TABLE S B. DELETE S C. DROP TABLE S D. DROP S 9. 若要在基本表S中增加⼀列CN(课程名),可⽤( )。 TABLE S(CN CHAR(8)) TABLE S ALTER(CN CHAR(8)) TABLE S ADD(CN CHAR(8)) 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. S.S# = SC.S# and C.C# = SC.C# and SAGE>=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中,则可⽤( )。 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 SET grade=85 WHERE SN=’王⼆’ 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语⾔中,⼦查询是( ) 。 A. 返回单表中数据⼦集的查询语⾔ B. 选取多表中字段⼦集的查询语句 C. 选取单表中字段⼦集的查询语句 D. 嵌⼊到另⼀个查询语句之中的查询语句 15. SQL是⼀种( )语⾔。 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.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’数据库’ ’男’ and CNAME ’ 数据库’ =’男’ and CNAME=’ 数据库’ 17. 若⽤如下的SQL语句创建了⼀个表SC: CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插⼊如下⾏时,( )⾏可以被插⼊ 。 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”课的男⽣姓名,将涉及到关系()。 A. S B. S,SC C. C,SC D. S,C,SC 选择题答案: (1) B (2) A (3) C (4) C (5) B (6) A (7) D (8) C (9) C (10) B (11) A (12) D (13) A (14) D (15) C (16) A (17) B (18) D ⼆、简答题 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语句建⽴索引, DROPINDEX语句删除索引表;SQL语⾔使⽤CREATE VIEW命令建⽴视图,DROP VIEW语句删除视图。 3. ⽤SQL语句建⽴第3章习题3中的四个表。 答: 对于S表:S( SNO,SNAME,STATUS,CITY); 建S表 CREATE TABLE S (SNO CHAR(3), SNAME CHAR(10), STATUS CHAR(2), CITY CHAR(10)); P(PNO,PNAME,COLOR,WEIGHT); 建P表 CREATE TABLE P (PNO CHAR(3), PNAME CHAR(10), COLOR CHAR(4), WEIGHT INT); J(JNO,JNAME,CITY); 建J表 CREATE TABLE J (JNO CHAR(3), JNAME CHAR(10), CITY CHAR(10)); SPJ(SNO,PNO,JNO,QTY); 建SPJ表 CREATE TABLE SPJ (SNO CHAR(3), PNO CHAR(3), JNO CHAR(3), QTY INT); 4. 针对上题中建⽴的四个表试⽤SQL语⾔完成第3章习题3中的查询。 答: (1) 求供应⼯程J1零件的供应商号码SNO; SELECT SNO FROM SPJ WHERE JNO=‘J1’; (2) 求供应⼯程J1零件P1的供应商号码SNO; SELECT SNO FROM SPJ WHERE JNO=‘J1’ AND PNO=‘P1’; (3) 求供应⼯程J1零件为红⾊的供应商号码SNO; SELECT SNO FROM SPJ WHERE JNO=‘J1’ AND PNO IN (SELECT PNO FROM P WHERE COLOR=‘红’); 或 SELECT SNO FROM SPJ,P WHERE JNO=‘J1’ AND = AND COLOR=‘红’; (4) 求没有使⽤天津供应商⽣产的红⾊零件的⼯程号JNO; 解析: ⽤SQL语⾔表⽰如下: SELECT JNO FROM J WHERE NOT EXISTS (SELECT * FROM SPJ WHERE = AND SNO IN (SELECT SNO FROM S WHERE CITY=‘天津’) AND PNO IN (SELECT PNO FROM P WHERE COLOR=‘红’)); 或 SELECT JNO FROM J WHERE NOT EXISTS (SELECT *1 FROM SPJ, S, P WHERE = AND = AND = AND =‘天津’ AND P. COLOR=‘红’); 注意:从 J 表⼊⼿,以包含那些尚未使⽤任何零件的⼯程号。 (5) 求⾄少⽤了供应商S1所供应的全部零件的⼯程号JNO 。 解析: ⽤SQL语⾔表⽰如下: SELECT DISTINCT JNO FROM SPJ SPJZ WHERE NOT EXISTS (SELECT * FROM SPJ SPJX WHERE SNO='S1' AND NOT EXISTS (SELECT * FROM SPJ SPJY WHERE = AND = AND =’S1’)); AND ='S1' )); 5. 针对习题3中的四个表试⽤SQL语⾔完成以下各项操作: (1)找出所有供应商的姓名和所在城市。 (2)找出所有零件的名称、颜⾊、重量。 (3)找出使⽤供应商S1所供应零件的⼯程号码。 (4)找出⼯程项⽬J2使⽤的各种零件的名称及其数量。 (5)找出上海⼚商供应的所有零件号码。 (6)找出使⽤上海产的零件的⼯程名称。 (7)找出没有使⽤天津产的零件的⼯程号码。 (8)把全部红⾊零件的颜⾊改成蓝⾊。 (9)由S5供给J4的零件P6改为由S3供应,请作必要的修改。 (10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。 (11)请将 (S2,J6,P4,200) 插⼊供应情况关系。 答: (1) 找出所有供应商的姓名和所在城市。 SELECT SNAME, CITY FROM S; (2) 找出所有零件的名称、颜⾊、重量。 SELECT PNAME, COLOR, WEIGHT FROM P; (3) 找出使⽤供应商S1所供应零件的⼯程号码。 SELECT JNO FROM SPJ WHERE SNO=‘S1’; (4) 找出⼯程项⽬J2使⽤的各种零件的名称及其数量。 SELECT , FROM P, SPJ WHERE = AND ='J2'; (5) 找出上海⼚商供应的所有零件号码。 SELECT DISTINCT PNO FROM SPJ WHERE SNO IN (SELECT SNO FROM S WHERE CITY='上海'); (6) 找出使⽤上海产的零件的⼯程名称。 SELECT JNAME FROM J, SPJ, S WHERE J. JNO=SPJ. JNO AND SPJ. SNO= AND ='上海'; 或 SELECT JNAME FROM J WHERE JNO IN (SELECT JNO FROM SPJ, S WHERE SPJ. SNO= AND ='上海'); (7) 找出没有使⽤天津产的零件的⼯程号码。 SELECT JNO FROM J WHERE NOT EXISTS (SELECT * FROM SPJ WHERE = AND SNO IN (SELECT SNO FROM S WHERE CITY=‘天津’)); 或 SELECT JNO FROM J WHERE NOT EXISTS (SELECT *1 FROM SPJ, S WHERE = AND = AND =‘天津’); (8) 把全部红⾊零件的颜⾊改成蓝⾊。 UPDATE P SET COLOR='蓝' WHERE COLOR='红' ; (9) 由S5供给J4的零件P6改为由S3供应,请作必要的修改。 UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'; (10) 从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。 DELETE FROM SPJ WHERE SNO='S2'; 或 DELETE FROM S WHERE SNO='S2'; 解析:注意删除顺序,应该先从SPJ表中删除供应商S2所供应零件的记录,然后从从S表中删除S2。 (11) 请将 (S2,J6,P4,200) 插⼊供应情况关系。 INSERT INTO SPJ(SNO, JNO, PNO, QTY) VALUES (S2,J6,P4,200); 或 INSERT INTO SPJ VALUES (S2,P4,J6,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中的例1。 若视图的属性来⾃集函数、表达式,则该视图肯定是不可以更新的。 如《概论》3.5.3中的S_G视图。 10. 试述某个你熟悉的实际系统中对视图更新的规定。 答:(略) 解析:不同的系统对视图更新的规定是不同的,读者必须了解你所⽤系统对视图更新的规定。 11. 请为三建⼯程项⽬建⽴⼀个供应情况的视图,包括供应商代码(SNO)、零件 代码(PNO)、供应数量(QTY)。针对该视图完成下列查询: (1)找出三建⼯程项⽬使⽤的各种零件代码及其数量。 (2)找出供应商S1的供应情况。 答:建视图: CREATE VIEW V_SPJ AS SELECT SNO, PNO, QTY FROM SPJ WHERE JNO= (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';
发布评论