Ga naar inhoud

Header

Subqueries met EXISTS - Opdrachten

1. Acteurs met een bepaalde rol

In de IMDb database hebben we gegevens van acteurs en rollen:

Header

We zijn geïnteresseerd in de acteurs die een bepaalde rol hebben gespeeld.

  • Rollen die beginnen met de letter Q.

Schrijf een query die dit doet:

  • Selecteer alle kolommen uit tabel actors.
  • Alleen de acteurs die een rol hebben gespeeld die met letter Q begint.

Maak gebruik van het volgende:

  • SELECT, FROM en WHERE.
  • Een subquery met EXISTS.
    • Selecteer alle kolommen uit tabel roles.
    • Waar een match is:
      • Tussen de overeenkomende kolommen uit tabellen actors en roles.
      • En waarden in kolom role beginnen met letter Q.
        • Maak gebruik van LIKE.
SELECT
  *
FROM
  actors
WHERE
  EXISTS (
    SELECT
      *
    FROM
      roles
    WHERE
      actors.id = roles.actor_id
      AND role LIKE 'Q%'
  );




2.(Extra) Acteurs met meer dan 2 rollen

Onderstaande query verkrijgt details van acteurs die meer dan 2 rollen hebben gespeeld:

SELECT
  a.first_name,
  a.last_name
FROM
  actors AS a
  LEFT JOIN roles AS r ON a.id = r.actor_id
GROUP BY
  a.id
HAVING
  COUNT(r.role) > 2;
first_name last_name
Bill Paxton
Kevin Bacon
Steve Buscemi
Michael (I) Madsen
Uma Thurman
Brad Pitt
Stevo Polyi
Columns: 2
Rows: 7

Hier wordt gebruik gemaakt van een LEFT JOIN.

Schrijf een query die hetzelfde resultaat geeft, maar waarbij je gebruik maakt van een subquery met EXISTS.

SELECT
  first_name, last_name
FROM
  actors
WHERE
  EXISTS (
    SELECT
      actor_id,
      count(actor_id)
    FROM
      roles
    WHERE
      actors.id = roles.actor_id
    GROUP BY
      actor_id
    HAVING
      count(actor_id) > 2
  );