В запросе ничего сложного, всё так, как вы и описали
Только, разумеется, в одном запросе.
Для этого пора бы уже освоить джойны. Нормализацию БД вы освоили - это прекрасно.
Джойны - тоже не бином ньютона, это основа SQL. Второй запрос не нужен, всё делается в одном
Сначала выбираем фильмы по тегам
select f.* from sakila.category c
join sakila.film_category fc on fc.category_id = c.category_id
join sakila.film f on f.film_id = fc.film_id
where c.name in ('Action', 'Drama')
group by f.film_id;
Если хотим добавить поиск по заголовку, то просто добавляем к этому же запросу еще условие во WHERE,
and description like '%Drama%'
https://sqlize.online/sql/mysql57/8d7c91ad5f6cf415...
Правда на таких объемах LIKE делать не рекомендуется. Но если сейчас работает по всей базе, то по десятой части и подавно будет. Но в целом надо уже прикручивать внешний поисковый движок, ElasticSearch. Ну или хотя бы добавить полнотекстовый индекс по названию (и тексту тогда уж заодно) и искать в них через match...against