资源描述
第一题:
(注:查询答案不唯一,尽供参考)
设某商业集团中有若干公司,其人事数据库中有3个基本表:
职工关系 EMP(E#,ENAME,AGE,SEX,ECITY),其属性分别表示职工工号、姓名、年龄、性别和居住城市。
工作关系 WORKS(E#,C#,SALARY),其属性分别表示职工工号、工作的公司编号和工资。
公司关系 COMP(C#,CNAME,CITY,MGR_E#),其属性分别表示公司编号、公司名称、公司所在城市和公司经理的工号。
1)用CREATE TABLE语句创建上述3个表,需指出主键和外键。
CREATE TABLE EMP
( E# CHAR(4) NOT NULL,
ENAME CHAR(8) NOT NULL,
AGE SMALLINT,
SEX CHAR(1),
ECITY CHAR(20),
PRIMARY KEY(E#))
OR:
CREATE TABLE EMP
( E# CHAR(4) PRIMARY KEY,
ENAME CHAR(8) NOT NULL,
AGE SMALLINT,
SEX CHAR(1),
ECITY CHAR(20))
CREATE TABLE COMP
( C# CHAR(4) NOT NULL,
CNAME CHAR(20) NOT NULL,
CITY CHAR(20),
MGR_E# CHAR(4),
PRIMARY KEY(C#),
FOREIGN KEY(MGR_E#) REFERENCES EMP(E#))
CREATE TABLE WORKS
( E# CHAR(4) NOT NULL,
C# CHAR(4) NOT NULL,
SALARY SMALLINT,
PRIMARY KEY(E#,C#),
FOREIGN KEY(E#) REFERENCES EMP(E#),
FOREIGN KEY(C#) REFERENCES COMP(C#))
2)检索至少为两个公司工作的职工工号。
SELECT X.E#
FROM WORKS X, WORKS Y
WHERE X.E#= Y.E# AND X.C# != Y.C#
3)检索与其经理居住在同一城市的职工的工号和姓名。
SELECT A.E#, A.ENAME
FORM EMP A, WORKS B, COMP C, EMP D
WHERE A.E#=B.E# AND B.C#=C.C# AND C.MGR_E#=D.E# AND A.ECITY=D.CITY
4)检索职工人数最多的公司的编号和名称。
SELECT C.C#, C,CNAME
FORM WORKS B,COMP C
WHERE B.C#=C.C#
GROUP BY C.C#
HAVING COUNT(*)>=ALL(SELECT COUNT(*)
FROM WORKS
GROUP BY C#)
5)检索平均工资高于联华公司平均工资的公司的编号和名称。
SELECT C.C#, C.CNAME
FROM WORKS B, COMP C
WHERE B.C#=C.C#
GROUP BY C.C#
HAVING AVG(SALARY)>(SELECT AVG(SALARY)
FROM WORKS B,COMP C
WHERE B.C#=C.C# AND CNAME=’ 联华公司’)
6)为联华公司的职工加薪,月薪不超过3000元的职工加薪10%,超过3000元的职工加薪8%。
UPDATE WORKS SET SALARY= SALARY*1.1 WHERE SALARY<=3000 AND C# IN (SELECT C#
FROM COMP
WHERE CNAME=’ 联华公司’)
UPDATE WORKS SET SALARY= SALARY*1.08 WHERE SALARY>3000 AND C# IN (SELECT C#
FROM COMP
WHERE CNAME=’ 联华公司’)
7)在EMP表和WORKS表中删除年龄大于60岁的职工的有关元组。
DELETE FROM WORKS WHERE E# IN (SELECT E# FROM EMP WHERE AGE>60)
DELETE FROM EMP WHERE AGE>60
第二题:
设一个电影资料数据库有3个基本表:电影表Movie、演员表Actor和电影主演表Acts。Movie关系的属性包括电影名、制作年份、长度等;Actor关系的属性包括演员名、地址、性别、生日等;电影主演表Acts包括电影名、制作年份、演员姓名等。用SQL实现如下操作:
(1)为1990-1999年制作的电影建立视图;
CREATE VIEW MyearAS
SELECT *
FROM Movie
WHERE Year>=1990 AND Year<=1999
(2)对视图进行如下查询:长度超过120分钟的电影名称和演员姓名。
SELECT Title,actorName
FROM Myear,Acts
WHERE Acts.MovieTitle=Myear.Title AND Length>120
(3) 要求为Movie关系增加一个属性MovieDirector(电影导演)。用SQL实现这种关系模式的改变。
ALTER TABLE Movie
ADD MovieDirector CHAR(20)
(4)把电影“我的世界”的长度改为109分钟;
UPDATE Movie SET Length=109
WHERE Title=‘我的世界’
(5)删除1940年以前制作的所有电影记录以及电影主演记录。
DELETE FROM Movie
WHERE Year<1940;
DELETE FROM Acts
WHERE MovieYear<1940
(6)所有同名电影各自的电影名和制作年份;
SELECT M1.Title,M1.Year,M2.Year
FROM Movie AS M1,Movie AS M2
WHERE M1.Title=M2.Title AND M1.Year<M2.Year
(7)向演员关系Actor中插入一个演员记录,具体的分量由自己指定。
INSERT INTO Actor(Name,Gender)VALUES (‘秀兰·邓波儿’,‘F’)
(8)统计1999年制作电影的平均长度和最短长度;
SELECT AVG(Length),MIN(Length)
FROM Movie
WHEREYear=1999
第一题:设某商业集团中有若干公司,其人事数据库中有3个基本表:
职工关系 EMP(E#,ENAME,AGE,SEX,ECITY),其属性分别表示职工工号、姓名、年龄、性别和居住城市。
工作关系 WORKS(E#,C#,SALARY),其属性分别表示职工工号、工作的公司编号和工资。
公司关系 COMP(C#,CNAME,CITY,MGR_E#),其属性分别表示公司编号、公司名称、公司所在城市和公司经理的工号。
1)建立一个有关女职工信息的视图EMPWOMAN,属性包括(E#,ENAME,C#,CNAME,SALARY)。
CREATE VIEW EMPWOMAN
AS SELECT A.E#,A.ENAME, C.C#,CNAME, SALARY
FROM EMP A, WORKS B, COMP C
WHERE A.E#=B.E# AND B.C#=C.C# AND SEX=’F’
2)检索居住城市和公司所在城市相同的职工工号和姓名。
SELECT A.E#,A.ENAME
FROM EMP A, WORKS B,COMP C
WHERE A.E#=B.E#, AND B.C#=C.C#, AND A.ECITY=C.CITY
3)假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数。显示(E#,NUM,SUMSALARY),分别表示工号、公司数目和工资总数。
SELECT E#, COUNT(C#) AS SUM, SUM(SALARY) AS SUMSALARY
FROM WORKS
GROUP BY E#
4)检索工资高于其所在公司职工平均工资的所有职工的工号和姓名。
SELECT A.E#, A.ENAME
FROM EMP A, WORKS B
WHERE A.E#=B.E# AND SALARY>(SELECT AVG(SALARY)
FROM WORKS C
WHERE C.C#=B.C#)
5)检索工资总额最小的公司的编号和名称。
SELECT C.C#, C,CNAME
FORM WORKS B,COMP C
WHERE B.C#=C.C#
GROUP BY C.C#
HAVING SUM(SALARY)<=ALL(SELECT SUM(SALARY)
FROM WORKS
GROUP BY C#)
6)WANG职工的居住地改为苏州市。
UPDATE EMP SET ECITY=’苏州市’ WHERE ENAME=’WANG’
7)为联华公司的经理加薪8%。
UPDATE WORKS A SET SALARY= SALARY*1.08
WHERE EXISTS (SELECT *
FROM COMP B
WHERE B.C#=A.C# AND B.CNAME=’联华公司’
AND B.MGR_E#=A.E#)
8)在WORKS基本表中,删除联华公司的所有职工元组。
DELETE FROM WORKS
WHERE C# IN (SELECT C#
FROM COMP
WHERE CNAME=’联华公司’)
第二题:
关系模式如下:
学生S(SNO,SN,SEX,AGE)
课程C(CNO,CN,PCNO)PCNO为直接先行课号
选课SC(SNO,CNO,G)G为课程考试成绩
用SQL写出查询程序:
(1) 查询选修了所有以“MAT”为先行课的课程的学生姓名SN。
SELECTSN
FROMS,SC
WHERES.SNO=SC.SNO
ANDSC.CNOIN
(SELECTC.CNO
FROMC,CASCX
WHEREC.PCNO=CX.CNO
ANDCX.CN=‘MAT');
(2) 查询年龄(AGE)大于“张三”年龄的学生姓名和年龄。
SELECTS.SN,S.AGE
FROMS,SASSX
WHERES.AGE>SX.AGEANDSX.SN=‘张三’;
(3) 查询课程名和直接先行课的课程名以及间接先行课的课程名。
SELECTCN,CX.CN,CY.CN
FROMC,CASCX,CASCY
WHEREC.PCNO=CX.CNO
ANDCX.PCNO=CY.CNO;
(4) 将选修课程“DB"的学生学号SNO,姓名SN建立视图SDB。
CREATE VIEW SDB
AS
SELCET SNO,SN
FROMS
WHERE SNO IN
SELECT SNO
FROMS C
WHERE CNO IN
(SELECT CNO
FROM C
WHERE CN=‘DB'))
(5) 选修课程“DB”的学生姓名SN。
答案一
SELECT SN
FROM S
WHERE SNO IN
SELECT SNO
FROM SC
WHERE CNO IN
(SELECT CNO
FROM C
WHER ECN=‘DB'));
答案二
SELECT SN
FROM S,SC,C
WHERE S.SNO=SC.SNO
AND SC.CNO=C.CNO
AND C.CN=‘DB';
(6) 所有学生都选修的课程名CN。
SELECTCN
FROMC
WHERENOTEXISTS
(SELECT*
FROMS
WHERENOTEXISTS
(SELECT*
FROMSC
WHERESNO=S.SNOANDCNO=C.CNO));
答案二
SELECTCN
FROMC
WHERECNOIN
(SELECTCNO
FROMSC
GROUPBYCNO
HAVINGCOUNT(*)=
(SELECTCOUNT(*)
FROMS));
第一题:
对于教学数据库中的4个关系:
教师关系 T(T#, TNAME, TITLE)
课程关系 C(C#, CNAME, T#)
学生关系 S(S#, SNAME, AGE, SEX)
选课关系 SC(S#, C#,SCORE)
其中,T中T#为主键;C中C#为主键,T#为外键;S中S#为主键;SC中S#, C#为主键且同时为外键。
用SQL实现如下操作:
(1) 用语句创建上述四个基本表:T,C,S,SC,并正确表达其数据类型和主、外键约束。
CREATE TABLE T (T# CHAR(4) NOT NULL, TNAME CHAR(8) NOT NULL, TITLE CHAR(10), PRIMARY KEY(T#))
CREATE TABLE C (C# CHAR(4), CNAME CHAR(10) NOT NULL, T# CHAR(4), PRIMARY KEY(C#), FOREIGN KEY (T#) REFERENCE T(T#));
CREATE TABLE S (S# CHAR(4) NOT NULL, SNAME CHAR(8) NOT NULL, AGE SMALLINT, SEX CHAR(2), PRIMARY KEY(S#));
CREATE TABLE SC (S# CHAR(4), C# CHAR(4), SCORE SMALLINT, PRIMARY KEY (S#,C#), FOREIGN KEY (S#) REFERENCE S(S#), FOREIGN KEY (C#) REFERENCE C(C#));
(2) 检索学习课程号为C2课程的学生学号与成绩。(3分)
SELECT S#, SCORE FROM SC WHERE C#=’C2’;
(3) 检索至少选修了LIU老师所授课程中一门课程的学生学号与姓名。
SELECT S,S#, SNAME FROM S,SC, C, T WHERE S.S#= SC.S# AND SC.C#=C.C.# AND C.T#=T.T# AND TNAME=’LIU’
(4) 检索选修课程号为C2和C4的学生学号。
(5) 求每一教师每门课程的学生选修人数(超过50人),要求显示教师工号、课程号和学生人数。显示时,查询结果按人数升序排列,人数相同按工号升序、课程号降序排列。
SELECT T#, C.C#, COUNT(S#) FROM C,SC WHERE C.C#=SC.C# HAVING COUNT(*)>50 ORDER BY 3, T#, C.C# DESC;
(6) 检索平均成绩最高的学生学号。
SELECT S# FROM SC GROUP BY S# HAVING AVG(SCORE) >= ALL (SELECT AVG(SCORE) FROM SC GROUP BY S#)
(7) 往基本表S中插入一个元组(S36, GU, 20, M)。
INSERT INTO S(S#,SNAME, AGE,SEX) VALUES (‘S36’, ‘GU’, 20. ‘M’)
(8) 把C4课程中小于该课程平均成绩的成绩元组从基本表SC中删除。
DELETE FROM SC WHERE C# ‘C4’ AND SCORE < (SELECT AVG(SCORE) FROM SC WHERE C# = ‘C4’)
(9) 当C4课程的成绩低于该门课程平均成绩时,提高5%。
UPDATE SC SET SCORE = SCORE * 1.05 WHERE C# = ‘C4’ AND SCORE < (SELECT AVG(SCORE) FROM SC WHERE C# =’C4’)
(10) 基于基本表S、SC、C,建立关于S#、SNAME、CNAME和SCORE的视图。
CREATE VIEW STUDENT_SCORE (S#, SNAME, CNAME, SCORE) AS SELECT S.S#, SNAME, CNAME, SCORE FROM S, SC, C WHERE S.S#= SC.S# AND SC.C# =C.C#
第二题:
关系模式如下:
商品P(PNO,PN,COLOR,PRICE)
商店S(SNO,SN,CITY)
销售SP(PNO,SNO,QTY)
用SQL实现如下操作:
(1) 查询销售所有商品的商店名SN。
SELECT SN FROM S
WHERE SNO IN
(SELECT SNO
FROM SP
GROUP BY SNO
HAVING COUNT(*)=
(SELECT COUNT(*)FROM P));
答案二
SELECT SN FROM S
WHERE NOT EXISTS
(SELECT * FROM P
WHERE NOT EXISTS
(SELECT * FROM SP
WHERE SNO=S.SNO AND PNO=P.PNO));
(2) 将在London销售红色商品的商店号SNO,商店名SN建立视图RLS。
答案一
CREATEVIEWRLSAS
SELECTSNO,SN
FROMS,SP,P
WHERES.SNO=SP.SNO
ANDSP.PNO=P.PNO
ANDS.CITY=‘London'
ANDP.COLOR=‘Red';
答案二
CREATEVIEWRLSAS
SELECTSNO,SN
FROMS
WHERECITY=‘London'
ANDSNOIN
(SELECTSNO
FROMSP
WHEREPNOIN
(SELECTPNO
FROMP
WHERECOLOR=‘Red’));
第一题:
对于教学数据库中的4个关系:
教师关系 T(T#, TNAME, TITLE)
课程关系 C(C#, CNAME, T#)
学生关系 S(S#, SNAME, AGE, SEX)
选课关系 SC(S#, C#,SCORE)
其中,T中T#为主键;C中C#为主键,T#为外键;S中S#为主键;SC中S#, C#为主键且同时为外键。
用SQL实现如下操作:
(1) 在基本表S中增加一个地址(ADDRESS)列。
ALTER TBALE S ADD ADDRESS VARCHAR(30);
(2) 为基本表SC中的(S#,C#)建立唯一索引。
CREATE UNIQUE INDEX SC_INDEX ON SC( S# ASC, C# DESC);
(3) 检索学习课程号为C2课程的学生学号与姓名。
SELECT S, S#, SNAME FROM S,SC WHERE S.S#= SC.S# AND C#=’C2’;
(4) 在基本表SC中检索男同学选修的课程号
SELECT DISTINCT C# FROM S,SC WHERE S.S#=SC.S# AND SEX=’M’
(5) 检索选修课程号为C2或C4的学生学号。
(6) 检索不学C2课程的学生姓名与年龄。
SELECT SNAME, AGE FROM S WHER S# NOT IN (SELECT S# FROM SC WHERE C#=’C2’)
(7) 统计每门课程的学生选修人数。
SELECT C.C#, COUNT(S#) FROM C,SC WHERE C.C#=SC.C# GROUP BY C.C#
(8) 在基本表S和SC中检索至少不学C2和C4两门课程的学生学号。
SELECT S# FORM S WHERE S# NOT IN (SELECT S# FROM SC WHERE C# IN (‘C2’,’C4’))
(9) 往基本表SC中插入一个选课元组(S5, C8),此处成绩值为空值。
INSERT INTO SC(S#, C#) VALUES (‘S5’, ‘C8’)
(10) 把课程名为MATHS的成绩从基本表SC中删除。
DELETE FROM SC WHERE C# IN (SELECT C# FROM C WHERE CNAME = ‘MATHS’)
(11) 把女同学的成绩提高10%。
UPDATE SC SET SCORE = SCORE * 1.1 WHERE S# IN (SELECT S# FROM S WHERE SEX =’F’)
(12) 定义一个有关男学生的视图。
CREEATE VIEW S_MALE AS SELECT S#, SNAME, AGE FROM S WHERE SEX = ‘M’
第二题:
关系模式如下:
商品P(PNO,PN,COLOR,PRICE)
商店S(SNO,SN,CITY)
销售SP(PNO,SNO,QTY)
用SQL实现如下操作:
(1) 所有商店都销售的商品的商品号PNO。
SELECT PNO FROM SP
GROUP BY PNO
HAVING COUNT(*)=
(SELECT COUNT(*)FROM S);
(2) 查询与商品“TV”颜色相同的商品名PN。
SELECT P.PN
FROM P, P PX
WHERE P.COLOR=PX.COLOR AND PX.PN=‘TV';
(3) 查询销售商品“TV”的商店名SN。
SELECTS.SN
FROM S,SP,P
WHERE S.SNO=SP.SNO AND P.PNO=SP.PNO
AND P.PN=‘TV’
第一题:
学生——课程数据库的数据示例如下图所示,写出下列各题的SQL语句。不要求写出执行后的结果。
Student
学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
200215121
李勇
男
20
CS
200215122
刘晨
女
19
CS
200215123
王敏
女
18
MA
200215125
张立
男
19
IS
Course SC
课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
学号
Sno
课程号
Cno
成绩
Grade
200215121
1
92
200215121
2
85
200215121
3
88
200215122
2
90
200215122
3
80
1. 画出PowerDesigner中上述学生——课程数据库的物理数据模型。
2. 用SQL语句建立一个“课程”表Course,须在语句中写出主键和外键。
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY Cpno REFERENCES Course(Cno)
);
3. 查询全体学生的姓名及其出生年份。
SELECT Sname, 2014-Sage
FROM Student;
4. 查询年龄不在20~23岁之间的学生姓名、系别和年龄。
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
5. 查询所有姓刘的学生的姓名、学号和性别。
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE ‘刘%’;
6. 查询选修了课程的学生人数。
SELECT COUNT(DISTINCT Sno) FROM SC;
7. 查询学生200215012选修课程的总学分数。
SELECT SUM(Ccredit)
FROM SC, Course
WHERE Sno=’200215012’ AND SC.Cno=Course.Cno;
8. 查询选修了3门以上课程的学生学号。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3
9. 查询选修2号课程且成绩在90分以上的所有学生。
SELECT Student.Sno, Sname
FROM Student, SC
WHERE Student.Sno=SC.Sno AND SC.Cno=’2’ AND SC.Grade>90;
10. 查询与“刘晨”在同一个系学习的学生。
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN(SELECT Sdept FROM Student WHERE Sname=’ 刘晨’);
11. 查询选修了课程名为“信息系统”的学生学号和姓名。
SELECT Student, Sno, Sname
FROM Student, SC, Course
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname=’ 信息系统’;
12. 找出每个学生超过他选修课程平均成绩的课程号。
SELECT Sno, Cno
FROM SC x
WHERE Grade>=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
13. 查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。
SELECT Sname, Sage
FROM Student
WHERE Sage<(SELECT MAX(Sage)
FROM Student
WHERE Sdept=’CS’) AND Sdept <>’CS’
14. 将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE ‘CS’=(SELECT Sdept FROM Student WHERE Student.Sno=SC.Sno)
15. 删除计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE ‘CS’=(SELECT Sdept FROM Student WHERE Student.Sno=SC.Sno);
第二题:
关系模式如下:
商品P(PNO,PN,COLOR,PRICE)
商店S(SNO,SN,CITY)
销售SP(PNO,SNO,QTY)
用SQL实现如下操作:
(1) 查询销售所有商品的商店名SN。
SELECT SN FROM S
WHERE SNO IN
(SELECT SNO
FROM SP
GROUP BY SNO
HAVING COUNT(*)=
(SELECT COUNT(*)FROM P));
答案二
SELECT SN FROM S
WHERE NOT EXISTS
(SELECT * FROM P
WHERE NOT EXISTS
(SELECT * FROM SP
WHERE SNO=S.SNO AND PNO=P.PNO));
(2) 将在London销售红色商品的商店号SNO,商店名SN建立视图RLS。
答案一
CREATEVIEWRLSAS
SELECTSNO,SN
FROMS,SP,P
WHERES.SNO=SP.SNO
ANDSP.PNO=P.PNO
ANDS.CITY=‘London'
ANDP.COLOR=‘Red';
答案二
CREATEVIEWRLSAS
SELECTSNO,SN
FROMS
WHERECITY=‘London'
ANDSNOIN
(SELECTSNO
FROMSP
WHEREPNOIN
(SELECTPNO
FROMP
WHERECOLOR=‘Red’));
第一题:
学生——课程数据库的数据示例如下图所示,写出下列各题的SQL语句。不要求写出执行后的结果。
Student
学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
200215121
李勇
男
20
CS
200215122
刘晨
女
19
CS
200215123
王敏
女
18
MA
200215125
张立
男
19
IS
Course SC
课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
学号
Sno
课程号
Cno
成绩
Grade
200215121
1
92
200215121
2
85
200215121
3
88
200215122
2
90
200215122
3
80
16. 查询计算机科学系全体学生的名单。
SELECT Sname
FROM Student
WHERE Sdept=’CS’
17. 查询考试成绩有不及格的学生的学号。
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60
18. 查询年龄在20到23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23
19. 查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN(‘CS’, ‘MA’,’IS’)
20. 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。(4分)
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC
21. 查询名字中第2个字为“阳”字的学生的姓名和学号。
SELECT Sname, Sno
FROM Student
WHERE Sname LIKE ‘_阳%’
22. 查询计算机科学系年龄在20岁以下的学生姓名。
SELECT Sname
FROM Student
WHERE Sdept=’CS’ AND Sage<20
23. 求各个课程号及相应的选课人数。
SELECT Cno, COUNT(Sno)
FROM SC
GROUP BY Cno
24. 查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄。
SELECT Sname, Sage
FROM Student
WHERE Sage<(SELECT MIN(Sage)
FROM Student
WHERE Sdept=’CS’) AND Sdept <>’CS’
25. 查询所有选修了1号课程的学生姓名。
SELECT Sname
FROM Student
WHERE EXISTS
(SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=’1’)
26. 查询计算机科学系的学生及年龄不大于19岁的学生。
SELECT *
FROM Student
WHERE Sdept=’CS’
UNION
SELECT *
FROM Student
WHERE Sage<=19
27. 查询既选修了课程1又选修了课程2的学生。
SELECT Sno
FROM SC
WHERE Cno=’1’
INTERSECT
SELECT Sno
FROM SC
WHERE Cno=’2’
28. 将所有学生的年龄增加1岁。
UPDATE Student
SET Sage=Sage+1
29. 建立信息系选修了1号课程的学生的视图。
CREATE VIEW IS_S1(Sno, Sname, Grade)
AS
SELECT Student.Sno, Sname, Grade
FROM Student, SC
WHERE Sdept=’IS’ AND Student.Sno=SC.Sno AND SC.Cno=’1’
第二题:
关系模式如下:
商品P(PNO,PN,COLOR,PRICE)
商店S(SNO,SN,CITY)
销售SP(PNO,SNO,QTY)
用SQL实现如下操作:
(1) 所有商店都销售的商品的商品号PNO。
答案一若销售关系中某商品号出现次数=商店总数,则该商品号为所求。
SELECT PNO
FROM SP
GROUP BY PNO
HAVING COUNT(*)=(SELECT COUNT(*)FROM S);
答案二
SELECT PNO
FROM SP AS SPX
WHERE NOT EXISTS
(SELECT *
FROM SP AS SPY
WHERE NOT EXISTS
(SELECT *
FROM SP
WHERE SNO=SPY.SNO AND PNO=SPX.PNO));
(2) 查询与商品“TV”颜色相同的商品名PN。
SELEC TP.PN
FROM P,P AS PX
WHERE P.COLOR=PX.COLOR AND PX.PN=‘TV';
(3) 查询销售商品“TV”的商店名SN。
SELECT S.SN
FROM S,SP,P
WHERE S.SNO=SP.SNO
展开阅读全文