De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Databases SQL.

Verwante presentaties


Presentatie over: "Databases SQL."— Transcript van de presentatie:

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)


Download ppt "Databases SQL."

Verwante presentaties


Ads door Google