SQL 4 - Functies, Distinct, Order by, Group by, Having, Subquery's

SQL
1 / 23
suivant
Slide 1: Diapositive
InformaticaWOStudiejaar 4,5

Cette leçon contient 23 diapositives, avec quiz interactifs et diapositives de texte.

time-iconLa durée de la leçon est: 45 min

Éléments de cette leçon

SQL

Slide 1 - Diapositive

Cet élément n'a pas d'instructions

Fundament
SQL

Fundament kerndomein C: Databases en SQL
Hoofdstuk 3.3 tmt 3.6
https://fundament-online.nl/leeromgeving/content.php?paragraaf_id=114883

Slide 2 - Diapositive

Cet élément n'a pas d'instructions

Leerdoelen
Na deze les kun je:
  • 3 verschillende functies in SQL benoemen
  • aangeven wat DISTINCT doet in SQL
  • ORDER BY gebruiken in een query
  • beschrijven wat ORDER BY en GROUP BY doen
  • HAVING gebruiken in een query
  • een (eenvoudige) subquery opstellen

Slide 3 - Diapositive

Rode achtergrond betekent: klas is stil, dit zijn de leerdoelen en quizzes waarbij niet overlegd mag worden.

Doel van deze les is om het leren zichtbaar te maken voor zowel leerling als docent.
Functies in SQL 1/2
Functies in SQL zijn te herkennen aan () erachter
Functies in SQL accepteren dus argumenten

Zie dit voorbeeld van een query met 3 functies:

Slide 4 - Diapositive

Cet élément n'a pas d'instructions

Functies in SQL 2/2
Functies in SQL worden meestal gebruikt om te filteren:
  • COUNT(kolom)
  • COUNT(*)
  • SUM(kolom)
  • AVG(kolom)
  • MIN(kolom)
  • MAX(kolom)

Slide 5 - Diapositive

Cet élément n'a pas d'instructions

DISTINCT
Dubbele waarden kunnen voorkomen in tabellen (ook als de database efficiënt is, bijv. na een JOIN ... ON)

Met DISTINCT kun je de resultaten van SELECT uniek maken

Let op: als je meerdere velden opgeeft, dan wordt bekeken of die combinatie uniek is

Slide 6 - Diapositive

Cet élément n'a pas d'instructions

ORDER BY
We kunnen de resultaten sorteren via ORDER BY
  • ASC (oplopend = ascending)
  • DESC (aflopend = descending)

Slide 7 - Diapositive

Cet élément n'a pas d'instructions

GROUP BY
Met GROUP BY kunnen de resultaten worden gegroepeerd op kolom/veld

Dit kan gevolgen hebben voor functies
Als je bijvoorbeeld een COUNT() functie uitvoert, dan kun je met GROUP BY het aantal voor die groep tellen, terwijl er anders een telling per regel zou worden uitgevoerd

Slide 8 - Diapositive

Cet élément n'a pas d'instructions

HAVING: de where van GROUP BY
Met WHERE gaven we voorwaarden aan de resultaten

Met HAVING kunnen we voorwaarden stellen aan de GROUP BY

Let op: een combinatie is ook mogelijk, want WHERE en HAVING sluiten elkaar niet uit

Slide 9 - Diapositive

Cet élément n'a pas d'instructions

Subquery's 1/4
Met subquery wordt bedoeld om een query resultaat in een andere query te gebruiken

Rechts staat een voorbeeld
Laten we die subquery ontleden


Slide 10 - Diapositive

Cet élément n'a pas d'instructions

Subquery's 2/4
SELECT voornaam, achternaam
FROM leerlingen WHERE leerlingID
( SELECT leerlingID FROM adressen
WHERE straatnaam = "Kerkstraat" )

Het belangrijke hier zijn de ( )


Slide 11 - Diapositive

Cet élément n'a pas d'instructions

Subquery's 3/4
Het andere belangrijke is dat de WHERE van de eerste query het resultaat van de tweede 
query bevat (waarom?)

... WHERE leerlingID
( SELECT leerlingID FROM ...


Slide 12 - Diapositive

Cet élément n'a pas d'instructions

Subquery's 4/4
Natuurlijk kunnen nog meer subquery's worden toegevoegd... een belangrijke vraag
is nu:

In welke volgorde worden de query's 
uitgevoerd?

Slide 13 - Diapositive

Cet élément n'a pas d'instructions

Subquery's 4/4
Natuurlijk kunnen nog meer subquery's worden toegevoegd... een belangrijke vraag
is nu:

In welke volgorde worden de query's 
uitgevoerd?
Van onder naar boven! Waarom?

Slide 14 - Diapositive

Cet élément n'a pas d'instructions

Opdracht: Join
  1. Ga naar https://informatica.stmichaelcollege.nl
  2. Klik op de SQL link
  3. Maak een JOIN ... ON statement zodat dit het resultaat is: 

    hint:
    gebruik SELECT * FROM ... om de kolommen
    te vinden van leerlingen en adressen
    voornaam en achternaam uit leerlingen
    straatnaam en huisnummer uit adressen

timer
3:00

Slide 15 - Diapositive

SELECT leerlingen.voornaam, leerlingen.achternaam, adressen.straatnaam, adressen.huisnummer

FROM adressen

JOIN leerlingen ON adressen.leerlingID= leerlingen.leerlingID;
ERD 3/3
Er zijn verschillende notaties in een ERD
Hiermee wordt de relatie aangegeven tussen sleutels

Slide 16 - Diapositive

Cet élément n'a pas d'instructions

Opdracht
  1. Ga naar https://informatica.stmichaelcollege.nl/SQL
  2. maak een query die alleen achternamen beginnend met D laat zien in de tabel leerlingen en limit deze query tot 1
  3. maak een nieuwe query die het aantal leerlingen in de tabel leerlingen geeft
  4. maak een subquery die de voornamen geeft van leerlingen die wonen in een straatnaam beginnend met een "B"
  5. sorteer de uitkomst van 4 alfabetisch op voornaam
  6. maak een som van alle huisnummers in adressen
timer
15:00

Slide 17 - Diapositive

SELECT voornaam, achternaam
FROM leerlingen
WHERE leerlingID = (SELECT leerlingID FROM adressen WHERE straatnaam LIKE "B%");

geeft een foutmelding als er meer dan 1 rij is! Dit komt doordat het = maar 1 waarde verwacht. Vervang = met IN en dan werkt het wel.

SELECT voornaam, achternaam
FROM leerlingen
WHERE leerlingID IN (SELECT leerlingID FROM adressen WHERE straatnaam LIKE "B%")
ORDER BY voornaam ASC;
Hoe zou je zoeken naar alle namen die beginnen met de letter 'A'?

WHERE name LIKE ...
A
'%A%'
B
'_A'
C
'A%'
D
'%A'

Slide 18 - Quiz

Cet élément n'a pas d'instructions

Welke van de volgende zoekopdrachten geeft alle resultaten die eindigen met 'son'?

WHERE name LIKE ...
A
'%son'
B
'_son'
C
'son%'
D
'%son%'

Slide 19 - Quiz

Cet élément n'a pas d'instructions

Leerdoelen
Nu kun je:
  • 3 verschillende functies in SQL benoemen
  • aangeven wat DISTINCT doet in SQL
  • ORDER BY gebruiken in een query
  • beschrijven wat ORDER BY en GROUP BY doen
  • HAVING gebruiken in een query
  • een (eenvoudige) subquery opstellen

Slide 20 - Diapositive

COUNT(), MAX(), SUM(), MONTH(), YEAR(), AVG(), MIN()
Sponsopdracht
Klaar om wat meer te spelen met SQL?
Doe het SQL Murder Mystery spel!
https://mystery.knightlab.com/

Je begint met het vinden van de tabel kolommen/velden en gaat dan de informatie met INSERT toevoegen: murder - Jan.15,2018 - SQL City

Slide 21 - Diapositive

Cet élément n'a pas d'instructions

SQL injection

Slide 22 - Diapositive

Cet élément n'a pas d'instructions

Slide 23 - Diapositive

Cet élément n'a pas d'instructions