create table SPJ
(SNO INT NOT NULL,
PNO INT NOT NULL,
JNO INT NOT NULL,
FOREIGN KEY(SNO) REFERENCES S(SNO),
FOREIGN KEY(PNO) REFERENCES P(PNO),
FOREIGN KEY(JNO) REFERENCES J(JNO)
);
2、做下面的查询时,大家记得distinct的使用。
针对上题中四个表,用SQL语句完成下述操作(2-9题)。
找出使用供应商S1所供零件的工程号码。
SELECT JNO FROM SPJ
WHERE SNO = 'S1';
3、找出工程项目J2使用的各种零件名称及其数量。
SELECT P.PNAME,SPJ.QTY
FROM P,SPJ
WHERE P.PNO = SPJ.PNO
AND SPJ.JNO = 'J2';
4、找出上海厂商供应的所有零件号码。
SELECT DISTINCT PNO
FROM SPJ
WHERE SNO IN(
SELECT SNO
FROM S
WHERE CITY = '上海');
5、找出使用上海产的零件的工程名称。
SELECT J.NAME
FROM J,SPJ,S
WHERE J.JNO = SPJ.JNO
AND SPJ.SNO = S.SNO
ANDS.CITY = '上海';
6、找出没有使用天津产零件的工程号码
SELECT JNO
FROM J
WHERE NOT EXISTS
(
SELECT *
FROM SPJ
WHERE SPJ.JNO = J.JNO
AND SNO IN(
SELECT SNO
FROM S
WHERE CITY = '天津')
);
7、将由供应商S5供给工程代码为J4的零件P6改为由S3供应。
UPDATE SPJ
SET SNO = S3
WHERE SNO = 'S5' AND JNO = 'J4' AND PNO = 'P6';
8、从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。
DELETE
FROM SPJ
WHERE SNO = 'S2';
DELETE
FROM S
WHERE SNO = 'S2';
9、请将(S2,J6,P4,500)插入供应情况表。
INSERT INTO SPJ(SNO,JNO,PNO,QTY)
VALUES(S2,J6,P4,500)
10、对于教学数据库的三个基本表:
S(S# ,SNAME ,AGE ,SEX)
SC(S# ,C# ,GRADE)
C(C# ,CNAME ,TEACHER)试用SQL语句表达下列查询(10-18):
10、查询姓刘的老师所授课程的课程号和课程名
SELECT C#,CNAME
FROM C
WHERE TEACHER = ‘刘’;
11、查询年龄大于23岁的男同学的学号和姓名。
SELECT s#, sname
FROM S
WHERE age>23 AND sex='男';
12、查询学号为S3学生所学课程的课程号、课程名和任课教师名。
SELECT *
FROM C,SC
WHERE C.C# = SC.C# AND SC.S# = 'S3';
13、查询“张小飞”没有选修的课程号和课程名。
SELECT C#,CNAME
FROM C
WHERE NOT EXISTS
(SELECT * FROM S, SC
WHERE sc.s#=s.s#
AND sc.c#=c.c# AND s.sname='张小飞');
14、查询至少选修了3门课程的学生的学号和姓名。
SELECT S.S#,S.SNAME
FROM S,SC
WHERE S.S#=SC.S#
GROUP BY S.S#
HAVING count(*)>=3;
15、在SC中删除尚无成绩的选课元组。
delete from SC
where SC.GRADE in null;
16、把“高等数学”课的所有不及格成绩都改为60。
update SC
set SC.GRADE = 60
where SC.GRADE < 60 and SC.CNO in (
select CNO
from C
where C.CNAME = '高等数学');
17、把低于所有人总平均成绩的女同学的成绩提高5%。
update SC
set SC.GRADE = SC.GRADE * (1 + 5%)
where SC.SNO in (select SNO
from S
where S.SEX = '女')
and SC.GRADE < (select avg(GRADE)
from SC);