1、1第 3 章 SQL 语言习题一、单项选择题1.SQL 语言是( )的语言,易学习。A过程化 B.非过程化 C.格式化 D.导航式2.SQL 语言是( )语言。A.层次数据库 B.网络数据库 C.关系数据库 D.非数据库3.SQL 语言具有( )的功能。 A.关系规范化、数据操纵、数据控制 B 数据定义、数据操纵、数据控制C.数据定义、关系规范化、数据控制 D.数据定义、关系规范化、数据操纵4.关于 SQL 语言,下列说法正确的是( ) 。A 数据控制功能不是 SQL 语言的功能之一B SQL 采用的是面向记录的操作方式,以记录为单位进行操作C SQL 是非过程化的语言,用户无须指定存取路径D
2、 SQL 作为嵌入式语言语法与独立的语言有较大差别5.对表中数据进行删除的操作是( ) 。A.DROP B.ALTER C.UPDATE D.DELETE6.SQL 语言的数据操纵语句包括 SELECT,INSERT,UPDATE 和 DELETE 等。其中最重要的,也是使用最频繁的语句是( ) 。A.SELECT B.INSERT C.UPDATE D.DELETE7.SQL 语言具有两种使用方式,分别称为交互式 SQL 和( ) 。A.提示式 SQL B.用户式 SQL C.嵌入式 SQL D.解释式 SQL8.SQL 语言中,实现数据检索的语句是( ) 。A.SELECT B.INSER
3、T C.UPDATE D.DELETE9.下列 SQL 语句中,修改表结构的是( ) 。A.ALTER B.CREATE C.UPDATE D .DELETE10在 SQL 中,用户可以直接操作的是( ) 。A 基本表 B 视图 C 存储文件 D 基本表和视图11在 SQL 的查询语句中,对应关系代数中“投影 ”运算的语句是( ) 。A WHERE B FROM C SELECT D HAVING12在 SELECT 语句中,需对分组情况满足的条件进行判断时,应使用( ) 。A WHERE B GROUP BY C ORDER BY D HAVING13SQL 中,与“NOT IN”等价的操作
4、符是( ) 。A =ANY B ALL14视图建立后,在数据字典中存放的是( ) 。A 查询语句 B 组成视图的表的内容2C 视图的定义 D 产生视图的表的定义第 15 到第 18 题基于这样的三个表即学生表 S、课程表 C 和学生选课表 SC,它们的结构如下:S(S#,SN,SEX,AGE,DEPT)C(C#, CN)SC( S#,C#,GRADE)其中:S#为学号, SN 为姓名,SEX 性别,AGE 为年龄,DETP 为系别,C#为课程号,CN 为课程名,GRADE 为成绩。15.检索所有比“ 王华” 年龄大的学生姓名、年龄和性别。正确的 SELECT 语句是( ) 。A.SELECT
5、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王华.AGE16.检索选修课程“C2”的学生中成绩最高的学生的学号。正确的 SELECT 语句是( ) 。A.SELECT S# FROM SC WHEREC#=C2 AND GRADE= (SELE
6、CT GRADE FROM SC WHERE C#=C2)B.SELECT S# FROM SC WHERE C#=C2 AND GRADE IN(SELECT GRADE FROM SC WHEREC#=C2) C.SELECT S# FROM SC WHERE C#=C2 AND GRADE NOT IN(SELECT GRADE FROM SC WHERE C#=C2)D.SELECT S# FROM SC WHERE C#=C2 AND GRADE=ALL (SELECT GRADE FROM SC WHERE C#=C2)17.检索学生姓名及其所选修课程的课程号和成绩。正确的 SEL
7、ECT 语句是( ) 。 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 18检索选修四门以上课程的学生总成绩(不统计不及格的课程) ,并要求按总成绩的降序排列出来。正确的 SELECT 的语句是( ) 。A.SELECT
8、S#, SUM (GRADE) FROM SC WHERE GRADE=60 GROUP BY S# ORDER BY 2 DESC HAVING COUNT (*)=4B.SELECT S#, SUM (GRADE) FROM SC WHERE GRADE=60 GROUP BY 3S# HAVING COUNT (*)=4 ORDER BY 2 DESCC. SELECT S#, SUM (GRADE) FROM SC WHERE GRADE=60 HAVING COUNT (*)=4 GROUP BY S# ORDER BY 2 DESCD. SELECT S#, SUM (GRADE)
9、 FROM SC WHERE GRADE=60 ORDER BY 2 DESC GROUP BY S# HAVING COUNT (*)=419假定学生关系是 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,SC20下面的数据库的表中,若职工表的主关键字是职工号,部门表的主关键字是部门号,SQL 操作( )不能执行。职工表 部门表职工号 职工名 部门号 工资001
10、 李红 01 580005 刘军 01 670025 王芳 03 720038 张强 02 650A. 从职工表中删除行(025, 王芳,03,720) B. 将行(005,乔兴,04,750)插入到职工表中C. 将职工号为001 的工资改为 700D. 将职工号为038 的部门号改为0321若用如下的 SQL 语句创建一个 student 表:CREATE TABLE student(NO CHAR(4) NOT NULL, NAME CHAR(10) NOT NULL, SEX CHAR(2), AGE INT),可以插到 student 表中的是( ) 。A.(1031, 曾华,男,23
11、) B.(1031 , 曾华,NULL,NULL)C.(NULL , 曾华, 男, 23) D.(1031,NULL , 男,23)22数据库中建立索引的目的是为了( ) 。A 加快建表速度 B 加快存取速度 C 提高安全性 D 节省存储空间23视图是数据库系统三级模式中的( ) 。A 外模式 B 模式 C 内模式 D 模式映像24下列说法不正确的是( ) 。A 基本表和视图一样,都是关系B 可以使用 SQL 对基本表和视图进行操作C 可以从基本表或视图上定义视图D 基本表和视图中都存储数据部门号 部门名 主任01 人事处 高平02 财务处 蒋华 03 教务处 许红04 学生处 杜琼4二、综合
12、题1.已知关系 R 如图所示RA B C9797979898989999b1b2b3b1b2b3b1b28492987284958894图 关系 R试用 SQL 语言实现下列操作:(1) 按属性 A 分组,求出每组中在属性 C 上的最大值和最小值,且将它们置于视图 RVE 中。Create view RVE(A,CMAX,CMIN)AsSelect max(C),min(C)From RGroup by A;(2) 在视图 RVE 中查询属性 A=98的记录。Select *From RVEWhere A=98;2已知学生表 S 和学生选课表 SC 其关系模式如下:S(SNO,SN ,SD,
13、PROV) ;SC (SNO,CN,GR) ,其中 SNO 为学号,SD 为系名,PROV 为省区, CN 为课程名,GR 为分数。试用 SQL 语言实现下列操作:(1) 查询“信息系”的学生来自哪些省区。Select DISTINCT PROVFrom SWhere SD=信息系;(2) 按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。Select SN,GRFrom S,SC5Where S.SNO=SC.SNO AND SD=英语 AND CN=计算机Group by GR DESC;3设有学生表 S(SNO ,SN ) (SNO 为学生号,SN 为姓名)和学生
14、选修课程表 SC(SNO ,CNO,CN,G) (CNO 为课程号, CN 为课程名,G 为成绩) ,试用 SQL 语言完成以下各操作:(1)创建一个视图 V-SSC(SNO,SN ,CNO,CN,G) 。Create view V-SSC(SNO,SN,CNO,CN,G)ASSelect S.SNO, S.SN, SC.CNO, SC.CN, SC.GFrom S, SCWhere S.SNO=SC.SNO(2)从视图 V-SSC 上查询平均成绩在 90 分以上的 SNO 和平均分。Select SNO,AVG(G)From V-SSCGroup by SNOHaving AVG(G)4设有
15、关系模式:S(SN,SNAME ,CITY)其中, S 代表供应商,SN,代表供应商号,SNAME 为供应商名字,CITY 为供应商所在城市,主关键字为 SN;P(PN,PNAME ,COLOR ,WEIGHT )其中 P 代表 零件,PN 代表零件号,PNAME 代表零件名,COLOR 为零件颜色,WEGHT 为零件重量,主关键字为 PN;J(JN,JNAME,CITY)其中 J 表示工程,JN 为工程编号,JNAME 为工程名,CITY 为工程所在城市,主关键字为 JN。如下图所示表示供应商(S)-零件(P)-工程(J)数据库表,写出实现以下各题功能的 SQL 语句:6S (1) 取出工程
16、的全部细节。Select *From J(2) 取出所在城市为上海的所有工程的全部细节。Select *From JWhere CITY=上海 ;(3) 取出重量最轻的零件代号。Select PNFrom PWhere WEIGHT=(Select MIN (WEIGHT)From P );SN SNAME CITYS1S2 S3S4S5上海北京北京上海南京PPN PNAME COLOR WEIGHT红绿蓝红蓝绿121820131115J JN JNAME CITYJ1J2J3J4J5J6J7JN1JN2JN3JN4JN5JN6JN7上海广州南京南京上海武汉上海SPJSN PN JN QTYS
17、1S1S2S2S2S2S2S2S2S2S3S3S4S4S5S5S5S5S5S5S5S5S5S5P1P1P3P3P3P3P3P3P3P3P3P4P6P6P2P2P5P5P6P1P3P4P5P6J1J4J1J2J3J4J5J6J7J2J1J2J3J7J2J4J5J7J2J4J4J4J4J4200700400200200500600400800100200500300300200100500100200100012008004005007(4) 取出为工程 J1 提供零件的供应商代号。Select SNFrom SPJWhere JN=J1;(5) 取出为工程 J1 提供零件 P1 的供应商代号。S
18、elect SNFrom SPJWhere JN=J1 AND PN=P1;(6) 取出由供应商 S1 提供零件的工程名称。Select J.JNAMEFrom SPJ, JWhere SPJ.JN=J.JN AND SPJ.SN=S1;(7) 取出供应商 S1 提供的零件的颜色。Select Distinct P.COLORFrom SPJ, PWhere SPJ.PN=P.PN AND SPJ.SN=S1;(8) 取出为工程 J1 或 J2 提供零件的供应商代号。Select Distinct SNFrom SPJWhere JN=J1 OR JN=J2;(9) 取出为工程 J1 提供红色
19、零件的供应商代号。Select Distinct SPJ.SNFrom SPJ, PWhere SPJ.PN=P.PN AND SPJ.JN=J1 AND P.COLOR=红 ;(10) 取出为所在城市为上海的工程提供零件的供应商代号。Select DISTINCT SPJ.SNFrom J, SPJWhere J.JN=SPJ.JN AND J.CITY=上海 ;(11) 取出为所在城市为上海或北京的工程提供红色零件的供应商代号。Select SPJ.SNFrom P, J, SPJWhere J.JN=SPJ.JNO AND P.PN=SPJ.PN AND P.COLOR=红AND (J.
20、CITY=上海OR J.CITY=北京 ) ;(12) 取出供应商与工程所在城市相同的供应商提供的零件代号。Select DISTINCT SPJ.PNFrom S, J, SPJ Where J.JN=SPJ.JN AND S.SN=SPJ.SN AND J.CITY=S.CITYS(SN,SNAME,CITY)P(PN,PNAME,COLOR,WEIGHT)J(JN,JNAME,CITY)SPJ(SN,PN,JN,QTY)8(13) 取出上海的供应商提供给上海的任一工程的零件的代号。Select SPJ.PN From S, J, SPJWhere J.JN=SPJ.JN AND S.SN
21、=SPJ.SN AND J.CITY=上海 AND S.CITY=上海 ;(14) 取出由供应商 S1 提供零件的工程的代号。Select Distinct SPJ.JNFrom S,P, SPJWhere S.SN=SPJ.SN AND P.PN=SPJ.PN AND S.SN=S1;(15) 取出所有这样的一些 二元组,使得第 1 个城市的供应商为第 2 个城市的工程提供零件。Select Distinct S.CITY,J.CITYFrom S, J, SPJWhere S.SN=SPJ.SN AND J.JN=SPJ.JN ;(16) 把零件 P2 的重量增加 5,颜色改为黄色。UPD
22、ATE PSET WEIGHT=WEIGHT+5, COLOR=黄Where PN=P2;(17) 将没有供货的所有工程项目从 J 表中删除。Delete From JWhere JN not in( Select *From SPJ);(18) 查询提供全部零件的供应商名。Select SNAME From SWhere SNO IN (SELECT SNOFROM SPJ);(19) 查询这样的工程项目号:该工程项目使用 P1 零件的平均使用量大于工程项目 J1 使用的任何一种零件的最大数量。SELECT JNOFROM SPJWHERE SPJ.PNO=P1GROUP BY JNOHAV
23、ING AVG (QTY)ALL(SELECT QTYFROM SPJ9WHERE SPJ.JNO =J1);(20)定义一个视图,它由所有这样的工程项目(工程项目号与所在城市名称)组成:它们由供应商 S1 供货且使用零件 P1。CREAT VIEW JN,JCITYASSelect J.JN,J.CITYFrom J, SPJWhere J.JN=SPJ.JN AND SPJ.SN=S1 AND SPJ.PN=P1;5假设有如下 4 个样本表:student (学生信息表)NO NAME SEX BIRTHDAY CLASS108105107101109103曾华匡明王丽李军王芳陆军男男女男
24、女男09/01/7710/02/7501/23/7602/20/76/02/10/7506/03/74950339503195033950339503195031teacher (教师信息表)NO NAME SEX BIRTHDAY PROF DEPART804856825831李成张旭王萍刘冰男男女女12/02/5803/12/6905/05/7208/14/77副教授讲师助教助教计算机系电子工程系计算机系电子工程系course (课程表) score (成绩表)CNO CNAME TNO3-1053-2456-1669-888计算机导论操作系统数字电路高等数学825804856100(1)
25、 列出至少有 2 名男生的班号。Select CLASSFrom studentWhere SEX=男 GROUP BY CLASSHAVING COUNT(*)2NO CNO DEGREE1031053-2453-2458675Student(NO,NAME,SEX,BIRTHDAY,CLASS)Teacher(NO,NAME,SEX,BIRTHDAY,PROF,DEPART)Course(CNO,CNAME,TNO)Score(NO,CNO,DEGREE)10(2) 显示 student 表中不姓“王”的同学记录。SELECT *FROM STUDENTWHERE NAME NOT LIK
26、E王%;(3) 显示 student 表中每个学生的姓名和年龄。SELECT NAME, 2017-YEAR(birthday)FROM STUDENT;(4) 显示 student 表中最大和最小的 birthday 日期值。SELECT NAME,MAX(BIRTHDAY),MIN(BIRTHDAY)FROM STUDENT;(5) 以班号和年龄从大到小的顺序显示 student 表中的全部记录。SELECT *FROM STUDENTORDER BY CLASS,2017-YEAR(BIRTHDAY)DESC(6) 显示“男”教师及其所上的课程。SELECT TEACHER.NAME,C
27、OURSE.NAMEFROM TEACHER,COURSEWHERE TEACHER.NO=COURSE.TNO AND TEACHER.SEX=男;(7) 列出最高分同学的 no、cno 和 degree 列。SELECT NO,CNO,DEGREEFROM SCOREWHERE DEGREE=(SELECT MAX(DEGREE)FROM SCORE)(8) 列出和“李军”同性别的所有同学的 name。SELECT NAMEFROM STUDENTWHERE SEX=(SELECT SEXFROM STUDENT WHERE NAME=李军);(9) 列出和“李军”同性别并同班的同学 name。SELECT NAMEFROM STUDENTWHERE SEX =(SELECET SEXFROM STUDENT