les 5: Tabellen combineren

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

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

This lesson contains 26 slides, with interactive quizzes and text slides.

time-iconLesson duration is: 30 min

Items in this lesson

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

Nog vragen ?
Dan gaan we even herhalen...

Slide 1 - Slide

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

SELECT transactie_id
FROM transactie
WHERE ....

Slide 2 - Open question

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

SELECT transactie_id
FROM transactie
WHERE ....

Slide 3 - Open question

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

SELECT transactie_id
FROM transactie
WHERE ....

Slide 4 - Open question

Tabellen combineren

Slide 5 - Slide

Geef de roepnaam en achternaam van de kinderen

Slide 6 - Slide

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


Slide 7 - Slide

Slide 8 - Slide

Slide 9 - Slide

Slide 10 - Slide

Slide 11 - Slide

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


Slide 12 - Slide

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

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

Slide 14 - Open question

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

Slide 15 - Open question

AHW
ADS 30 en 31 
(in planner)

Slide 16 - Slide

Tabellen combineren les 2
LEFT JOINS 
en 
RIGHT JOINS

Slide 17 - Slide

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

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

Slide 19 - Slide

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

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

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

Slide 22 - Open question

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

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

Slide 24 - Slide

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

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