Verified Commit abac838f authored by Kiryuu Sakuya's avatar Kiryuu Sakuya 🎵
Browse files

Update No.2

parent f5eb09ea
...@@ -3,10 +3,15 @@ ...@@ -3,10 +3,15 @@
## 数据库 ## 数据库
演员A(Ano,Aname,Aaddress,Agender,Abrithday)包括属性:演员编号,演员姓名,演员地址,演员性别,演员生日; 演员A(Ano,Aname,Aaddress,Agender,Abrithday)包括属性:演员编号,演员姓名,演员地址,演员性别,演员生日;
电影公司C(Cno,Cname,Caddress,Ctel)包括属性:电影公司编号、公司名称,公司地址,公司电话; 电影公司C(Cno,Cname,Caddress,Ctel)包括属性:电影公司编号、公司名称,公司地址,公司电话;
电影M(Mno,Mname,Mlength,Myear,Cno)包括属性:电影编号,电影名称,电影长度,电影制作年份,电影公司编号; 电影M(Mno,Mname,Mlength,Myear,Cno)包括属性:电影编号,电影名称,电影长度,电影制作年份,电影公司编号;
上映信息I(Ino,Mno,Itime,Iprice)包括属性:上映信息编号、电影编号、上映时间、电影票价; 上映信息I(Ino,Mno,Itime,Iprice)包括属性:上映信息编号、电影编号、上映时间、电影票价;
电影演员关系表R(Rno,Mno,Ano,Rrole,Rtime)包括属性:关系编号、电影编号、演员编号,演员在电影中饰演角色名称,演员在电影中出现时间; 电影演员关系表R(Rno,Mno,Ano,Rrole,Rtime)包括属性:关系编号、电影编号、演员编号,演员在电影中饰演角色名称,演员在电影中出现时间;
电影、演员、电影公司、上映信息、电影演员关系表分别由电影编号(Mno)、演员编号(Ano)、电影公司编号(Cno)、上映信息编号(Ino)、关系编号(Rno)唯一标识,其中上映时间日期格式为yyyy-MM-dd(提示:格式统一可以直接比较大小); 电影、演员、电影公司、上映信息、电影演员关系表分别由电影编号(Mno)、演员编号(Ano)、电影公司编号(Cno)、上映信息编号(Ino)、关系编号(Rno)唯一标识,其中上映时间日期格式为yyyy-MM-dd(提示:格式统一可以直接比较大小);
### 建库命令 ### 建库命令
...@@ -155,15 +160,66 @@ INSERT INTO R ( ...@@ -155,15 +160,66 @@ INSERT INTO R (
### 1. 用 SQL 查询所有 `Warner Bros` 电影公司制作的电影名称和电影主演的姓名,主演要求在电影中出现的时间大于 40 分钟 ### 1. 用 SQL 查询所有 `Warner Bros` 电影公司制作的电影名称和电影主演的姓名,主演要求在电影中出现的时间大于 40 分钟
```mysql ```mysql
SELECT FROM WHERE SELECT M.Mname, A.Aname
FROM
M
JOIN R ON R.Mno = M.Mno
JOIN C ON C.Cno = M.Cno
JOIN A ON A.Ano = R.Ano
WHERE C.Cname = 'Warner Bros';
```
如果用数字就是下面这样
```mysql
SELECT M.Mname, A.Aname
FROM
M
JOIN R ON R.Mno = M.Mno
JOIN A ON A.Ano = R.Ano
WHERE M.Cno = '20001';
``` ```
### 2. 用 SQL 查询所有上映时间在 2006-09-01 和 2006-10-01 之间的由演员 `Nicolas Cage` 所演的电影的名称 ### 2. 用 SQL 查询所有上映时间在 2006-09-01 和 2006-10-01 之间的由演员 `Nicolas Cage` 所演的电影的名称
```mysql
SELECT M.Mname
FROM
M
JOIN I ON I.Mno = M.Mno
JOIN R ON R.Mno = M.Mno
JOIN A ON A.Ano = R.Ano
WHERE '2006-09-01' <= I.Itime AND I.Itime <= '2006-10-01' AND A.Aname = 'Nicolas Cage';
```
### 3. 用 SQL 将所有上映时间小于 2017-01-01 并且演员姓名为 `赵薇` 的电影的上映信息删除 ### 3. 用 SQL 将所有上映时间小于 2017-01-01 并且演员姓名为 `赵薇` 的电影的上映信息删除
```mysql
DELETE A
FROM
A
JOIN R ON A.Ano = R.Ano
JOIN M ON R.Mno = M.Mno
JOIN I ON M.Mno = I.Mno
WHERE
A.Aname = '赵薇' AND
I.Itime < '2017-01-01';
```
### 4. 用 SQL 将演员名称为 `Nicolas Cage`,电影制作公司为 `Warner Bros` 的电影的票价增加其原票价的 20% ### 4. 用 SQL 将演员名称为 `Nicolas Cage`,电影制作公司为 `Warner Bros` 的电影的票价增加其原票价的 20%
```mysql
UPDATE I, R, A, M, C
SET I.IPrice = IPrice * 1.2
WHERE I.Mno = R.Mno
AND R.Ano = A.Ano
AND A.Aname = 'Nicolas Cage'
AND R.Mno = M.Mno
AND M.Cno = C.Cno
AND C.Cname = 'Warner Bros';
```
### 5. 用 SQL 语句设计一个安全策略,保证用户 U1 只能查看演员 `Nicolas Cage` 所演的电影的上映信息(假设数据库中已经存在 U1 用户且他没有任何权限) ### 5. 用 SQL 语句设计一个安全策略,保证用户 U1 只能查看演员 `Nicolas Cage` 所演的电影的上映信息(假设数据库中已经存在 U1 用户且他没有任何权限)
### 6. 输出所有上映时间在 2009-11-01 和 2009-12-01 之间的电影信息,输出格式为「电影名/电影演员/电影长度/电影公司/电影上映时间/电影票价」,要求所显示的电影演员在电影中出现时间大于 40 分钟,若电影演员有多个,则用逗号隔开 ### 6. 输出所有上映时间在 2009-11-01 和 2009-12-01 之间的电影信息,输出格式为「电影名/电影演员/电影长度/电影公司/电影上映时间/电影票价」,要求所显示的电影演员在电影中出现时间大于 40 分钟,若电影演员有多个,则用逗号隔开
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment