Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
databases SQL
2
overzicht de basis filteren gevorderde query's op één tabel
tabellen samenvoegen gevorderde query's op meerdere tabellen sub-query's
3
de basis
4
een tabel leerlingen lln_nr voornaam achternaam adres wpl 1 Joop Vos
Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8
5
de basis SELECT: FROM: resultaat:
gevolgd door veldnamen die je wilt tonen (joker/wildcard) voor alle veldnamen FROM: gevolgd door tabelnaam resultaat: tabel SELECT * FROM leerlingen
6
voorbeeld SELECT * FROM leerlingen lln_nr voornaam achternaam adres
wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8
7
filteren
8
records filteren filteren: in SQL records filteren met:
het proces waarbij gewenste elementen van ongewenste worden gescheiden in SQL records filteren met: WHERE gevolgd door Booleaanse expressie (waar/niet waar) SELECT * FROM leerlingen WHERE wpl = "Eindhoven"
9
voorbeeld SELECT * FROM leerlingen WHERE wpl = "Eindhoven" lln_nr
voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl 2 Marleen Schippers Kerkstraat 12 Eindhoven 4 Joop Visser Brugstraat 15 5 Mieke 8 Nisa Demir Hoogeind 8
10
velden filteren filteren: in SQL velden filteren met:
het proces waarbij gewenste elementen van ongewenste worden gescheiden in SQL velden filteren met: SELECT SELECT voornaam, achternaam, wpl FROM leerlingen
11
voorbeeld SELECT voornaam, achternaam, wpl FROM leerlingen lln_nr
adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 voornaam achternaam wpl Joop Vos Son Marleen Schippers Eindhoven Issam Mourabit Nuenen Visser Mieke Irene Horst Theo Nisa Demir
12
records en velden filteren
SELECT voornaam, achternaam, wpl FROM leerlingen WHERE wpl = "Eindhoven" lln_nr voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 voornaam achternaam wpl Joop Vos Son Marleen Schippers Eindhoven Issam Mourabit Nuenen Visser Mieke Irene Horst Theo Nisa Demir voornaam achternaam wpl Joop Vos Son Marleen Schippers Eindhoven Issam Mourabit Nuenen Visser Mieke Irene Horst Theo Nisa Demir voornaam achternaam wpl Marleen Schippers Eindhoven Joop Visser Mieke Nisa Demir
13
en nu tegelijk SELECT voornaam, achternaam, wpl FROM leerlingen
WHERE wpl = "Eindhoven" lln_nr voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 voornaam achternaam wpl Marleen Schippers Eindhoven Joop Visser Mieke Nisa Demir
14
gevorderde query's op één tabel
15
gevorderde query's op één tabel
moeilijkere record filters DISTINCT sorteren rekenfuncties COUNT groeperen filters op groepen
16
moeilijkere record filters
andere vergelijkingsoperatoren !=, <, >, <=, >= jokers/wildcards %, _ (*, ? in sommige DBMSen) vergelijkingsoperator is LIKE samengestelde Booleaanse expressies AND, OR SELECT * FROM leerlingen WHERE (wpl != "Nuenen" OR lln_nr < 5) AND achternaam LIKE "V%"
17
voorbeeld SELECT * FROM leerlingen
WHERE (wpl != "Eindhoven" OR lln_nr < 5) AND achternaam LIKE "V%" lln_nr voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 4 Visser Brugstraat 15 Eindhoven 7 Theo Stuurdreef 14a
18
DISTINCT filtert op unieke waardes in veld of groep velden
altijd SELECT DISTINCT gevolgd door velden werkt altijd op alle genoemde velden SELECT DISTINCT wpl FROM leerlingen SELECT DISTINCT achternaam, wpl FROM leerlingen
19
voorbeeld SELECT DISTINCT wpl FROM leerlingen lln_nr voornaam
achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 wpl Son Eindhoven Nuenen
20
voorbeeld SELECT DISTINCT achternaam, wpl FROM leerlingen lln_nr
voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 achternaam wpl Vos Son Schippers Eindhoven Mourabit Nuenen Visser Horst Demir
21
sorteren ORDER BY gevolgd door veldnamen altijd aan eind van query
ASC(ending): default oplopend: 1 309, 'a' 'z' DESC(ending) aflopend: 423 1, 'z' 'a' SELECT * FROM leerlingen ORDER BY wpl, achternaam DESC
22
voorbeeld SELECT * FROM leerlingen ORDER BY wpl, achternaam DESC
lln_nr voornaam achternaam adres wpl 4 Joop Visser Brugstraat 15 Eindhoven 5 Mieke 2 Marleen Schippers Kerkstraat 12 8 Nisa Demir Hoogeind 8 3 Issam Mourabit Struweel 81 Nuenen 6 Irene Horst Domweg 21 1 Vos Bruggelaan 17 Son 7 Theo Stuurdreef 14a lln_nr voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl 2 Marleen Schippers Kerkstraat 12 Eindhoven 4 Joop Visser Brugstraat 15 5 Mieke 8 Nisa Demir Hoogeind 8 3 Issam Mourabit Struweel 81 Nuenen 6 Irene Horst Domweg 21 1 Vos Bruggelaan 17 Son 7 Theo Stuurdreef 14a
23
rekenfuncties gebruikt na SELECT MIN(imum) MAX(imum) SUM (som)
AVG (average/gemiddelde) SELECT MIN(lln_nr) FROM leerlingen SELECT SUM(lln_nr) FROM leerlingen MIN(lln_nr) 1 SUM(lln_nr) 36
24
COUNT telt records in de resultaat tabel/groepen gebruikt na select
jullie mogen altijd COUNT(*) gebruiken SELECT COUNT(*) FROM leerlingen WHERE wpl = "Eindhoven" SELECT COUNT(adres) FROM leerlingen WHERE wpl = "Eindhoven" COUNT(*) 4 COUNT(adres) 4
25
groeperen GROUP BY gevolgd door veldnamen
na WHERE (of FROM als WHERE ontbreekt) groepeert op unieke waardes in veld of groep velden werkt altijd op alle genoemde velden COUNT werkt nu op de individuele groepen SELECT wpl, COUNT(*) FROM leerlingen GROUP BY wpl SELECT achternaam, wpl, COUNT(*) FROM leerlingen GROUP BY achternaam, wpl
26
voorbeeld SELECT wpl, COUNT(*) FROM leerlingen GROUP BY wpl lln_nr
voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl COUNT(*) 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 4 3 Issam Mourabit Struweel 81 Nuenen lln_nr voornaam achternaam adres wpl COUNT(*) 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 4 3 Issam Mourabit Struweel 81 Nuenen wpl COUNT(*) Son 2 Eindhoven 4 Nuenen
27
voorbeeld SELECT achternaam, wpl, COUNT(*) FROM leerlingen
GROUP BY achternaam, wpl lln_nr voornaam achternaam adres wpl 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl COUNT(*) 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl COUNT(*) 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 achternaam wpl COUNT(*) Vos Son 1 Schippers Eindhoven Mourabit Nuenen Visser 2 Horst Demir
28
filters op groepen HAVING
werkt hetzelfde als WHERE maar op groepen in plaats van records SELECT achternaam, wpl, COUNT(*) FROM leerlingen GROUP BY achternaam, wpl HAVING COUNT(*) = 1 AND wpl = "Eindhoven"
29
voorbeeld SELECT achternaam, wpl, COUNT(*) FROM leerlingen
GROUP BY achternaam, wpl HAVING COUNT(*) = 1 AND wpl = "Eindhoven" lln_nr voornaam achternaam adres wpl COUNT(*) 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl COUNT(*) 1 Joop Vos Bruggelaan 17 Son 2 Marleen Schippers Kerkstraat 12 Eindhoven 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl COUNT(*) 2 Marleen Schippers Kerkstraat 12 Eindhoven 1 8 Nisa Demir Hoogeind 8 lln_nr voornaam achternaam adres wpl COUNT(*) 2 Marleen Schippers Kerkstraat 12 Eindhoven 1 8 Nisa Demir Hoogeind 8 achternaam wpl COUNT(*) Schippers Eindhoven 1 Demir
30
kan ook anders SELECT achternaam, wpl, COUNT(*) FROM leerlingen
GROUP BY achternaam, wpl HAVING COUNT(*) = 1 AND wpl = "Eindhoven" SELECT achternaam, wpl, COUNT(*) FROM leerlingen WHERE wpl = "Eindhoven" GROUP BY achternaam, wpl HAVING COUNT(*) = 1 Het is wel belangrijk te beseffen dat de locatie van wpl = "Eindhoven" hier niet uitmaakt omdat wpl in de GROUP BY staat!
31
tabellen samenvoegen
32
een tabel klassen erbij
klas_code mentor_id lokaal 1a tp K201 1b vp K304 1c ki K103 lln_nr voornaam achternaam adres wpl klas_code 1 Joop Vos Bruggelaan 17 Son 1a 2 Marleen Schippers Kerkstraat 12 Eindhoven 1c 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 1b 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8
33
tabellen samenvoegen heet join in database termen
is van meerdere tabellen één nieuwe maken kan impliciet en expliciet impliciet via komma expliciet: via (INNER/OUTER/LEFT/RIGHT) JOIN SELECT * FROM leerlingen, klassen
34
voorbeeld SELECT * FROM leerlingen, klassen lln_nr voornaam achternaam
adres wpl leerlingen.klas_code klassen. klas_code mentor lokaal 1 Joop Vos Bruggelaan 17 Son 1a tp K201 2 Marleen Schippers Kerkstraat 12 Eindhoven 1c ... 8 Nisa Demir Hoogeind 8 1b vp K304 ki K103
35
samenvoegen via sleutel
data van tabellen zomaar bij elkaar gooien is niet zinvol leerling lijkt nu in drie klassen te zitten zinvol: tabellen samenvoegen op basis van sleutels (primair en vreemd) SELECT * FROM leerlingen, klassen WHERE leerlingen.klas_code = klassen.klas_code
36
voorbeeld SELECT * FROM leerlingen, klassen
WHERE leerlingen.klas_code = klassen.klas_code lln_nr voornaam achternaam adres wpl leerlingen.klas_code klassen. klas_code mentor lokaal 1 Joop Vos Bruggelaan 17 Son 1a tp K201 2 Marleen Schippers Kerkstraat 12 Eindhoven 1c ... 8 Nisa Demir Hoogeind 8 1b vp K304 ki K103 lln_nr voornaam achternaam adres wpl leerlingen.klas_code klassen. klas_code mentor lokaal 1 Joop Vos Bruggelaan 17 Son 1a tp K201 2 Marleen Schippers Kerkstraat 12 Eindhoven 1c ... 8 Nisa Demir Hoogeind 8 1b vp K304 ki K103 lln_nr voornaam achternaam adres wpl leerlingen.klas_code klassen. klas_code mentor lokaal 1 Joop Vos Bruggelaan 17 Son 1a tp K201 2 Marleen Schippers Kerkstraat 12 Eindhoven 1c ki K103 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 1b vp K304 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8
37
gevorderde query's op meerdere tabellen
38
gevorderde query's op meerdere tabellen
niks nieuws onder de zon resultaat van samenvoegen is één tabel daarop kun je dus alles doen zoals besproken bij theorie over query's op één tabel! SELECT lln_nr, wpl, lokaal FROM leerlingen, klassen WHERE leerlingen.klas_code = klassen.klas_code AND wpl = "Eindhoven" ORDER BY lokaal
39
voorbeeld SELECT lln_nr, wpl, lokaal FROM leerlingen, klassen
WHERE leerlingen.klas_code = klassen.klas_code AND wpl = "Eindhoven" ORDER BY lokaal lln_nr voornaam achternaam adres wpl leerlingen.klas_code klassen. klas_code mentor lokaal 1 Joop Vos Bruggelaan 17 Son 1a tp K201 2 Marleen Schippers Kerkstraat 12 Eindhoven 1c ki K103 3 Issam Mourabit Struweel 81 Nuenen 4 Visser Brugstraat 15 1b vp K304 5 Mieke 6 Irene Horst Domweg 21 7 Theo Stuurdreef 14a 8 Nisa Demir Hoogeind 8 lln_nr wpl lokaal 2 Eindhoven K103 5 K201 4 K304 8
40
sub-query's
41
sub-query's query's in query's mogelijk bij: relevante keywords
FROM WHERE relevante keywords IN EXISTS ALL ANY vaak aliassen nodig
42
voorbeeld bij FROM creëer een nieuwe tabel via query
tabel is tijdelijk en moet een alias hebben gebruik tijdelijke tabel i.p.v. tabel uit database SELECT MAX(S) FROM (SELECT artikel, SUM(hoeveelheid) AS S FROM bestelde_artikelen GROUP BY artikel) AS R
43
voorbeeld bij WHERE creëer een nieuwe tabel via query
tabel is tijdelijk en mag geen alias hebben heeft 1 veld en 1 record gebruik =, <, >, enz. heeft 1 veld en meerdere records gebruik IN heeft meerdere velden en records gebruik EXISTS SELECT artikel, SUM(hoeveelheid) AS S1 FROM bestelde_artikelen GROUP BY artikel HAVING S1 = (SELECT MIN(S2) FROM (SELECT artikel, SUM(hoeveelheid) AS S FROM bestelde_artikelen GROUP BY artikel) AS R)
44
sub-query keywords IN/EXISTS ALL ANY werkt hetzelfde als bij lijsten
gebruiken met vergelijkingsoperatoren <= ALL kun je gebruiken i.p.v. minimum >= ALL kun je gebruiken i.p.v. maximum ANY zelfde als SOME niet veel gebruikt
45
IN keyword Geef een lijst met voor- en achternamen van alle klanten die iets besteld hebben. SELECT VOORNAAM, ACHTERNAAM FROM klanten WHERE klantnummer IN (SELECT DISTINCT klantnummer FROM bestelde_artikelen)
46
EXISTS keyword Geef een lijst met alle klantinformatie van alle klanten die iets besteld hebben. SELECT * FROM klanten WHERE EXISTS (SELECT * FROM bestelde_artikelen WHERE K.klantnummer = BA.klantnummer)
47
ALL keyword Geef een lijst met daarin de slechtst verkopende artikelen en de bijbehorende verkochte aantallen. SELECT artikel, SUM(hoeveelheid) AS S FROM bestelde_artikelen GROUP BY artikel HAVING S <= ALL(SELECT SUM(hoeveelheid) FROM bestelde_artikelen GROUP BY artikel)
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.