赞
踩
以下SQL语句均在SQL2008环境下执行
按照《数据库系统概论》(第五版)P79页的学生课程数据库和P70-71页中的SPJ数据库完成以下查询
(一)嵌套查询中的存在量词
代码:
方法一:用带EXISTS谓词的子查询实现
SELECT SNO, SNAME
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SPJ
WHERE SNO = S.SNO
)
方法二:用相关联子查询实现
SELECT SNO, SNAME
FROM S
WHERE SNO NOT IN
(SELECT SNO
FROM SPJ
WHERE SPJ.SNO = S.SNO
)
注:不存在没有给任何工程供应零件的供应商(即所有的供应商都有给某个工程供应国零件),所以查询结果为如图
代码:
--查询使用了全部零件的工程号JNO,用带EXISTS谓词的子查询实现
SELECT JNO
FROM J
WHERE NOT EXISTS/*没有一个零件*/
(SELECT *
FROM P
WHERE NOT EXISTS/*是该工程不使用的*/
(SELECT *
FROM SPJ
WHERE JNO = J.JNO AND PNO = P.PNO))
代码:
--方法二、自身连接查询实现
SELECT FIRST.SNO
FROM SC FIRST, SC SECOND
WHERE FIRST.SNO = SECOND.SNO AND FIRST.CNO = 1 AND SECOND.CNO = 2
附加题:查询至少用了供应商S1所供应的所有零件的工程号JNO,用带EXISTS谓词的子查询实现。
代码:
--查询至少用了供应商S1所供应的所有零件的工程号JNO,用带EXISTS谓词的子查询实现
--(不存在这样的零件,供应商S1提供了,但该工程没有选)
SELECT DISTINCT JNO
FROM SPJ X
WHERE NOT EXISTS
(SELECT *
FROM SPJ Y
WHERE Y.SNO = 'S1' AND NOT EXISTS
(SELECT *
FROM SPJ Z
WHERE Z.PNO = Y.PNO AND Z.JNO = X.JNO))
(二)数据更新
代码:
--把全部蓝色零件的颜色改为红色
UPDATE P
SET COLOR = '红'
WHERE COLOR = '蓝'
代码:
--将S5供应给J1的零件P3改为由S1供应
UPDATE SPJ
SET SNO = 'S1'
WHERE SNO = 'S5' AND PNO = 'P3' AND JNO = 'J1'
代码:
--从供应商关系中删除S3的记录,并从供应情况关系中删除相应的记录
DELETE
FROM S
WHERE SNO = 'S3'
DELETE
FROM SPJ
WHERE SNO = 'S3'
代码:
--删除所有信息系(IS)同学的信息
DELETE
FROM STUDENT
WHERE SDEPT = 'IS'
自行设计案例对学生-课程数据库的数据更新,并观察是否有违反数据的完整性约束。
案例一、分别对每个系的学生求年龄的平均值,并存入新表中
代码:
--第一步
CREATE TABLE DEPT_AGE
(Sdept CHAR(15),
AVG_AGE SMALLINT
)
--第二步
INSERT INTO DEPT_AGE
SELECT SDEPT, AVG(SAGE)
FROM STUDENT
GROUP BY SDEPT
(三)视图
①找出”三建”工程项目使用的各种零件代码及其数量;
代码:
--找出”三建”工程项目使用的各种零件代码及其数量
SELECT PNO, SUM(QTY) 零件总数
FROM 三建
GROUP BY PNO
代码:
--找出供应商S2的供应情况
SELECT *
FROM 三建
WHERE SNO = 'S2'
代码:
--创建一个学生成绩统计视图,包括学号,姓名,选课门数,平均分,最高分
CREATE VIEW STU_GRADE (SNO,SNAME,SCNUM,AVG_GRA,MAX_GRA)
AS
SELECT STUDENT.SNO, SNAME, COUNT(CNO), AVG(GRADE), MAX(GRADE)
FROM STUDENT FULL OUTER JOIN SC ON STUDENT.SNO = SC.SNO
GROUP BY STUDENT.SNO, SNAME
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。