Consultas de división

-- Consultas de división
-- Son consultas en las que tenemos que buscar información
-- en 'negativo'. Es decir, registros de una tabla que no
-- tengan relación con registros de otra tabla

-- ¿Hay algún actor que no haya trabajado en películas de comedia?

-- La consulta siguiente NO nos responde la pregunta
-- Nos dice los actores que han trabajado en películas que no son comedia
select first_name,last_name,name from actor
join film_actor using(actor_id)
join film using(film_id)
join film_category using(film_id)
join category using(category_id)
order by actor.actor_id;
-- where name<>'comedy';

-- ¿Cual es el enfoque correcto?
-- Darle la vuelta a la pregunta

-- QUé actores sí que han trabajado en comedia
select first_name,last_name,name from actor
join film_actor using(actor_id)
join film using(film_id)
join film_category using(film_id)
join category using(category_id)
where name='comedy';

-- Uso la consulta como subconsulta y digo todos los actores que no están
-- en la consulta anterior

select * from actor
where actor_id not in (select actor_id from actor
join film_actor using(actor_id)
join film using(film_id)
join film_category using(film_id)
join category using(category_id)
where name='comedy');

-- ¿Hay actores que no han trabajado en películas de rating 'R'

-- Esta consulta, igual que antes, no nos responde la pregunta
-- Nos dice qué actores han trabajado en películas que no son de rating 'R'
-- Eso no es lo que nos están preguntando

select * from actor
join film_actor using(actor_id)
join film using(film_id)
where rating<>'R';

-- Le damos la vuelta a la pregunta ¿Qué actores SÍ que han trabajado
-- en películas de rating 'R'
select * from actor
join film_actor using(actor_id)
join film using(film_id)
where rating='R';

-- Una vez yo sé qué actores han trabajado en películas de rating R
-- Los descarto, esos no
select * from actor
where actor_id not in (
select actor_id from actor
join film_actor using(actor_id)
join film using(film_id)
where rating='R'
);

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos