Ga naar inhoud

Header

Data samenvoegen met LEFT JOIN - Opdrachten

1. De rollen van acteurs

We hebben data van acteurs (tabel actors). En data van rollen (tabel roles).

Header

We willen nu weten welke acteur welke rollen vervult.

Hiervoor gaan we gebruik maken van LEFT JOIN.

Maak onderstaande query af om de tabellen samen te voegen.

  • Linker tabel: actors.
  • Rechter tabel: roles.
  • Kolom id uit tabel actors is te matchen met kolom actor_id uit tabel roles.
  • Gebruik LEFT JOIN.
  • Selecteer alle kolommen.
SELECT
  *
FROM
  actors
  LEFT JOIN roles ON actors.id = roles.actor_id;
id first_name last_name gender film_count actor_id movie_id role
16844 William (I) Armstrong M 1 16844 10920 Lydecker
36641 Jay (I) Benedict M 2 36641 10920 Russ Jorden
42278 Michael Biehn M 1 42278 10920 Cpl. Dwayne Hicks
... ... ... ... ... ... ... ...
Columns: 8
Rows: 1.989




2. Gebruik aliases

We hebben in de vorige opdracht de tabelnamen voluit geschreven.

We gaan hier nu aliases voor gebruiken met AS.

Hergebruik je code uit de vorige opdracht en pas aliases toe.

  • Noem tabel actors: a.
  • Noem tabel roles: r.
SELECT
  *
FROM
  actors AS a
  LEFT JOIN roles AS r ON a.id = r.actor_id;
id first_name last_name gender film_count actor_id movie_id role
16844 William (I) Armstrong M 1 16844 10920 Lydecker
36641 Jay (I) Benedict M 2 36641 10920 Russ Jorden
42278 Michael Biehn M 1 42278 10920 Cpl. Dwayne Hicks
... ... ... ... ... ... ... ...
Columns: 8
Rows: 1.989




3. Specifieke selectie maken

We hebben tot nu toe alle kolommen geselecteerd.

We gaan nu een specifieke selectie maken.

Hergebruik je code uit de vorige opdracht en maak een specifieke selectie.

  • Selecteer alle kolommen uit tabel actors.
  • Selecteer alleen kolom role uit tabel roles.
SELECT
  a.*,
  r.role
FROM
  actors AS a
  LEFT JOIN roles AS r ON a.id = r.actor_id;
id first_name last_name gender film_count role
16844 William (I) Armstrong M 1 Lydecker
36641 Jay (I) Benedict M 2 Russ Jorden
42278 Michael Biehn M 1 Cpl. Dwayne Hicks
... ... ... ... ... ...
Columns: 6
Rows: 1.989




4. (Extra) Groeperen

We hebben nu een tabel met alle rollen van acteurs.

Door te groeperen gaan we bepalen hoeveel rollen een acteur heeft gespeeld.

  • Tabel actors bevat al wel een kolom film_count.
  • Maar misschien speelt een acteur wel meerdere rollen in één film.

Hergebruik je vorige code en schrijf een query.

  • Gebruik GROUP BY.
  • Groepeer op kolom id uit tabel actors.
  • Tel het aantal rollen met functie COUNT().
  • Selecteer de volgende kolommen:
    • first_name.
    • last_name.
    • COUNT(...).
SELECT
  a.first_name,
  a.last_name,
  COUNT(r.role) as roles_count
FROM
  actors AS a
  LEFT JOIN roles AS r ON a.id = r.actor_id
GROUP BY
  a.id;
id first_name last_name roles_count
589358 Caroline Crosthwaite-Eyre 1
178682 Taylor Goodall 1
119276 Thomas Derrah 1
... ... ... ...
Columns: 4
Rows: 1.907




5. (Extra) Filteren en sorteren

We hebben nu een tabel met het aantal rollen van acteurs.

Door te filteren en sorteren gaan we het resultaat bruikbaarder maken.

Hergebruik je vorige code en schrijf een query.

Zodanig dat: * Filter zodat alleen acteurs met meer dan 1 rol voorkomen. * Gebruik HAVING. * Sorteer aflopend op het aantal rollen. * Gebruik ORDER BY.

SELECT
  a.id,
  a.first_name,
  a.last_name,
  COUNT(r.role) as roles_count
FROM
  actors AS a
  LEFT JOIN roles AS r ON a.id = r.actor_id
GROUP BY
  a.id
HAVING
  COUNT(r.role) > 1
ORDER BY roles_count DESC;
id first_name last_name roles_count
22591 Kevin Bacon 9
376249 Brad Pitt 3
35536 Steve Buscemi 3
... ... ... ...
Columns: 4
Rows: 69