Databases - Aggregaties

Er wordt grootschalig gehandeld in miljoenen adresgegevens, telefoon- en burgerservicenummers, afkomstig uit de twee belangrijkste coronasystemen van de GGD. De politie heeft vorig weekend twee personen gearresteerd die worden verdacht van deze illegale datahandel.
We bekijken een kort filmpje op deze pagina
 


1 / 35
volgende
Slide 1: Tekstslide
InformaticaMiddelbare schoolhavo, vwoLeerjaar 4-6

In deze les zitten 35 slides, met interactieve quizzen en tekstslides.

time-iconLesduur is: 50 min

Onderdelen in deze les

Er wordt grootschalig gehandeld in miljoenen adresgegevens, telefoon- en burgerservicenummers, afkomstig uit de twee belangrijkste coronasystemen van de GGD. De politie heeft vorig weekend twee personen gearresteerd die worden verdacht van deze illegale datahandel.
We bekijken een kort filmpje op deze pagina
 


Slide 1 - Tekstslide

Deze slide heeft geen instructies

Niet het onderwerp van deze les, maar neem voorzorgsmaatregelen om je bestanden niet kwijt te raken, of opgelicht te worden.

Slide 2 - Tekstslide

Deze slide heeft geen instructies

In de volgende dia staan 2 keer bijna dezelfde statements.
Welke oplossing is het beste? Op de dia erna geef je het antwoord

Slide 3 - Tekstslide

Deze slide heeft geen instructies

SELECT item, SUM(minutes) FROM todo_list;
SELECT item, MIN(minutes) FROM todo_list;
SELECT item, MAX(minutes) FROM todo_list;
SELECT COUNT(*) FROM todo_list ;
Bij COUNT(*) zie je het item niet. Dat zou ook niet handig zijn.
COUNT(*) telt het aantal rijen van de hele tabel, dus dan is 1 naam van een item niet zinvol

Slide 4 - Tekstslide

Deze slide heeft geen instructies

We kijken naar een groepering, een GROUP BY.
Als je het woord PER gebruikt, wordt het vaak duidelijker
Het voorbeeld gaat over groeperen PER gangpad
We bekijken het voorbeeld ook in de editor

Slide 5 - Tekstslide

Deze slide heeft geen instructies

id
name
quantity
aisle
1
bananas
4
7
2
peanut butter
1
2
3
dark choc bars
2
2
4
ice cream
1
12
5
cherries
6
2
6
choc syrup
1
4
COUNT(quantity)

Slide 6 - Tekstslide

Deze slide heeft geen instructies

CREATE TABLE groceries (id INTEGER PRIMARY KEY, name TEXT, quantity INTEGER, aisle INTEGER);
  
INSERT INTO groceries VALUES (1, "Bananas", 56, 7);
INSERT INTO groceries VALUES(2, "Peanut Butter", 1, 2);
INSERT INTO groceries VALUES(3, "Dark Chocolate Bars", 2, 2);
INSERT INTO groceries VALUES(4, "Ice cream", 1, 12);
INSERT INTO groceries VALUES(5, "Cherries", 6, 2);
INSERT INTO groceries VALUES(6, "Chocolate syrup", 1, 4);

SELECT aisle, MIN(quantity) FROM groceries GROUP BY aisle;
SELECT aisle, MAX(quantity) FROM groceries GROUP BY aisle;
SELECT aisle, COUNT(quantity) FROM groceries GROUP BY aisle;
SELECT aisle, AVG(quantity) FROM groceries GROUP BY aisle;


Slide 7 - Tekstslide

Deze slide heeft geen instructies

We bekijken nog wat code. Wat voor resultaat geeft het volgende statement:

SELECT MINUTES, COUNT (*) FROM todo_list GROUP BY minutes;

De vraag beantwoord je op de dia erna

Slide 8 - Tekstslide

Deze slide heeft geen instructies

Kun je ook laten sorteren op tekst, dus alfabetisch laten sorteren?
A
Ja
B
Nee

Slide 9 - Quizvraag

Deze slide heeft geen instructies

CREATE TABLE todo_list (id INTEGER PRIMARY KEY, item TEXT, minutes INTEGER);

INSERT INTO todo_list VALUES (1, "Wash the dishes", 15);
INSERT INTO todo_list VALUES (2, "vacuuming", 20);
INSERT INTO todo_list VALUES (3, "Learn some stuff on KA", 30);

SELECT MINUTES, COUNT (*) FROM todo_list GROUP BY minutes;
SELECT item, (minutes) FROM todo_list GROUP BY minutes;


Slide 10 - Tekstslide

Deze slide heeft geen instructies

Wat voor resultaat geeft het volgende statement:

SELECT MINUTES, COUNT (*) FROM todo_list GROUP BY minutes;
A
Je krijgt het aantal minuten en het aantal rijen te zien
B
Het aantal minuten wordt bij elkaar opgeteld
C
Ik snap hier nog te weinig van
D
Je krijgt per hoeveelheid minuten het aantal rijen te zien

Slide 11 - Quizvraag

Deze slide heeft geen instructies

Vandaag gaan jullie de opdracht maken: Project Design a store database.

We gaan hem samen voorbereiden, zodat je makkelijker aan de slag kunt en hem hopelijk af kunt maken in de les.

Je gaat een tabel maken voor je eigen winkel en daarmee ga je de voorraad van de spullen die je verkoopt bijhouden.

Slide 12 - Tekstslide

Deze slide heeft geen instructies

Je gaat een kleine database maken, bestaande uit 1 tabel. Wat is het statement om een tabel te maken?
A
SELECT
B
INSERT INTO
C
COUNT(*)
D
CREATE TABLE

Slide 13 - Quizvraag

Deze slide heeft geen instructies

In de tabel ga je de voorraad van
de spullen, die je verkoopt, bijhouden. Wat zou een goede naam zijn voor de tabel?

Slide 14 - Open vraag

Deze slide heeft geen instructies

Je moet eerst bepalen welke spullen je gaat verkopen en welke eigenschappen je moet definiëren.
Dus: CREATE TABLE .....(eigenschap 1, eigenschap 2,.......)
Eigenschap 1 wordt een id {datatype} PRIMARY KEY. Wat is dit en welk type gebruik je daarvoor?
A
Uniek sleutelveld: INTEGER
B
Uniek sleutelveld: TEXT
C
Uniek sleutelveld: REAL

Slide 15 - Quizvraag

Deze slide heeft geen instructies

Je begint dus met:

CREATE TABLE naam_tabel(id INTEGER PRIMARY KEY,......)

Slide 16 - Tekstslide

Deze slide heeft geen instructies

Als je de tabel een naam hebt gegeven, en een uniek sleutelveld hebt gemaakt, is het handig om de items een naam te geven. Wat ga je verkopen? En wat voor datatype geef je je items?
A
INTEGER
B
REAL
C
TEXT

Slide 17 - Quizvraag

Deze slide heeft geen instructies

Dus dan heb je:

CREATE TABLE naam_tabel( id INTEGER PRIMAR KEY, naam_item TEXT,.......)

Slide 18 - Tekstslide

Deze slide heeft geen instructies

1 van de eigenschappen, die je moet definiëren is de voorraad. Wat is een goed datatype voor 'voorraad'?
A
INTEGER
B
REAL
C
TEXT

Slide 19 - Quizvraag

Deze slide heeft geen instructies

Dus dan heb je:

CREATE TABLE naam_tabel( id INTEGER PRIMAR KEY, naam_item TEXT, voorraad INTEGER, .......);

Slide 20 - Tekstslide

Deze slide heeft geen instructies

Ook de prijs moet erbij. Wat is een goed datatype voor de prijs?
A
INTEGER
B
REAL
C
TEXT

Slide 21 - Quizvraag

Deze slide heeft geen instructies

Welk statement gebruik je om items aan je tabel toe te voegen?
A
SELECT *
B
INSERT INTO.....VALUES
C
COUNT (*)

Slide 22 - Quizvraag

Deze slide heeft geen instructies

Welk statement gebruik je om alle items, met alle eigenschappen weer te geven?
A
SELECT *
B
INSERT INTO.....VALUES
C
COUNT (*)

Slide 23 - Quizvraag

Deze slide heeft geen instructies

Als je de opdracht leest, moet je de items geven, gesorteerd naar prijs, van laag naar hoog, dus oplopend. Welk statement gebruik je voor?
A
ORDER BY ......ASC
B
ORDER BY ......DESC

Slide 24 - Quizvraag

Deze slide heeft geen instructies

Ik denk dat iedereen kan starten met de opdracht. Wat denk jij?
Denk je dat je kunt starten met de opdracht?
Wil je eerst nog meer uitleg?

Slide 25 - Poll

Deze slide heeft geen instructies

Voor de items die duurder zijn dan een bepaald bedrag, moet je een voorwaarde gebruiken.
In SQL doe je dat met WHERE.
Zoek op w3schools op hoe je WHERE kunt gebruiken

Slide 26 - Tekstslide

Deze slide heeft geen instructies

Hoe was het ook alweer? Als je een voorwaarde aan de uitkomst wilt stellen, wat gebruik je dan ook alweer?
Bekijk deze code. Met welk statement of woord kun je hier de voorwaarde stellen alleen de films na 2000 te laten zien:

CREATE TABLE movies (id INTEGER PRIMARY KEY, name TEXT, release_year INTEGER);
INSERT INTO movies VALUES (1, "Avatar", 2009);
INSERT INTO movies VALUES (2, "Titanic", 1997);
INSERT INTO movies VALUES (3, "Star Wars: Episode IV - A New Hope", 1977);
INSERT INTO movies VALUES (4, "Shrek 2", 2004);
INSERT INTO movies VALUES (5, "The Lion King", 1994);
INSERT INTO movies VALUES (6, "Disney's Up", 2009);
 
SELECT * FROM movies WHERE release_year >= 2000 ORDER BY release_year ASC;

Slide 27 - Tekstslide

Deze slide heeft geen instructies

id
name
quantity
aisle
1
bananas
4
7
2
peanut butter
1
2
3
dark choc bars
2
2
4
ice cream
1
12
5
cherries
6
2
6
choc syrup
1
4
Hoe krijg je uit de kolom quantity: De hoogste waarde of de laagste waarde?

Slide 28 - Tekstslide

Deze slide heeft geen instructies

In de opdracht staat het volgende:
Tel het aantal groene items, of items gemaakt van….
De 1e stap hierin is het tellen van een bepaald aantal rijen. Daar gebruik je voor.....
A
SUM(*)
B
COUNT(*)
C
SELECT *

Slide 29 - Quizvraag

Deze slide heeft geen instructies

Nu moet je beslissen welke rijen je wilt tellen. Daar moet je een groepering voor gebruiken.
Om te bepalen welke groepering je moet kiezen, is het handig om het woord PER te gebruiken.
Een voorbeeld op de volgende dia

Slide 30 - Tekstslide

Deze slide heeft geen instructies

CREATE TABLE movies (id INTEGER PRIMARY KEY, name TEXT, release_year INTEGER);
INSERT INTO movies VALUES (1, "Avatar", 2009);
INSERT INTO movies VALUES (2, "Titanic", 1997);
INSERT INTO movies VALUES (3, "Star Wars: Episode IV - A New Hope", 1977);
INSERT INTO movies VALUES (4, "Shrek 2", 2004);
INSERT INTO movies VALUES (5, "The Lion King", 1994);
INSERT INTO movies VALUES (6, "Disney's Up", 2009);
 
SELECT release_year, COUNT(*) FROM movies GROUP BY release_year;

Slide 31 - Tekstslide

Deze slide heeft geen instructies

SELECT COUNT(*), release_year FROM movies GROUP BY release_year HAVING release_year >2000 ORDER BY release_year DESC;
Probeer dit statement:

Slide 32 - Tekstslide

Deze slide heeft geen instructies

CREATE TABLE todo_list (id INTEGER PRIMARY KEY, item TEXT, minutes INTEGER);
INSERT INTO todo_list VALUES (1, "Wash the dishes", 15);
INSERT INTO todo_list VALUES (2, "vacuuming", 15);
INSERT INTO todo_list VALUES (3, "Learn some stuff on KA", 30);
INSERT INTO todo_list VALUES (4, "Shopping", 15);

SELECT * FROM todo_list;

/*Selecteer de totale som van de klusjes*/

SELECT SUM(minutes) FROM todo_list;

/* selecteer nu de som PER aantal minuten en voor hoeveel rijen dat geldt*/

SELECT minutes, COUNT(*), SUM(minutes) FROM todo_list GROUP BY minutes;

Slide 33 - Tekstslide

Opbouwen:

SELECT SUM(minutes) FROM todo_list GROUP BY minutes;

SELECT minutes,  SUM(minutes) FROM todo_list GROUP BY minutes;

SELECT minutes, COUNT(*), SUM(minutes) FROM todo_list GROUP BY minutes;



Als je iets wilt groeperen, is het handig om het woord "per" te gebruiken: 

  • Het aantal producten per gangpad
  • Het aantal mensen per rol

Waar "per" voor staat, daar komt de GROUP BY
  • GROUP BY aisle
  • GROUP BY Role

Slide 34 - Tekstslide

Deze slide heeft geen instructies

Exit-ticket
Ik wil graag meer uitleg
Ik wil meer zelf oefenen
Ik snapte het wel
Meer oefening is niet nodig

Slide 35 - Poll

Deze slide heeft geen instructies