数据查询与游标机制
习题6
6-1. 名词解释
解:
连接查询:从两个或两个以上的表中对符合某些条件的元组进行查询操作,包括内连接,外连接,交叉连接查询。
子查询:子查询是指在一个SELECT查询语句中包含另一个SELECT查询语句,子查询也称嵌套查询。
无关子查询:不依赖于父查询。首先执行子查询语句,得到的子查询结果集传递给父查询语句使用,无关子查询对父查询没有任何引用。
相关子查询:子查询执行依赖于父查询,多数情况子查询的WHERE字句中引用父查询的表。相关子查询中的子查询需要重复执行。
游标:(CURSOR)是一种能从包括多个元组的集合中每次读取一个元组的机制。游标总是与一条SELECT语句相关联,它允许应用程序对查询结果集中每一个元组进行不同的操作。
6-2:
数据库原理及其应用——数据查询与游标机制-习题6

--习题6-2
USE JXGL
SELECT CNO,CNAME
FROM C
WHERE C_COLLEGE ='CS'

USE JXGL
SELECT SNO,SNAME,SEX,AGE
FROM S
WHERE SEX='M'AND AGE>20

USE JXGL
SELECT CNAME,DESCRIPTION,CREDIT
FROM S JOIN SC ON S.SNO=SC.SNO AND S.SNO='S6' 
     JOIN C ON SC.CNO=C.CNO

USE JXGL
SELECT C.CNO,SNAME,SEX
FROM S JOIN SC ON S.SNO=SC.SNO AND S.SEX='F'
     JOIN C ON SC.CNO=C.CNO AND C.CNO IN('C2','C4')

USE JXGL
SELECT CNO
FROM C
EXCEPT
SELECT CNO
FROM S JOIN SC ON S.SNO=SC.SNO AND S.SNAME='李小刚'

USE JXGL
SELECT SNO,COUNT(CNO)
FROM SC 
GROUP BY SNO
HAVING COUNT(CNO)>2

6-3:
数据库原理及其应用——数据查询与游标机制-习题6
数据库原理及其应用——数据查询与游标机制-习题6

--习题6-3
USE JXGL
SELECT COUNT(DISTINCT CNO)
FROM SC 

USE JXGL
SELECT AVG(AGE)
FROM S JOIN SC ON S.SNO=SC.SNO AND SC.CNO='C4'

USE JXGL
SELECT CNO,AVG(GRADE)
FROM S JOIN SC ON S.SNO=SC.SNO AND S.COLLEGE='CS'
GROUP BY CNO

USE JXGL
SELECT CNO,COUNT(SNO)
FROM SC
GROUP BY CNO HAVING COUNT(CNO)>10
ORDER BY 2 DESC,1

USE JXGL
SELECT SNAME,AGE
FROM S
WHERE SNAME LIKE '王%'

USE JXGL
SELECT SNO,CNO
FROM SC
WHERE GRADE IS NULL

USE JXGL
SELECT *
FROM S
WHERE YEAR(GETDATE())-AGE<1997 AND COLLEGE IN('IS','MA')

6-4. 试用T-SQL更新语句表达对习题6-2中数据库中三个基本表S、SC、C的各个更新操作:
(1) 在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(SNO,SNAME,SEX)。
数据库原理及其应用——数据查询与游标机制-习题6

USE JXGL
CREATE TABLE STUDENT
(SNO NCHAR(9) NOT NULL,
SNAME NCHAR(8) NOT NULL,
SEX NCHAR(2))

USE JXGL
INSERT INTO STUDENT(SNO,SNAME,SEX)
SELECT SNO,SNAME,SEX
FROM S
WHERE SNO IN(SELECT SNO
      FROM SC
	  GROUP BY SNO HAVING MIN(GRADE)>80)
	  SELECT *FROM STUDENT
	  DELETE FROM STUDENT WHERE SNO='S8'

(2)在基本表SC中删除尚无成绩的选课元组。
数据库原理及其应用——数据查询与游标机制-习题6

USE JXGL
DELETE FROM SC
WHERE GRADE IS NULL
SELECT *FROM SC

(3)把“张成民”同学在SC中的选课记录全部删去。
数据库原理及其应用——数据查询与游标机制-习题6

USE JXGL
DELETE 
FROM SC
WHERE SNO IN(SELECT SNO 
             FROM S 
             WHERE SNAME='张成民')
			 SELECT *FROM SC

(4)把选修“高等数学”课程中不及格的成绩全部改为空值。
数据库原理及其应用——数据查询与游标机制-习题6

USE JXGL
UPDATE SC
SET GRADE=NULL
WHERE GRADE<60 AND CNO IN(SELECT CNO
                          FROM C
                          WHERE CNAME='高等数学')

(5)把低于总平均成绩的女同学成绩提高5%。
数据库原理及其应用——数据查询与游标机制-习题6

USE JXGL
UPDATE SC
SET GRADE=GRADE+GRADE*0.05
WHERE SNO IN(SELECT SNO
             FROM S	
             WHERE SEX='F') AND GRADE<(SELECT AVG(GRADE)
			               FROM SC)
	     SELECT *FROM SC

解:
6-5. 假设某“仓库管理”关系模型有下列五个关系模式:
零件PART(PNO,PNAME,COLOR,WEIGHT)
项目PROJECT(JNO,JNAME,JDATE)
供应商SUPPLIER(SNO,SNAME,SADDR)
供应P_P(JNO,PNO,TOTAL)
采购P_S(PNO,SNO,QUANTITY)
试用T-SQL DDL语句定义上述五个基本表,并说明主键和外键。
解:
数据库原理及其应用——数据查询与游标机制-习题6
数据库原理及其应用——数据查询与游标机制-习题6

USE JXGL
DECLARE S_Cursor CURSOR SCROLL
FOR SELECT *
FROM S
WHERE SEX='M'
OPEN S_Cursor
FETCH LAST FROM S_Cursor
FETCH FIRST FROM S_Cursor
FETCH ABSOLUTE 5 FROM S_Cursor
FETCH RELATIVE 3 FROM S_Cursor
CLOSE S_Cursor
DEALLOCATE S_Cursor

CREATE TABLE PART
(PNO CHAR(6),
PNAME CHAR(10) NOT NULL,
COLOR CHAR(6),
WEIGHT FLOAT(6),
PRIMARY KEY(PNO));

CREATE TABLE PROJECT
(JNO CHAR(6),
JNAME CHAR(12)NOT NULL,
DATE DATE,
PRIMARY KEY(JNO));

CREATE TABLE SUPPLIER
(SNO CHAR(8),
SNAME CHAR(12)NOT NULL,
SADDR VARCHAR(30),
PRIMARY KEY(SNO));

6-6.利用T-SQL语句声明一个游标,查询习题2数据库S表中所有男生的信息,并读取数据。
(1) 读取最后一条记录。
(2) 读取第一条记录。
(3) 读取第5条记录。
(4) 读取当前记录指针位置后第3条记录。
数据库原理及其应用——数据查询与游标机制-习题6

CREATE TABLE P_P
(JNO CHAR(6),
PNO CHAR(6),
TOTAL INTEGER,
PRIMARY KEY(JNO,PNO);
FOREIGN KEY(JNO) REFERENCES PROJECT(JNO),
FOREIGN KEY(PNO) REFERENCES PART(PNO));

CREATE TABLE P_S
(PNO CHAR(6),SNO CHAR(8),
QUANTITY INTEGER,
PRIMARY KEY(PNO,SNO)
FOREIGN KEY(PNO) REFERENCES PART(PNO),
FOREIGN KEY(SNO) REFERENCES SUPPLIER(SNO));

相关文章: