Professional Documents
Culture Documents
Week 4 - Outer Joins v3
Week 4 - Outer Joins v3
DATABASES 1
Week 4
Databases 1 31-12-22
Leerdoelen
Databases 1 31-12-22 |3
Vorige week
Databases 1 31-12-22 |4
Opdrachten?
• CROSS JOIN
• INNER JOIN + OUTER JOIN
• JOIN multiple tables
• Executie volgorde
Databases 1 31-12-22 |5
Vraag
Wat is het verschil tussen een rode sleutel en een gele sleutel?
Antwoord:
Ze zijn allebei PRIMARY KEY, maar de rode sleutel is ook FOREIGN
KEY.
Databases 1 31-12-22 |6
Vraag
Antwoord:
Identificeert uniek een rij in de tabel.
Databases 1 31-12-22 |7
Vraag
Antwoord:
Refereert naar de PRIMARY KEY van een andere tabel.
Databases 1 31-12-22 |8
Vraag
Antwoord:
1
Databases 1 31-12-22 |9
Vraag
Antwoord:
2
Databases 1 31-12-22 | 10
Vraag
Antwoord:
2
Databases 1 31-12-22 | 11
Vraag
Antwoord:
3
Databases 1 31-12-22 | 12
Vraag
Tabel: Opleiding
OPLCODE OMSCHRIJVING ACADEMIE
IN Informatica AII
BK Bouwkunde ABCT
ET Electrotechniek AII
Tabel: Student
STUDENT NAAM OPLCODE
NR
1 Kees de Vries IN
2 Jan de Wit IN
3 Koos Tomeloos BK
4 Has Veras ET
Databases 1 31-12-22 | 13
Antwoord
6 kolommen :
Alle kolommen van de opleiding tabel + alle kolommen van de
student tabel.
12 rijen:
Achter elke rij uit de opleiding tabel wordt elke rij uit de student
tabel geplakt.
3 rijen x 4 rijen = 12 rijen
Databases 1 31-12-22 | 14
Vraag
Wat gebruiken we (bijna altijd) bij het maken van een query met
een INNER JOIN?
Antwoord:
Een FK en PK koppel
(aangegeven door een relatie tussen twee tabellen)
Databases 1 31-12-22 | 15
Vraag
Antwoord:
ON stukinstrument.instrumentnaam = instrument.instrumentnaam
AND stukinstrument.toonhoogte = instrument.toonhoogte;
Databases 1 31-12-22 | 16
Vraag
Antwoord:
Ja!
Uit de ON conditie komt een waarheidswaarde (true/false). Deze is
in beide gevallen gelijk (als A=B dan is ook B=A, en als A!=B dan
is ook B!=A).
Databases 1 31-12-22 | 17
OUTER JOIN
Databases 1 31-12-22 | 18
JOIN query resultaat
Databases 1 31-12-22 | 19
Antwoord
A: OUTER JOINs!
Databases 1 31-12-22 | 20
OUTER JOIN
OUTER JOIN: Geef alle rijen uit de ene tabel weer, ook al
wordt er niet naar die specifieke rij gerefereerd vanuit de
andere tabel.
Databases 1 31-12-22 | 21
Soorten OUTER JOINs
• LEFT JOIN
• RIGHT JOIN
• FULL JOIN
Databases 1 31-12-22 | 22
Soorten OUTER JOINs
(Er bestaat dus geen OUTER JOIN die OUTER JOIN heet)
Databases 1 31-12-22 | 23
Voorbeeld(1)
Databases 1 31-12-22 | 24
Voorbeeld(2)
Antwoord: NULL
Databases 1 31-12-22 | 25
Voorbeeld(3)
Antwoord:
COUNT(studentnr) in plaats van COUNT(*)
De rij dus alleen meetellen als er inderdaad een student bij staat.
Databases 1 31-12-22 | 26
OUTER JOIN
Bij een outer join worden dus alle velden op NULL gezet die niet
bestaan.
Databases 1 31-12-22 | 27
Vraag
Antwoord:
Omdat een PK nooit NULL kan zijn, en een willekeurig ander veld
zou dat wel kunnen zijn. Als het PK veld in het resultaat NULL is
dan betekent dat dus dat daar geen rij voor bestaat en dat de
OUTER JOIN deze NULL velden heeft toegevoegd.
Databases 1 31-12-22 | 28
LEFT JOIN vs. RIGHT JOIN
LEFT JOIN: Datgene wat links van de LEFT JOIN staat geschreven
in de query komt altijd in het resultaat, ook al is er geen rij aan
gekoppeld in de tabel die daar rechts van staat.
Databases 1 31-12-22 | 29
Voorbeeld(4)
activiteit staat hier links
van de LEFT JOIN.
Dus we kunnen onze query:
Databases 1 31-12-22 | 30
Wanneer OUTER JOIN?
Als je deze woorden tegenkomt in een opdracht dan kan dat een
indicatie zijn dat je een OUTER JOIN moet gebruiken.
Bijvoorbeeld:
• Bij welke activiteiten ontbreekt er nog een planning?
• Bij welke opleidingen is er nog niet een student ingeschreven?
• Voor hoeveel activiteiten hebben 0 studenten belangstelling
getoond?
• Geef alle opleidingen waar geen studenten voor staan
ingeschreven.
Databases 1 31-12-22 | 31
Vraag
Antwoord:
Nee!
Er is helemaal geen JOIN nodig. (dus ook geen OUTER JOIN).
SELECT *
FROM student
WHERE oplcode IS NULL;
Databases 1 31-12-22 | 32
OUTER JOIN in stappen(1)
Tabel: Opleiding
OPLCODE OMSCHRIJVING ACADEMIE
IN Informatica AII
BK Bouwkunde ABCT
ET Electrotechniek AII
Tabel: Student
STUDENT NAAM OPLCODE
NR
1 Kees de Vries IN
2 Jan de Wit IN
3 Koos Tomeloos BK
Databases 1 31-12-22 | 33
OUTER JOIN in stappen(2)
Databases 1 31-12-22 | 34
OUTER JOIN in stappen(3)
Stap 1: CROSS JOIN. Alle rijen van student worden gezet naast alle
rijen van opleiding.
Databases 1 31-12-22 | 35
OUTER JOIN in stappen(4)
Databases 1 31-12-22 | 36
OUTER JOIN in stappen(5)
Databases 1 31-12-22 | 37
OUTER JOIN in stappen(6)
Stap 3a: LEFT JOIN. Voeg voor elke rij uit de tabel die links van de
LEFT JOIN staat een rij toe, indien deze nog niet voorkomt in het
resultaat van de INNER JOIN.
Databases 1 31-12-22 | 38
OUTER JOIN in stappen(7)
Stap 3b: LEFT JOIN. Zet de velden die niet bekend zijn op NULL.
Databases 1 31-12-22 | 39
FULL OUTER JOIN
Databases 1 31-12-22 | 40
FULL OUTER JOIN
FULL OUTER JOIN: Tegelijk een LEFT JOIN en een RIGHT JOIN.
Databases 1 31-12-22 | 41
Nabootsen in MySQL van
FULL OUTER JOIN
We plakken met een UNION een query met LEFT JOIN aan een
query met RIGHT JOIN:
SELECT *
FROM opleiding AS o LEFT JOIN student AS s
ON o.oplcode = s.oplcode
UNION
SELECT *
FROM opleiding AS o RIGHT JOIN student AS s
ON o.oplcode = s.oplcode;
Databases 1 31-12-22 | 42
UNION
Bijvoorbeeld:
SELECT * FROM opleiding UNION SELECT * FROM student;
Plakt alle rijen van student onder alle rijen van opleiding;
Databases 1 31-12-22 | 43
Nabootsen in MySQL van
FULL OUTER JOIN
SELECT *
FROM opleiding AS o LEFT JOIN student AS s
ON o.oplcode = s.oplcode
UNION
SELECT *
FROM opleiding AS o RIGHT JOIN student AS s
ON o.oplcode = s.oplcode;
Databases 1 31-12-22 | 44
Overzicht
Databases 1 31-12-22 | 45
Overzicht
Databases 1 31-12-22 | 47