Databases - joins basis

Workshop
lessonup.app : nlxdf
1 / 28
next
Slide 1: Slide
Applicatie- en mediaontwikkelaarMBOStudiejaar 2

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

time-iconLesson duration is: 90 min

Items in this lesson

Workshop
lessonup.app : nlxdf

Slide 1 - Slide

Kennismakingsronde
  • Opfrissen sql statements SELECT WHERE LIKE
  • Herhalen INNER JOIN

Alternatief voor gevorderen, ga door met 
oefening 2, 3 / developement als je klaar bent hiermee
Doelen

Slide 2 - Slide

Welke query toont alle producten met een prijs vanaf €50?
A
SELECT * FROM product WHERE prijs > 50;
B
SELECT * FROM product WHERE prijs < 50;
C
SELECT * FROM product WHERE prijs >= 50;
D
SELECT * FROM product WHERE prijs <= 50;

Slide 3 - Quiz

Welke query toont alle gegevens van klanten waarvan de naam begint met de letter 'J'?
A
SELECT * FROM klant WHERE naam LIKE 'J%';
B
SELECT * FROM klant WHERE naam = 'J%';
C
SELECT naam FROM klant WHERE naam LIKE '%J';
D
SELECT * FROM klant WHERE naam = 'Jan';

Slide 4 - Quiz

Welke query toont alle producten met een prijs lager dan €100 én een voorraad van meer dan 10?
A
SELECT * FROM product WHERE prijs < 100 AND voorraad > 10;
B
SELECT * FROM product WHERE prijs < 100 OR voorraad > 10;
C
SELECT * FROM product WHERE prijs > 100 AND voorraad > 10;
D
SELECT * FROM product WHERE voorraad > 10;

Slide 5 - Quiz

Welke query toont alle klanten uit Amsterdam of Utrecht?
A
SELECT * FROM klant WHERE plaats = 'Amsterdam' OR plaats = 'Utrecht';
B
SELECT * FROM klant WHERE plaats = 'Amsterdam' AND plaats = 'Utrecht';
C
SELECT * FROM klant WHERE plaats LIKE 'A%' OR plaats LIKE 'U%';
D
SELECT * FROM klant WHERE plaats = 'Amsterdam or Utrecht';

Slide 6 - Quiz

Welke query toont alle producten die het woord 'Phone' bevatten?
A
SELECT * FROM product WHERE naam LIKE '%Phone%';
B
SELECT * FROM product WHERE naam LIKE '_Phone_';
C
SELECT * FROM product WHERE naam = 'Phone';
D
SELECT naam FROM product WHERE naam = 'Phone%';

Slide 7 - Quiz

Kennismakingsronde
  • Aan elkaar koppelen van tabellen
  • Meestal op basis van keys
  • meest gebruikte INNER JOIN
  • Andere: LEFT JOIN, RIGHT JOIN ...
JOINS

Slide 8 - Slide

Kennismakingsronde
 INNER JOIN – Alleen wat bij elkaar past
Bij een INNER JOIN krijgen we alleen gegevens te zien 
die in alle tabellen een match hebben.

bijvoorbeeld
SELECT * FROM klant a 
INNER JOIN bestelling b 
ON a.klant_id = b.bestelling_id;

INNER JOIN

Slide 9 - Slide

Kennismakingsronde
Product



Categorie
INNER JOIN - voorbeeld
Waarom slaan we alleen categorie_id op in de product tabel???

Slide 10 - Slide

Waarom alleen categorie_id opslaan ?

Slide 11 - Mind map

Kennismakingsronde
✅ Besparen we opslagruimte
✅ Voorkomen we dubbele gegevens
✅ Maken we updates makkelijker
✅ Zorgen we voor snellere zoekopdrachten
✅ Kunnen we de database makkelijker uitbreiden


Dit heet datanormalisatie (module database advanced)
Waarom alleen categorie_id opslaan?

Slide 12 - Slide

Kennismakingsronde
Opslagruimte en dubbele gegevens

Slide 13 - Slide

Kennismakingsronde
Stel dat de categorie "Elektronica" wordt gewijzigd naar "Elektronische Apparaten".
Als de naam direct in de product-tabel stond, zouden we alle producten met die naam moeten bijwerken.

Met een categorie_id hoeven we maar één regel in de categorie-tabel te wijzigen:

sql
UPDATE categorie SET naam = 'Elektronische Apparaten' WHERE categorie_id = 1;

Nu zijn alle producten direct up-to-date, zonder dat de product-tabel gewijzigd hoeft te worden.
Update makkelijker

Slide 14 - Slide

Kennismakingsronde
Omdat een categorie_id een nummer is, werkt zoeken en sorteren sneller dan met tekst.

Bijvoorbeeld, deze query zoekt alle producten in de categorie Elektronica:
SELECT * FROM product WHERE categorie_id = 1;

Als we in plaats daarvan een categorienaam gebruiken:
SELECT * FROM product WHERE categorie = 'Elektronica';

Dan kan dat trager zijn, vooral als er spelfouten of inconsistenties zijn (zoals "elektronica" vs. "Elektronica").
Snellere zoekopdrachten

Slide 15 - Slide

Kennismakingsronde
Met een aparte categorie-tabel kunnen we makkelijker extra gegevens toevoegen op een plek, zoals:






Als we dit direct in de product-tabel zouden zetten, zou het onoverzichtelijk en inefficiënt worden.
Makkelijker uitbreiden

Slide 16 - Slide

Kennismakingsronde
Waarom we alleen id's opslaan is duidelijk? 
Dan moet er ook een oplossing zijn om de tabellen te koppen --> JOIN

INNER JOIN om tabellen te koppelen

Slide 17 - Slide

Kennismakingsronde
INNER JOIN 

Slide 18 - Slide

Kennismakingsronde
SELECT * 
FROM categorie as c
INNER JOIN product as p
ON c.categorie_id = p.categorie_id
INNER JOIN categorie en product

Slide 19 - Slide

Kennismakingsronde
Toon alleen de  categorienaam en de productnaam gesorteerd op categorienaam. 
Oefening 1 - inner join query

Slide 20 - Slide

Toon alleen de categorienaam en de productnaam gesorteerd op categorienaam.

Slide 21 - Open question

Kennismakingsronde
Toon alle producten van categorie 'Elektronica' .
Oefening 1 - inner join query

Slide 22 - Slide

Toon alle producten van categorie 'Elektronica' .

Slide 23 - Open question

Kennismakingsronde
JOIN kan met minimaal twee tabellen. 

Voorbeeld met drie (overzicht besteldatum per klant)
SELECT k.naam AS klant_naam, b.datum AS bestel_datum
FROM bestelling AS b
INNER JOIN klant AS k ON b.klant_id = k.klant_id
INNER JOIN product AS p ON b.bestelling_id = p.product_id
ORDER BY klant_naam;
Meer dan 2 tabellen

Slide 24 - Slide

Kennismakingsronde
Toon besteldatum, klantnaam en bestelde producten. 
Oefening inner joins meer dan 2 tabellen

Slide 25 - Slide

Toon besteldatum, klantnaam en bestelde producten.

Slide 26 - Open question

Kennismakingsronde
✅ Besparen we opslagruimte
✅ Voorkomen we dubbele gegevens
✅ Maken we updates makkelijker
✅ Zorgen we voor snellere zoekopdrachten
✅ Kunnen we de database makkelijker uitbreiden


Dit heet datanormalisatie (module database advanced)
Waarom alleen categorie_id opslaan?

Slide 27 - Slide

Kennismakingsronde
 INNER JOIN – Alleen wat bij elkaar past
Bij een INNER JOIN krijgen we alleen gegevens te zien 
die in alle tabellen een match hebben.

bijvoorbeeld
SELECT * FROM klant a 
INNER JOIN bestelling b 
ON a.klant_id = b.bestelling_id;

INNER JOIN

Slide 28 - Slide