📜  FILM数据库上的SQL查询

📅  最后修改于: 2021-08-24 04:41:39             🧑  作者: 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字段。为了联接这两个表,我们使用Art_id和Film_id使用第三个表CASTING。联接之后,我们使用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”的生产者的生产者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