1.在SQL语言中,删除表S的语句是_DROP TABLE S__。
2.SQL语言使用 CREATE VIEW 语句建立视图。
3.在SQL中,用 MAX( ) 函数求最大值;可以利用 COUNT( ) 函数计算记录的个数;用 AVG( ) 函数求平均值。
4.在SQL语言的关系定义语句中,外键子句实现___参照_____完整性约束;主键实现____实体____完整性约束。
5.SQL语言支持关系数据库三级模式结构,其中外模式对应于 视图 ,模式对应于 基本表 ,内模式对应于存储文件。
二、选择题
1.如果要修改表的结构,应该使用的SQL语句是_D____。
A.UPDATE TABLE B.MODIFY TABLE
C.CHANGE TABLE D.ALTER TABLE
2.在数据库系统的三级模式结构中,定义视图的组织方式属于__B____。
A.概念模式 B.外模式 C.逻辑模式 D.内模式
3.在数据库系统中,视图可以提供数据的_____C____。
A.完整性 B.并发性 C.安全性 D.可恢复性
4.可以在SQL查询时去掉重复数据的是 D 。
A.ORDER BY B.DESC C.GROUP BY D.DISTINCT
5.下列SQL语句中,用来创建关系表的是__B_____。
A.ALTER B.CREATE C.UPDATE D.INSERT
6.数据库管理系统能实现创建表,删除表等操作的数据库语言称为____A_____。
A.数据定义语言(DDL) B.数据管理语言
C.数据操纵语言(DML) D.数据控制语言
7.在SQL中,可以用谓词EXISTS来测试一个集合中是否___D____。
A.有相同元组存在 B.为空集合
C.有相同分量存在 D.为非空集合
8.下列哪项不是视图机制的优点____D___。
A.数据安全性 B.逻辑独立性 C.操作简便性 D.数据完整性
9.SQL的SELECT语句中,“HAVING条件表达式”用来筛选满足条件的____D____。
A.列 B.行 C.关系 D.分组
10.在SQL语言中,属于DML的操作命令是_ C____。
A.CREATE B.GRANT C.UPDATE D.DROP
11.SQL语言的一次查询的结果是一个__D_______。
A.数据项 B.记录 C.元组 D.表
12.如果想找出在关系R的A属性上不为空的那些元组,则选择子句应该为____C____。
A.WHERE A!=NULL B.WHERE A <>NULL
C.WHERE A IS NOT NULL D.WHERE A NOT IS NULL
13.使用SQL语句在学生成绩表(学号,课程号,成绩)中,查询平均成绩大于60分的学生时,不必使用的子句是____C_____。
A.SELECT B.GROUP BY C.WHERE D.HAVING
14.下列哪组SQL命令全部属于数据定义语句的命令?___A______
A.CREATE,DROP,ALTER B.CREATE,DROP,SELECT
C.CREATE,DROP,GRANT D.CREATE,DROP,UPDATE
15.已知有关系模式R(SNO, sname, age),其中SNO表示学生的学号,类型为Char(8),前4位表示入学年份。查询所有2003年入学的学生姓名(sname),SQL语句是____B_____。
A.SELECT sname FROM R WHERE SNO =‘2003%’
B.SELECT sname FROM R WHERE SNO LIKE ‘2003%’
C.SELECT sname FROM R WHERE SNO =‘2003_’
D.SELECT sname FROM R WHERE SNO LIKE ‘2003_’
三、简答题
1.什么是连接查询?什么是嵌套查询?什么是相关子查询?
答:多个表之间存在某种联系,如果一个查询要在两个以上的表中进行,我们称这种查询为连接查询。
在子查询语句中再嵌入其他子查询,这就是嵌套查询。
子查询结果依赖父查询的当前元祖的属性值,这种查询就是相关子查询。
2.试阐述SQL的特点。
答:1).支持关系数据库系统的三级模式结构。
2).语言功能强大。
3).用户性能好。
4).提供两种用户使用方式。
5).高度非过程化。
3.试介绍一个你所熟悉的DBMS产品的完整性功能。
4.什么是基本表?什么是视图?两者的区别和联系是什么?
答:视图是从一个或几个基本表导出的虚表,视图为用户提供数据逻辑独立性等作用。对视图的操作由系统自动转换成等价的对基本表的操作。
5.在SQL中有哪些方法可以作表间连接,请说明之,并各举一例。
答:多表连接、嵌套连接、集合操作等。
6.视图有哪些优点?
答:1)视图提供了一个简化用户操作的快捷方式。
2)视图支持多用户同时以不同的方式对相同的数据进行查询。
3)视图对于隐藏的数据自动提供安全保护。
4)视图可以为用户和应用程序提供逻辑上的数据独立性。
7.所有的视图是否都可以更新?为什么?
答:不是所有的视图都是可更新的,有些对视图的更新操作不能唯一地有意义地转换成对相应基本表的更新,就不能进行更新。
8.试解释触发器和完整性约束之间的关系。
答:触发器能实现完整性约束,同时能够进行比完整性约束更为复杂的检查和操
|
9. 已知R和S两个关系如图所示:
执行如下SQL语句,给出执行结果。
(1)CREATE VIEW H(A,B,C,D,E)
AS SELECT A,B,R.C,D,E
FROM R,S
WHERE R.C=S.C;
(2)SELECT B,D,E
FROM H
WHERE C=‘c2’;
(1)
A | B | C | D | E |
a1 | b1 | c1 | d1 | e1 |
a2 | b2 | c2 | d2 | e2 |
a3 | b3 | c3 | d3 | e3 |
(2)
B | D | E |
b2 | d2 | e2 |
10.已知某公司数据库包含如下四个基本表,
Department(Dept_No,Dept_Name,Location)
Employee(Emp_No,Emp_Name,Dept_no)
ProJect(Pro_No,Pro_ Name,Budget)
Works(Emp_No,Pro_No,Job)
(1)使用DDL语句定义上述四个表,并说明主键和外键。
(2)将基本表Works中Job=‘经理’的员工号及参加的项目号,定义为一个视图V_MANAGER( Emp_No,Pro_No)。
(3)将“P2”项目的所有员工号、员工名和所在部门名称,定义为一个视图V_P2(Emp_No,Emp_Name,Dept_Name,)。
解答:
(1)CREAT TABLE Deparment
(Dep_NO CHAR(10),
Dep_NAME CHAR(20),
Location CHAR(30),
PRIMARY KEY(Dep_NO));
CREAT TABLE Employee
(Emp_NO CHAR(10) PRIMARY KEY,
Emp_NAME CHAR(8),
Dep_NO CHAR(10),
FOREIGN KEY (Dep_NO) REFERENCES Department(Dept_NO));
CREATE TABLE ProJect
(Pro_NO CHAR(10) PRIMARY KEY,
Pro_NAME CHAR(20),
Budget INT)
CREATE TABLE Works
(Emp_NO CHAR(10),
Pro_NO CHAR(10),
Job CHAR(20),
PRIMARY KEY(Emp_NO,Pro_NO),
FOREIGN KEY(Emp.NO) REFERENCES Employee(Emp_NO),
FOREIGN KEY(Pro_NO) REFERENCES ProJect(Pro_NO));
(2)CREAT VIEW V_MANAGER (Emp_NO,Pro-NO)
AS SELECT EMP_NO,Pro-NO
FROM(WORKS)
WHERE JoB=‘经理’;
(3)CREATE VIEW V_P2(Emp_NO,Emp_NAME,Dept_NAME)
AS SELECT Employee.Emp_NO,
Employee.Emp_NAME,
Department.Dept_NAME
FROM Department,Employee, works
WHERE WORKS..Pro_no =’P2’ AND
Employee.Emp_NO= works.Emp_NO AND
Department. Dep_NO= Employee. Dep_NO;
1.针对第3章课后习题查询实现部分的第2小题所给出的SPJ数据库,试用SQL语句完成如下操作:
(1)求供应工程J1零部件的供应商号码SNO;
(2)求供应工程J1零部件P1的供应商名称;
(3)求供应工程J1红色零部件的供应商号码SNO;
(4)求没有使用天津供应商供应的红色零部件的工程号JNO;
(5)求至少用了供应商S1所供应的全部零部件的工程号JNO。
(6)找出使用供应商S1所供应零部件的工程号码;
(7)找到工程项目J2使用的各种零部件的名称及其数量;
(8)找出上海厂商供应的所有零部件的号码;
(9)找出使用上海厂商供应的零部件的工程名称;
(10)求供应商S2供应给各个工程的零部件总数量,结果中要有所对应的工程名称。
(11)把全部红色零部件的颜色改成蓝色。
(12)为工程项目名称为“一汽”的工程建立一个供应情况的视图,包括供应商代码SNO、零部件代码Pno、供应数量Qty 。
解答:
(1)求供应工程J1零部件的供应商号码SNO;
Select SNO
From SPJ
Where JNO='J1';
(2)求供应工程J1零部件P1的供应商名称;
Select SNAME
From SPJ,S
Where SPJ.JNO='J1' AND SPJ.Pno='P1' AND S.SNO= SPJ.Sno;
(3)求供应工程J1红色零部件的供应商号码SNO;
Select SNO
Form SPJ,P
Where SPJ.Pno=P.Pno and
JNO='J1’' and
Color='红'
(4)求没有使用天津供应商供应的红色零部件的工程号JNO
Select JNO
Form J
Where JNO not IN
(select JNO
From S,SPJ,P
Where SPJ.Pno=P.Pno and
SPJ.SNO=S.SNO and
City='天津' and
Color='红');
(5)求至少用了供应商S1所供应的全部零部件的工程号JNO。
Select JNO
From J
Where not exists
( select *
Form SPJ as SPJ1
Where SNO='s1' and not exists
( select *
From SPJ as SPJ2
Where SPJ2.SNO='s1' and
SPJ2.Pno=SPJ1.Pno and
SPJ2.JNO=J.JNO) );
注:条件SPJ2.SNO='s1'也可不要。
(6)找出使用供应商S1所供应零部件的工程号码;
Select JNO
From SPJ
Where SNO='S1';
(7)找到工程项目J2使用的各种零部件的名称及其数量;
Select Pname,Qty
From SPJ,P
Where SPJ.Pno=P.Pno and JNO='J2';
(8)找出上海厂商供应的所有零部件的号码;
Select Pno
Form SPJ,S
Where SPJ.SNO=S.SNO and S.city='上海';
(9)找出使用上海厂商供应的零部件的工程名称;
Select Jname
From SPJ,J,S
Where SPJ.SNO=s.SNO and
SPJ.JNO=J.JNO and
S.city='上海';
(10)求供应商S2供应给各个工程的零部件总数量,结果中要有所对应的工程名称。
Select Jname, Sum(Qty)
From SPJ,J
Where SNO='S2' and SPJ.JNO=J.JNO
Group by J. JNO, Jname;
(11)把全部红色零部件的颜色改成蓝色。
Update P
Set color='蓝'
Where color='红';
(12)为工程项目名称为“一汽”的工程建立一个供应情况的视图,包括供应商代码SNO、零部件代码Pno、供应数量Qty 。
Create view 供应情况(SNO,Pno,Qty)
AS select SNO, Pno, Qty
From J,SPJ
Where J.JNO=SPJ.JNO AND Jname='一汽'
2.设有学生选课数据库,包括S、C和SC三个关系模式:
S(SNO,SN,SD,SB,SEX)
C(CNO,CN,PC,TN)
SC(SNO,CNO,GRADE)
试用SQL语句实现下列操作:
(1)用连接,嵌套和EXISTS查询来查询学习课程号为“C01”的学生学号和姓名;
(2)查询至少选修课程号为“C03”和“C04”的学生姓名;
(3)查询不学“C02”课程的学生姓名和性别;
(4)查询学习全部课程的学生姓名;
(5)查询所学课程包含学生“李珊”所学课程的学生的学号。
(6)在关系C中插入一个元组(‘C08’,‘VB’,‘C02’,‘黄萍’);
(7)查询平均成绩大于80分的课程任课老师的姓名,并将查询到的值送入另一个已经存在的表LEVEL_80(TNAME)中;
(8)删除SC中还没有成绩的元组;
(9)删除选修“李”老师课程的所有女生选课元组;
(10)把数学成绩小于60,但大于55分的同学的成绩全改为60分;
(11)在表SC中,当某个成绩低于某一门课程的平均成绩时,提高5%。
(12)建立视图V_SSC(SNO,SN,CNO,CN,G),并按CNO升序排列;
(13)从视图V_SSC上查询平均成绩在90分以上的学生的SN,CN,G。
(14)授权用户张山对表S,C的查询权限;
(15)授权用户李斯对表SC的插入和删除权限;
(16)授权用户王武对表SC具有查询权限,对成绩属性具有更新权限;然后再撤销其对成绩属性所具有的更新权限;
(17)授权用户赵亮对所有表具有所有权限,并具有给其他用户授权的权限;
(18)创建一个视图,包含每门课程的课程号,课程的最高成绩、最低成绩、平均成绩;再创建一个具有查询该视图权限的角色,并将角色权限授权给用户周力。
解答:
(1)用连接,嵌套和EXISTS查询来查询学习课程号为“C01”的学生学号和姓名;
连接:
SELECT S.SNO,S.SN
FROM S,SC
WHERE S.SNO=SC.SNO AND SC.CNO='C01';
嵌套:
SELECT SNO, SN
FROM S
WHERE SNO IN ( SELECT SNO FROM SC WHERE CNO='C01');
EXISTS查询:
SELECT SNO, SN
FROM S
WHERE EXISTS ( SELECT * FROM SC
WHERE S.SNO=SC.SNO AND SC.CNO='C01') ;
(2)查询至少选修课程号为“C03”和“C04”的学生姓名;
SELECT SN
FROM S
WHERE SNO IN
(SELECT SC1.SNO
FROM SC SC1,SC SC2
WHERE SC1.CNO='C03' AND
SC2.CNO='C04'AND
SC1.SNO=SC2.SNO);
(3)查询不学“C02”课程的学生姓名和性别;
SELECT SN,SEX
WHERE SNO NOT IN
(SELECT SNO
FROM SC
WHERE CNO='C02');
(4)查询学习全部课程的学生姓名;
方法一:
SELECT SN
FROM S
WHERE not EXISTS
(SELECT *
FROM C
WHERE CNO not IN
(SELECT CNO
FROM SC
WHERE SC.SNO=S.SNO AND SC.CNO=C.CNO));
方法二:
SELECT SN
FROM S
WHERE not EXISTS
(SELECT *
FROM C
WHERE not EXISTS
(SELECT *
FROM SC
WHERE SC.SNO=S.SNO AND SC.CNO=C.CNO)) ;
方法三:
SELECT SN
FROM S
WHERE SNO IN
(SELECT SNO
FROM SC
GROUP BY SNO
HAVING COUNT(*)=(SELECT COUNT(*) FROM C ));
(5)查询所学课程包含学生“李珊”所学课程的学生的学号。
方法一:
SELECT DISTINCT SNO
FROM SC X
WHERE NOT EXISTS
(SELECT *
FROM SC Y, S
WHERE S.SN='李珊' AND
S.SNO=Y.SNO AND
Y.CNO NOT IN
(SELECT CNO
FROM SC Z
WHERE X.SNO=Z.SNO)) ;
方法一:
SELECT DISTINCT SNO
FROM SC X
WHERE NOT EXISTS
(SELECT *
FROM SC Y, S
WHERE Y.SNO=S.SNO AND
S.SN='李珊' AND NOT EXISTS
(SELECT *
FROM SC Z
WHERE Z.SNO=X.SNO AND Z.CNO=Y.CNO)) ;
(6)在关系C中插入一个元组(‘C08’,‘VB’,‘C02’,‘黄萍’);
INSERT
INTO C
VALUES ('C08','VB','C02','黄萍');
(7)查询平均成绩大于80分的课程任课老师的姓名,并将查询到的值送入另一个已经存在的表LEVEL_80(TNAME)中;
INSERT
INTO LEVEL_80(TNAME)
SELECT TN
FROM C
WHERE CNO IN
(SELECT CNO
FROM SC
GROUP BY CNO
HAVING AVG(GRADE)>80);
或
INSERT
INTO LEVEL_80(TNAME)
SELECT TN
FROM SC,C
WHERE C.CNO=SC.CNO
GROUP BY TN,SC.CNO
HAVING AVG(GRADE)>80;
(8)删除SC中还没有成绩的元组;
DELETE
FROM SC
WHERE GRADE IS NULL;
(9)删除选修“李”老师课程的所有女生选课元组;
DELECT
FROM SC
WHERE SNO IN
(SELECT SNO
FROM S
WHERE SEX=’女‘)
AND CNO IN
(SELECT CNO
FROM C
WHERE TN like ‘李%’);
(10)把数学成绩小于60,但大于55分的同学的成绩全改为60分;
UPDATE SC
SET GRADE=60
WHERE SNO IN
(SELECT SNO
FROM SC.C
WHERE SC.CNO=C.CNO AND CN=’数学’ AND GRADE<60 AND GRADE>55);
(11)在表SC中,当某个成绩低于某一门课程的平均成绩时,提高5%。
UPDATE SC
SET GRADE=GEADE*(1+5%)
WHERE GRADE< ANY (SELECT AVG(GRADE)
FROM SC
GROUP BY CNO);
(12)建立视图V_SSC(SNO,SN,CNO,CN,G),并按CNO升序排列;
CREAT VIEW V_SSC(SNO,SN,CNO,CN,G)
AS SELECT TOP 100 PERCENT S.SNO,S.SN,C.CNO,C.CN,SC.GRADE
FROM S,C,SC
WHERE S.SNO=SC.SNO AND
SC.CNO=C.CNO
ORDOR BY CNO ASC;
注:在SQL SERVER中要加上TOP 100 PERCENT才能使用ORDOR BY。
(13)从视图V_SSC上查询平均成绩在90分以上的学生的SN,CN,G。
SELECT SN, CN, G
FROM V_SSC
WHERE SNO IN (SELECT SNO
FROM V_SSC
GROUP BY SNO
HAVING AVG(G)> 90);
(14)授权用户张山对表S,C的查询权限;
GRANT SELECT
ON S,C
TO 张山;
(15)授权用户李斯对表SC的插入和删除权限;
GRANT INSERT ,DELECT
ON SC
TO 李斯;
(16)授权用户王武对表SC具有查询权限,对成绩属性具有更新权限;然后再撤销其对成绩属性所具有的更新权限;
GRANT SELECT,UPDATE(GRADE)
ON SC
TO 王五
REVOKE UPDATE(GRADE)
ON SC
FROM 王五
(17)授权用户赵亮对所有表具有所有权限,并具有给其他用户授权的权限;
GRANT ALL PRIVILEGES ON ALL TABLES
TO 赵亮
WITH GRANT OPITION;
(18)创建一个视图,包含每门课程的课程号,课程的最高成绩、最低成绩、平均成绩;再创建一个具有查询该视图权限的角色,并将角色权限授权给用户周力。
CREATE VIEW COURSE(CNO,MAX,MIN,AVG)
AS SELECT CNO, MAX(GRADE), MIN(GRADE), AVG(GRADE)
FROM SC
GROUP BY CNO;
CREATE ROLE R1;
GRANT SELECT ON COURSE TO R1;
sp_addrolemember R1,周力;
3.设有车辆管理数据库的数据模式如下:
车辆(车号,车牌名,车颜色,生产厂名)
工厂(厂名,厂长姓名,所在城市名)
城市(城市名,人口,市长姓名)
请用SQL语句实现如下查询:
(1)查询所有车牌名为“红旗”的轿车的车号。
(2)查询“红旗”牌轿车的生产厂家及厂长姓名。
(3)查询“跃进”牌轿车的生产厂家及所在城市的市长姓名。
(4)查询第一汽车制造厂所生产车辆的颜色。
(5)查询武汉生产哪些品牌的车。
解答:
(1)查询所有车牌名为“红旗”的轿车的车号。
SELECT 车号
FROM 车辆
WHERE 车牌名=‘红旗’;
(2)查询“红旗”牌轿车的生产厂家及厂长姓名。
SELECT 生产厂名,厂长姓名
FROM 车辆,工厂
WHERE 生产厂名=厂名 AND 车牌名=‘红旗’;
(3)查询“跃进”牌轿车的生产厂家及所在城市的市长姓名。
SELECT 生产厂名,市长姓名
FROM 车辆,工厂,城市
WHERE 生产厂名=厂名 AND
所在城市名=城市名 AND
车牌名=‘跃进’;
(4)查询第一汽车制造厂所生产车辆的颜色。
SELECT DISTINCT 车颜色
FROM 车辆
WHERE 生产厂名=‘第一汽车制造厂’;
(5)查询武汉生产哪些品牌的车。
SELECT DISTINCT 车牌名
FROM 车辆,工厂
WHERE 生产厂名=厂名 AND
所在城市名=‘武汉’;