📜  FILM 数据库上的 SQL 查询

📅  最后修改于: 2021-09-09 10:47:09             🧑  作者: Mango

考虑电影数据库中的以下表格:

ARTIST (Art_id, Art_Name, Art_Gender) 
PRODUCER (Prod_id, Prod_Name, Prod_Phone)
FILMS (Film_id, Film_Title, Film_Year, Film_Lang, Prod_id) 
CASTING (Art_id, Film_id, Part) 
REVIEW (Film_id, Stars) 

这五个表的数据内容如下所示:

SELECT * FROM ARTIST;

Art_id Art_Name Art_Gender
101 AMIT M
102 PRITAM M
103 SREYA F
104 SUJATA F

SELECT * FROM PRODUCER;

Prod_id Prod_Name Prod_Phone
200 ADITYA 6735835863
201 FARAN 8654297433
202 YASH 8765421567
203 NIRAJ 7654321986

SELECT * FROM FILMS;

Film_id Film_Title Film_Year Film_Lang Prod_id
11 WAR 2 2017 ENGLISH 201
12 MOMENTS 2015 HINDI 203
13 THE MAY 2019 ENGLISH 201
14 BHANUMATI 2014 TELEGU 200

SELECT * FROM CASTING;

Art_id Film_id Part
101 12 ACTOR
101 11 ACTOR
103 13 ACTRESS
103 12 GUEST
104 14 ACTRESS

SELECT * FROM REVIEW;

Film_id Stars
11 4
12 2
13 5
14 4

查询 1:
找出所有制片人为“NIRAJ”的电影的名称。

首先,我们将找到名为“NIRAJ”的生产者的生产者 ID,为此我们使用 PRODUCER 表。

SELECT PROD_ID 
FROM PRODUCER 
WHERE PROD_NAME = ‘NIRAJ’

上述查询将返回 Prod_id “203”。现在我们将找到 pros_id 为“203”的电影的标题。为此,我们使用表 FILMS 并将上述查询用作子查询。

SELECT FILM_TITLE 
FROM FILMS 
WHERE PROD_ID IN (SELECT PROD_ID 
FROM PRODUCER 
WHERE PROD_NAME = ‘NIRAJ’);

输出:

FILM_TITLE
MOMENTS

查询 2:
显示所有在 2016 年至 2018 年期间出演电影的艺术家。

为了找到这一点,我们需要使用 ARTIST 表的 ARTIST_NAME 字段以及 FILMS 表的 FILM_YEAR 字段。为了连接这两个表,我们使用第三个表 CASTING 使用 Art_id 和 Film_id。加入后,我们使用 BETWEEN运算符检查 2016 年和 2018 年之间的 FILM_YEAR。

SELECT A.ART_NAME,  F.FILM_TITLE, F.FILM_YEAR 
FROM ARTIST A, CASTING C, FILMS F
WHERE A.ART_ID=C.ART_ID 
AND C.FILM_ID=F.FILM_ID 
AND F.FILM_YEAR  BETWEEN 2016 AND 2018;

输出:

ART_NAME FILM_TITLE FILM_YEAR
AMIT WAR 2 2017

查询 3:
显示获得星级的电影名称,并根据星级对结果进行排序。

为此,我们需要 FILMS 表的 FILM_TITLE 字段以及 REVIEW 表的 STARS 字段。为了连接这两个表,我们将使用公共字段,即 FILM_ID。加入后,我们使用 ORDER BY 子句按 STARS 增加的顺序显示结果。

SELECT F.FILM_TITLE, R_STARS
FROM FILMS F, REVIEW R
WHERE F.FILM_ID=R.FILM_ID
ORDER BY R.STARS DESC

输出:

FILM_TITLE STARS
THE MAY 5
BHANUMATI 4
WAR 2 4
MOMENTS 2

查询 4:
将所有制片人为“NIRAJ”的电影的明星更新为 5。

首先,我们使用以下查询找到名为“NIRAJ”的 PRODUCER 的 PRODUCER ID:

SELECT PROD_ID 
FROM PRODUCER 
WHERE PROD_NAME = ‘NIRAJ’

然后使用这个 PROD_ID 从 FILMS 表中找到 FILM_ID。

SELECT FILM_ID FROM FILMS 
WHERE PROD_ID IN (SELECT PROD_ID 
FROM PRODUCER 
WHERE PROD_NAME = ‘NIRAJ’)

然后这个 FILM_ID 有助于使用 UPDATE 命令更新 REVIEW 表中 STARS 的值。

UPDATE REVIEW 
SET STARS=5 
WHERE FILM_ID IN (SELECT FILM_ID FROM FILMS 
WHERE PROD_ID IN (SELECT PROD_ID 
FROM PRODUCER 
WHERE PROD_NAME = ‘NIRAJ’));

输出:

1 row updated.

为了观察变化,我们可以在 REVIEW 表中使用 SELECT * 命令。

SELECT * FROM REVIEW;

Film_id Stars
11 4
12 5
13 5
14 4