(3)SELECT name ,COUNT (date)
FROM person JOIN accident ON person.drive_id=accident.driver_id HAVING COUNT(date)>3;
(4)DELETE FROM car FROM car JOIN owns ON car.license=owns.license JOIN person ON person.driver_id=owns.driver_id WHERE Model='Mazda' AND person.name='John Smith';
25. 如下所示是一个保险公司的数据库,对这个关系数据库用SQL回
答以下问题:
person(drive_ id , name, address);car(license, year, model);
accident(date, driver _id , damage);owns(driver _ id, license);log(license, date, driver);
其中车主关系person包括:driver _ id(驾驶执照号);name(姓名);
address(地址)
汽车关系car包括:license(汽车牌照);year(出厂日期);model(型
号);
事故关系accident包括:date(出事日期);driver _ id(出事车主
的驾驶执照号);damage(毁坏程度);
汽车所属关系owns包括:driver _ id(出事车主的驾驶执照号);
license(汽车牌照);
日志关系log包括:license(汽车牌照);date(出事日期);driver _
id(出事车主的驾驶执照号)。 用SQL语句实现下列查询:
(1) 查找在1989年其车辆出过事故的车主姓名。
(2) 查找和John Smith的车有关的事故数量。 (3) 查找出过三次以上事故的司机姓名。 (4) 删除John Smith的马自达车(Mazda) 答案:
(
1
)
SELECT
name
FROM
person
JION
accident
ON
person.driver_id=accident.driver_id WHERE accident.date=’1989’;
(2)SELECT COUNT(date)as 事故数量 FROM person JOIN accident ON person.driver_id=accident.driver_id WHERE name ='John smith'; (3)SELECT name ,COUNT (date)
FROM person JOIN accident ON person.drive_id=accident.driver_id HAVING COUNT(date)>3;
(4)DELETE FROM car FROM car JOIN owns ON car.license=owns.license JOIN person ON person.driver_id=owns.driver_id WHERE Model='Mazda' AND person.name='John Smith';
26. 现有如下关系模型:T (T# , TN , G# , AGE);G (G# , GN , T#);C (C# , CN , HOUR);TC (T# , C# , ROOM);其中教师关系T 包括:教师代码 ( T# ) , 姓名(TN), 教研室代码(G#),年龄(AGE);教研室关系 G 包括:教研室代码(G#),教研室名称(GN),教研室主任的教师代码(T#);课程关系 C 包括:课程号(C#),课程名(CN),学时(HOUR);任教关系 TC 包括:教师代码(T#),课程号(C#),教室(ROOM);用SQL语句实现下列查询:
(1) 查找“数学”教研室的教研室主任的教师姓名。 (2) 查找不教课的教师姓名。
(3) 查询“外语”教研室教授的所有课程名称。 (4) 查找教授课程在三门以上的教师姓名。 答案:(1)SELECT TN FROM T JOIN G ON T.G#=G.G#
JOIN G ON T.T#=G.T# WHERE GN ='数学';
(2)SELECT TN FROM T JOIN TC ON T.T#=TC.T# JOIN C ON TC.C#=C.C# WHERE C.HOUR='0';
(3)SELECT CN FROM C JOIN TC ON C.C#=TC.C# JOIN T ON TC.T#=T.T# JOIN G ON T.G#=G.G# WHERE G.GN='外语';
(4)SELECT TN ,COUNT (*) AS 课程数 FROM T JOIN TC ON T.T#=TC.T# GROUP BY T.TN HAVING COUNT (*) >3;
27. 已知关系S,P,J,SPJ的关系模式为:S(SNO,SN,CITY);P(PNO,PN,COLOR);J(JNO,JN,CITY);SPJ(SNO,JNO,PNO,QTY);其中:SNO为供应商号,SN为供应商姓名,CITY为所在城市;PNO为零件号,PN为零件名称,COLOR为颜色;JNO为工程项目号,JN为工
程项目名称;QTY为数量。 试用SQL语言完成下列查询:
(1) 求出使用全部零件的工程项目名称。
首先分析其涉及到的表:P,J,SPJ 实现要求出使用全部零件的工程标号:
在与J表连接,最后投影JNO求出工程项目名
(2) 取出供应商姓名,该供应商提供最小号码(即零件号最小)的红色零件。
(3) 取出1个以上供应商提供的零件号。
就是由很多供应商提供相同编号的零件,涉及到的表为SPJ,进行分组统计相同PNO下的SNO
Select PNO From SPJ
Group by PNO
Having count(SNO)>1
28. 已知关系S,P,J,SPJ的关系模式为:S(SNO,SN,CITY);P(PNO,PN,COLOR);J(JNO,JN,CITY);SPJ(SNO,JNO,PNO,QTY);其中:SNO为供应商号,SN为供应商姓名,CITY为所在城市;PNO为零件号,PN为零件名称,COLOR为颜色;JNO为工程项目号,JN为工程项目名称;QTY为数量。 试用SQL语言完成下列查询: (1) 求出供应全部零件的供应商姓名。
(2) 取出供应商姓名,该供应商提供最大号码(即零件号最大)的蓝色零件。
(3) 取出在同一城市的每对工程项目号。
29. 关系模式描述如下:
工作人员:EMPLOYEE(NAME, SSN, BDATE, ADDRESS, SEX, SALARY, SUPERSSN, DNO);
部门:DEPARTMENT(DNAME, DNUMBER, MSGSSN, MSGSTARTDATE); 工程项目:PROJECT(PNAME, PNUMBER, PLOCATION, DNUM); 工作人员与工程项目:WORKS_ON(SSN,PNO,HOURS);属性说明如下:NAME:雇员名;SSN:雇员的身份证号;BDATE:雇员生日;ADDRESS:雇员地址;SEX:雇员性别;SALARY:雇员工资;SUPERSSN:雇员直接领到的身份证号;DNO:工作人员所属部门号;DNAME:部门名字;DNUMBER:部门号;MSGSSN:部门领导身份证号;MSGSTARTDATE:部门领导开始领导工作的日期;PNAME:项目名称;PNUMBER:项目号;PLOCATION:项目所在地;DNUM:项目所属部门号;PNO:项目号;HOURS:工作小时数。用SQL表达如下查询: (1) 参加项目名为“公路1”的雇员名。
(2) 检索参加工程号为“P1”,且酬金最高的职工号及其工资。
30. 关系模式描述如下:
工作人员:EMPLOYEE(NAME, SSN, BDATE, ADDRESS, SEX, SALARY, SUPERSSN, DNO);
部门:DEPARTMENT(DNAME, DNUMBER, MSGSSN, MSGSTARTDATE); 工程项目:PROJECT(PNAME, PNUMBER, PLOCATION, DNUM);