按分类号降序显示“图书”数据库中各种图书的分类号、书名和作者。 5.select *; from 图书;
where 出版单位 in(\清华大学\北京大学\order by分类号
按分类号升序显示“图书”数据库中由清华大学出版社和北京大学出版社出版的所有图书。 6.select count(*); from 图书;
where 单价 between 50 and 100
统计出“图书”数据库中单价在50至100之间的图书数量。 7.select 借书证号,count(*); from 借阅;
where 借书日期<{2001/01/01}; group by借书证号; having count(*)>=3
分组统计出2000年底以前借阅的、借阅数不低于3本的借书证号和借阅数量。
8.select 单位,count(*); from 读者,借阅;
where 读者.借书证号 = 借阅.借书证号; group by 单位
按单位分组统计出各单位借阅图书的数量。
(2)对于学生选课关系,其关系模式为:
学生(学号,姓名,年龄,所在系); 课程(课程名,课程号,先行课); 选课(学号,课程号,成绩)。 用关系代数完成以下查询:
1) 求学过的数据库课程的学生的姓名和学号。 2) 求学过的数据库和数据结构的学生的姓名和学号。 3) 求没有学过数据库课程的学生学号。 4) 求学过的数据库的先行课的学生学号。 答:1)∏
姓名,学号
( 课程名=‘数据库’(学生∞选课∞课程))
26
2)∏
程名=‘数据结构’
姓名,学号
(
课程名=‘数据库
?(学生∞选课∞ 课程))∩ ∏ 姓名,学号(
(学生∞选课∞课程))
课
(学生∞选课∞课程))
姓名,学号
3)∏
(学生)- ∏
姓名,学号(
课程名=‘数据库’
4) 法一;设课程的两个副本为课程A和课程B, ∏ 课程A.学号((
法二: ∏学号(∏课程号,学号(选课)∞ ∏先行课号(σ现有如下关系.
职工(职工号.姓名.性别.职务 .家庭地址.所在部门编号) 部门(部门编号.部门名称 地址 电话)
保健(保健卡编号.职上号. 检查身体日期.健康状况) 查找所有女科长的姓名和家庭地址. 查找“ 办公室”的科长姓名和家庭地址.
查找“财务科” 中健康状况为“良的”的职工姓名和家庭地址
课程名=‘数据库’
课程
A.课程名=‘数据库?(课
课程A.先行课=课程B课程号 程A ∞
课程B )) ∞ 选课)
(选课))
六、 用关系代我装达式写出如下查询(每小题4分,共12分)
七、用SQL语言完成下列功能
(1)、现有如下关系:学生(学号,姓名,性别,专业,出生年月) 教师(教师编号,姓名,所在部门,职称)(18)
授课(教师编号,学号,课程编号,课程名称,教材,学分,成绩)
1. 查找学习“数据库原理”课程且成绩不及格的学生学号和任课教师编号; 2. 查找学习“英语”课程的“计算机应用”专业学生的学号,姓名和成绩; 3. 查找教师“李洪”所教过的学生成绩为90分以上(包括90)的学生学号,
27
姓名和专业;
4. 删除学生表中学号为“9903016”的记录;
5. 将编号为“60016”的教师所在的部门该为“计算机”; 6. 建立“计算机应用”专业成绩有过不及格的学生的视图;
答:1、 SELECT 学号,教师编号 FROM 授课 WHERE 课程名称='数据库原理' AND 成绩<60;
2、 SELECT 学号,姓名,成绩 FROM 授课,学生
WHERE 学生.学号=授课.学号 AND 专业='计算机应用' AND 课程名称='英语';
3、 SELECT 授课.学号,学生.姓名,专业 FROM 学生,教师,授课 WHERE 学生.学号=授课.学号 AND 教师.教师编号=授课.教师编号 AND 教师.
姓名='李洪' AND 成绩>=90;
4、 DELETE FROM 学生 WHERE 学号='9903016'; 5、 UPDATE 教师 SET 所在部门='计算机系' WHERE 教师编号='60016'; 6、 CREATE VIEW 成绩
AS SELECT 学生.学号,姓名,成绩 FROM 学生,授课
WHERE 学生.学号=授课.学号 AND 专业='计算机应用' AND 成绩<60; (2). 设有关系数据库:职工关系EMPLOYEE (职工号,职工名,街道,城市) 工作关系WORKS (职工号,公司号,工资) 公司关系COMPANY (公司号,公司名,城市)
假设职工可在多个公司兼职,请用SQL语句查询至少在公司号为?C2?和?C5?公司兼职的职工的职工号。 答: SELECT 职工号 FROM WORKS
WHERE WORKS (职工号=“C2” AND职工号=“C5”; (3). 依据上题的关系数据库,试用SQL语句写出下列操作: 将所有在“联华公司”工作的职工加薪5﹪。 UPDATE WORKS SET工资 = 工资 * 1.05 WHERE公司号IN
28
(SELECT公司号 FROM COMPANY
WHERE公司名 =?联华公司?);
(4). 图书出版管理数据库中有两个基本表: 图书 (书号,书名,作者编号,出版社,出版日期) 作者 (作者编号,作者名,年龄,地址)
试用SQL语句写出下列查询:检索年龄低于作者平均年龄的所有作者的作者名、书名和出版社。
SELECT 作者名,书名,出版社 FROM 图书,作者
WHERE 图书 . 作者编号 = 作者 . 作者编号 AND 年龄 < = (SELECT AVG (年龄) FROM 作者);
(5). 学校有多名学生,财务处每年要收一次学费。为财务处收学费工作设计一个数据库,包括两个关系: 学生 (学号,姓名,专业,入学日期) 收费 (学年,学号,学费,书费,总金额)
假设规定属性的类型:学费、书费、总金额为数值型数据;学号、姓名、学年、专业为字符型数据;入学日期为日期型数据。列的宽度自定义。 试用SQL语句定义上述表的结构。(定义中应包括主键子句和外键子句) CREATE TABLE 学生 (学号 CHAR (8), 姓名 CHAR (8), 专业 CHAR (13), 入学日期 DATE, PRIMARY KEY (学号)); CREATE TABLE 收费 (学年 CHAR (10), 学号 CHAR (8), 学费 NUMERIC (4), 书费 NUMERIC (5,2), 总金额 NUMERIC (7,2), PRIMARY KEY (学年,学号),
FOREIGN KEY (学号) REFERENCES 学生 (学号));
29
(6)设销售数据模型如下: 厂家 S (SNO,SNAME,CITY )
产品 P (PNO,PNAME,COLOR,WEIGHT) 工程 J (JNO,JNAME,CITY) 销售 SPJ (SNO,PNO,JNO,QTY)
用SQL完成查询:与“长风”在同一城市的厂家名。 SELECT S.SNAME FROM S,S AS X
WHERE X.SNAME=“长风” AND S.CITY=X.CITY
(7).在上题的数据模型的基础上,用SQL完成查询:至少使用P1,P2两种产品的工程名: SELECT JNAME FROM J
WHERE JNO IN (SELECT JNO FROM SPJ WHERE PNO=\ AND JNO IN (SELECT JNO FROM SPJ WHERE PNO=\
(8)设有职工基本表:EMP(ENO,ENAME,AGE,SEX,SALARY),其属性分别表示职工号、姓名、年龄、性别、工资。为每个工资低于1000元的女职工加薪200元,试写出这个操作的SQL语句。 UPDATE EMP
SET SALARY=SALARY+200 WHERE SALAEY<1000 AND SEX='女'
(9)以下各小题题基于教学数据库的三个基本表 学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C(C#,CNAME,TEACHER)
1. 试用关系代数表达式表示下列查询语句:检索年龄小于23岁的男学生的学号
30