数据库第三章习题 下载本文

WHERE SPJ.JNO =‘J1?);

(20)定义一个视图,它由所有这样的工程项目(工程项目号与所在城市名称)组成:它们由供应商S1供货且使用零件P1。 CREAT VIEW JN,JCITY AS

Select J.JN,J.CITY From J, SPJ

Where J.JN=SPJ.JN AND SPJ.SN=?S1? AND SPJ.PN=?P1?; 5.假设有如下4个样本表: student (学生信息表) NO 108 105 107 101 109 103

teacher (教师信息表) NO 804 856 825 831 CNO 3-105 3-245 6-166 9-888 NAME 李成 张旭 王萍 刘冰 CNAME 操作系统 数字电路 高等数学 SEX 男 男 女 女 TNO NO CNO 103 105 3-245 3-245 DEGREE 86 75 804 856 100 Student(NO,NAME,SEX,BIRTHDAY,CLASS) Teacher(NO,NAME,SEX,BIRTHDAY,PROF,DEPART) Course(CNO,CNAME,TNO) Score(NO,CNO,DEGREE) BIRTHDAY 12/02/58 03/12/69 05/05/72 08/14/77 PROF 副教授 讲师 助教 助教 DEPART 计算机系 电子工程系 计算机系 电子工程系 NAME 曾华 匡明 王丽 李军 王芳 陆军 SEX 男 男 女 男 女 男 BIRTHDAY 09/01/77 10/02/75 01/23/76 02/20/76/ 02/10/75 06/03/74 CLASS 95033 95031 95033 95033 95031 95031 course (课程表) score (成绩表)

计算机导论 825 (1) 列出至少有2名男生的班号。

Select CLASS From student Where SEX=?男? GROUP BY CLASS HAVING COUNT(*)>2

9

(2) 显示student表中不姓“王”的同学记录。

SELECT * FROM STUDENT

WHERE NAME NOT LIKE?王%?; (3) 显示student表中每个学生的姓名和年龄。

SELECT NAME,2017-YEAR(birthday) FROM STUDENT;

(4) 显示student表中最大和最小的birthday日期值。

SELECT NAME,MAX(BIRTHDAY),MIN(BIRTHDAY) FROM STUDENT;

(5) 以班号和年龄从大到小的顺序显示student表中的全部记录。

SELECT * FROM STUDENT

ORDER BY CLASS,2017-YEAR(BIRTHDAY)DESC (6) 显示“男”教师及其所上的课程。

SELECT TEACHER.NAME,COURSE.NAME FROM TEACHER,COURSE

WHERE TEACHER.NO=COURSE.TNO AND TEACHER.SEX=?男?; (7) 列出最高分同学的no、cno和degree列。

SELECT NO,CNO,DEGREE FROM SCORE WHERE DEGREE=

(SELECT MAX(DEGREE) FROM SCORE)

(8) 列出和“李军”同性别的所有同学的name。

SELECT NAME FROM STUDENT WHERE SEX=

(SELECT SEX FROM STUDENT WHERE NAME=?李军?); (9) 列出和“李军”同性别并同班的同学name。

SELECT NAME FROM STUDENT WHERE SEX =

(SELECET SEX FROM STUDENT

10

WHRER NAME=?李军?) AND CLASS= (SELECT CLASS FROM STUDENT WHERE NAME=?李军?);

(10)列出所有选修“计算机导论”课程的“男”同学的成绩表。

SELECT STUDENT.NO,COUSE.CNO,SCORE.DEGREE FROM STUDENT,COURSE,SCORE

WHERE STUDENT.NO=SCORE.NO AND COURSE.CNO=SCORE.CNO

AND COURSE.CNAME=?计算机导论? AND STUDENT.SEX=?男?;

6、设职工---社团数据库有三个基本表: 职工(职工号,姓名,年龄,性别);

社会团体(编号,名称,负责人号,活动地点); 参加(职工号,编号,参加日期);

试用SQL语句完成下列操作: 1)建立下列两个视图。

社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别); 参加人情况(职工号,姓名,社团编号,社团名称,参加日期)

CREATE VIEW 社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别) AS

SELECT 编号,名称,负责人, 姓名, 性别 FROM 社会团体,职工

WHERE 社会团体.负责任号=职工.职工号

CREATE VIEW参加人情况(职工号,姓名,社团编号,社团名称,参加日期) AS

SELECT 参加.职工号,职工.姓名,社会团体.编号,社会团体.名称,参加。参加日期

FROM 职工,社会团体,参加

WHERE 职工.职工号=参加.职工号 AND 参加.编号=社会团体.编号;

2)查找参加唱歌队或篮球队的职工号和姓名。 SELECT 职工号,姓名 FROM 职工,社会团体,参加

WHERE 职工.职工号=参加.职工号 AND 参加.编号=社会团体.编号 AND 社会团体.名称=?唱歌队?OR社会团体.名称=?篮球队?;

11

3)查找没有参加任何团体的职工情况。

SELECT * FROM 职工

WHERE NOT EXISTS (SELECT *

FROM 参加

WHERE 参加.职工号=职工.职工号);

4)查找参加了全部社会团体的职工情况。

SELECT * FROM 职工

WHERE NOT EXISTS (SELECT *

FROM 参加

WHERE NOT EXISTS

(SELECT* FROM 社会团体

WHERE 参加.职工号=职工.职工号AND

参加.编号=社会团体.编号));

5)查找至少参加了职工号为“1001”的职工所参加的全部社会团体的职工号。

SELECT 职工号 FROM 职工

WHERE NOT EXISTS(

SELECT * FROM参加参加1

WHERE 参加1.职工号=?1001?AND NOT EXISTS

(SELECT * FROM 参加.参加2

WHERE 参加2.编号=参加1.编号 AND 参加2.职工号=职工.职工号))

6)求每个社会团体的参加人数。

SELECT COUNT(职工号) FROM 参加 GROUP BY 编号

力赋给用户李平,并允许他将此权力授予其他用户。

GRANT SELECT,INSERT,DELECT ON 社会团体,参加 TO 李平

WITH GRANT OPTION;

12

7)把对“社会团体”和“参加”两个表的数据查看、插入和删除数据的权