les 5: Tabellen combineren

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

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

In deze les zitten 26 slides, met interactieve quizzen en tekstslides.

time-iconLesduur is: 30 min

Onderdelen in deze les

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

Nog vragen ?
Dan gaan we even herhalen...

Slide 1 - Tekstslide

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

SELECT transactie_id
FROM transactie
WHERE ....

Slide 2 - Open vraag

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

SELECT transactie_id
FROM transactie
WHERE ....

Slide 3 - Open vraag

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

SELECT transactie_id
FROM transactie
WHERE ....

Slide 4 - Open vraag

Tabellen combineren

Slide 5 - Tekstslide

Geef de roepnaam en achternaam van de kinderen

Slide 6 - Tekstslide

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


Slide 7 - Tekstslide

Slide 8 - Tekstslide

Slide 9 - Tekstslide

Slide 10 - Tekstslide

Slide 11 - Tekstslide

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


Slide 12 - Tekstslide

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 - Tekstslide

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

Slide 14 - Open vraag

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

Slide 15 - Open vraag

AHW
ADS 30 en 31 
(in planner)

Slide 16 - Tekstslide

Tabellen combineren les 2
LEFT JOINS 
en 
RIGHT JOINS

Slide 17 - Tekstslide

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 - Tekstslide

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

Slide 19 - Tekstslide

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 - Tekstslide

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 - Tekstslide

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

Slide 22 - Open vraag

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 - Tekstslide

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

Slide 24 - Tekstslide

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 - Tekstslide

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 - Tekstslide