SQL28 查找描述信息中包含robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部
思路:三表连接
需要仔细拆解题目的意思。
注意事项:
描述信息中包含robot使用LIKE;
分类要求包含电影总数量,是对于分类类别的要求,而不是对于包含robot电影的要求,所以不能直接在条件f.description like '%robot%'
后面直接根据条件筛选count(film_category.film_id)>=5;
题目中有误导,分类的电影总数量应该是count(film_categoryfilm_id),而不是count(film_category.category_id)
解答:
SELECT a.`name`,count(a.film_id) FROM
(SELECT f.film_id, f.title,fc.category_id,c.`name`
FROM film as f
inner JOIN film_category as fc on fc.film_id = f.film_id
INNER join category as c on c.category_id = fc.category_id
WHERE f.description like '%robot%') as a ##查找出带有robot的电影
inner JOIN
(SELECT fc.category_id,count(fc.film_id) as num FROM film_category as fc
GROUP BY fc.category_id
HAVING num >= 5) as b ###查找出存在>=五部的电影类型
on a.category_id = b.category_id
SQL29 使用join查询方式找出没有分类的电影id以及名称
解答:
内连接+not in
SELECT film_id,title FROM film
WHERE film_id not in
(SELECT fc.film_id FROM film_category as fc
JOIN category as c
on c.category_id = fc.category_id)
SQL30使用子查询的方式找出属于Action分类的所有电影对应的title,description
解答:
子查询,即不可以用join连接
SELECT
title,
description
FROM
film
WHERE
film_id IN ( SELECT film_id FROM film_category WHERE category_id IN ( SELECT category_id FROM category WHERE NAME = "Action" ) )