一、问题描述
某车辆调度系统,记录了车辆调度情况,包括发车时间,收车时间,该系统的部分关系模式如下:
驾驶员:EMP (Eno, Ename, Sex, Telephone),各属性分别表示驾驶员工号,驾驶员姓名,驾驶员性别和电话号码;
汽车:CAR(Cno, Brand),各属性分别表示汽车车牌号,车辆品牌名;
调度: SCHEDULE (Sno, Eno, Cno, StartTime, EndTime),各属性分别表示调度号,驾驶员工号,汽车车牌号,发车时间,收车时间)。
试用SQL语句完成下面1-8题。
1.创建调度关系(SCHEDULE) 的SQL语句,要求指定关系的主码和外码。(其中Sno:CHAR(10), Eno: CHAR (10), Cno: CHAR (8), StartTime: DATETIME, EndTime: DATETIME )
CREATE SCHEDULE(
Sno CHAR(10) PRIMARY KEY,
Eno CHAR (10),
Cno CHAR (8),
StartTime DATETIME,
EndTime DATETIME,
FOREIGN KEY(Eno) REFERENCES EMP(Eno),
FOREIGN KEY(Cno) REFERENCES CAR(Cno)
)
2.查询姓陈的驾驶员曾经驾驶过的车辆信息,包括车牌号和车辆品牌名。
SELECT CAR.Cno,Brand
FROM EMP,CAR,SCHEDULE
WHERE Ename LIKE'陈' AND CAR.Cno=SCHEDULE.Cno AND SCHEDULE.Eno=EMP.Eno
3.查询所有在调度表中没有安排过“比亚迪”品牌车辆的驾驶员工号。
SELECT Eno
FROM SCHEDULE
WHERE Cno NOT IN (SELECT Cno FROM CAR WHERE Brand='比亚迪'
4.统计每个司机(Eno)的出车次数。
SELECT Eno,COUNT(Eno)
FROM SCHEDULE
GROUP BY(Eno)
5.将驾驶员“李力”驾驶的汽车车牌号更改为“C00123”。
UPDATE SCHEDULE
SET Cno='C00123'
WHERE Eno IN(SELECT Eno FROM EMP WHERE Ename='李力')
6.删除发车时间在2017年到2019年之间的调度信息。
DELETE FROM SCHEDULE
WHERE StartTime BETWEEN '2017' AND '2019'
7.创建所有“东风”品牌汽车的调度信息的视图DF_ VIEW,属性有Sno、Eno、Ename、Cno、Brand、StartTime 和EndTime。
CREATE VIEW DF_VIEW(Sno,Eno,Ename,Cno,Brand,StartTime,EndTime)
AS
SELECT Sno,EMP.Eno,Ename,CAR.Cno,Brand,StartTime,EndTime
FROM EMP,CAR,SCHEDULE
WHERE SCHEDULE.Eno=EMP.Eno AND SCHEDULE.Cno=CAR.Cno
8.授予驾驶员“王明”(用户)可以查看EMP表的权限。
GRANT SELECT
ON EMP
TO 王明