连接两个或更多表时的SQL查询

时间:2018-09-12 17:06:22

标签: mysql

IMDB数据库具有以下表

-n, --lines=[-]NUM       print the first NUM lines instead of the first 10;
                         with the leading '-', print all but the last
                         NUM lines of each file

a)编写一个查询,列出在90年代(1990-1999年)出现在电影中的女性演员,这些女性演员的评分高于8.5。

b)编写一个查询,列出所有两次评级低于3.0的电影中的演员。列出演员的姓名,电影和每个等级,按照演员的姓氏和名字的升序排列。

c)编写一个查询,列出所有参加过两部或更多部不同流派电影的演员。列出他们的名字,电影和各自的流派。

我的答案:

a)

actors(id, first_name, last_name, gender)  
directors(id, first_name,last_name)  
directors_genres(director_id, genre, prob)  
movies(id, name,year, rank)  
movies_directors(director_id, movie_id)  
roles(actor_id,movie_id, role)  
movies_genres(movie_id, genre)

。是对的吗?

,任何人都可以帮助您处理其他查询。预先感谢

3 个答案:

答案 0 :(得分:0)

您忘记了性别,并且高于8.5(不高于或等于)。

SELECT actors.firstname 
from roles inner join movies on roles.movie_id = movies.id
        inner join actors on actors.id=roles.aid
where movies.year between 1990 and 1999
        and movies.rank > 8.5
and actors.gender = 'F';

P.S。这是你的学校作业吗?

答案 1 :(得分:0)

SELECT
    first_name, last_name 
FROM actors 
    JOIN
    movies ON actors.id=movies.id
WHERE movies.gender='female'and movies.rank>8.5 AND movies.year
BETWEEN 
    1990-1999

向角色表添加角色

actors(id, first_name, last_name, gender,role)
movies(id, name,year, rank)

答案 2 :(得分:0)

另一个变体:

SELECT actors.firstname FROM actors WHERE id IN(
SELECT actors_id FROM roles WHERE movies_id IN(
SELECT id FROM movies WHERE (movies.year BETWEEN 1990 and 1999)
                        and (movies.rank >=8)));