les 5: Tabellen combineren

Voor de meivakantie....
Voorwaarden:
SELECT veld
FROM tabel
WHERE veld = waarde

Nog vragen ?
Dan gaan we even herhalen...
1 / 26
suivant
Slide 1: Diapositive
InformaticaMiddelbare schoolhavo, vwoLeerjaar 4

Cette leçon contient 26 diapositives, avec quiz interactifs et diapositives de texte.

time-iconLa durée de la leçon est: 30 min

Éléments de cette leçon

Voor de meivakantie....
Voorwaarden:
SELECT veld
FROM tabel
WHERE veld = waarde

Nog vragen ?
Dan gaan we even herhalen...

Slide 1 - Diapositive

WHERE regel aanvullen, zodat bedragen hoger dan 250 geselecteerd worden:

SELECT transactie_id
FROM transactie
WHERE ....

Slide 2 - Question ouverte

WHERE regel aanvullen, zodat records van vóór 1 feb 2016 geselecteerd worden:

SELECT transactie_id
FROM transactie
WHERE ....

Slide 3 - Question ouverte

WHERE regel aanvullen, zodat transacties met rekening_bij van de RABO geselecteerd worden:

SELECT transactie_id
FROM transactie
WHERE ....

Slide 4 - Question ouverte

Tabellen combineren

Slide 5 - Diapositive

Geef de roepnaam en achternaam van de kinderen

Slide 6 - Diapositive

Nu met SQL
SELECT roepnaam, naam
FROM leden, kinderen;


Slide 7 - Diapositive

Slide 8 - Diapositive

Slide 9 - Diapositive

Slide 10 - Diapositive

Slide 11 - Diapositive

Nu met SQL poging 2
SELECT roepnaam, naam
FROM leden, kinderen
WHERE kinderen.lidnr=leden.lidnr;


Slide 12 - Diapositive

Automatisme !!
Informatie gevraagd uit meerdere tabellen (bij SELECT)

Bij FROM alle tabellen noemen waar info in staat EN

bij WHERE moet je de sleutelkolommen 
met gelijke data  koppelen 

Slide 13 - Diapositive

Oplossing?
SELECT voornaam, achternaam, absentie
FROM leerlingen, absenties
................;

Slide 14 - Question ouverte

Wat gaat er fout?
SELECT voornaam, achternaam, absentie
FROM leerlingen, absenties;

Slide 15 - Question ouverte

AHW
ADS 30 en 31 
(in planner)

Slide 16 - Diapositive

Tabellen combineren les 2
LEFT JOINS 
en 
RIGHT JOINS

Slide 17 - Diapositive

Tabellen combineren
Bij FROM alle tabellen noemen waar info in staat
Bij WHERE de velden met gelijke data koppelen (tabel.veld)
SELECT voornaam, naam
FROM leden, kinderen
WHERE leden.lidnr = kinderen.lidnr;

Dit noemen we ook wel een INNER JOIN
want alleen leden met kinderen komen in het resultaat en niet leden zonder.

Slide 18 - Diapositive

Outer joins
Wat als alle leden wilt weergeven met hun kinderen
inclusief leden ZONDER kinderen

Slide 19 - Diapositive

Oplossing: outer JOIN
outer join = ook rijen weergeven ZONDER gelijke waarde in de andere tabel
de outer join kan LEFT of RIGHT zijn

SELECT lidnr, naam, adres, voornaam
FROM leden LEFT JOIN kinderen
ON leden.lidnr = kinderen.lidnr;

LEFT JOIN : alle rijen uit eerste tabel van de FROM gebruiken, dus ook als ze geen 'tegenhanger' hebben in de andere tabel
ON : wat je anders in de WHERE zou zetten

Slide 20 - Diapositive

een RIGHT JOIN kan ook
SELECT voornaam, naam
FROM leden RIGHT JOIN kinderen
ON leden.lidnr = kinderen.lidnr;

is identiek aan:

SELECT voornaam, naam
FROM kinderen LEFT JOIN leden
ON leden.lidnr = kinderen.lidnr;

Slide 21 - Diapositive

Geef lijst met alle rekeningnummers met pasnummers
ook als ze geen betaalpas hebben
Gebruik tabel Rekening en Betaalpas
met een JOIN

Slide 22 - Question ouverte

Oplossing
SELECT rekening.rekening_id, pasnummer
FROM rekening LEFT JOIN betaalpas
ON rekening.rekening_id = betaalpas.rekening_id;


of met RIGHT JOIN met zelfde resultaat:
SELECT rekening.rekening_id, pasnummer
FROM betaalpas RIGHT JOIN rekening
ON rekening.rekening_id = betaalpas.rekening_id;

LEFT JOIN heeft de voorkeur, want beter leesbaar

Slide 23 - Diapositive

Aan de slag
Python-toets inzien
en/of
opgaven maken BLOK G
en/of 
extra opgaven met JOINS (volgende slide)

Slide 24 - Diapositive

Extra opgaven met outer JOIN
1. Geef de namen van alle banken en de rekeningnummers die 
bij de bank horen, ook als er geen rekeningnrs bij de bank bestaan.


2. Geef alle rekeningnummers en de transactiebedragen 
die zijn bij- en afgeschreven, 
ook als het rekeningnr niet is gebruikt bij een afschrijving.

Uitleg in W2Schools:
https://www.w3schools.com/sql/sql_join_left.asp

Slide 25 - Diapositive

Oplossingen
1.
SELECT bank, rekening_id
FROM bank LEFT JOIN rekening
ON bank.bank_id = rekening.bank_id;

2.
SELECT rekening_id, bedrag, rekening_bij, rekening_af
FROM rekening LEFT JOIN transactie
ON rekening.rekening_id = transactie.rekening_af;


Slide 26 - Diapositive