Oefening SQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Coen Niemand

Coen Niemand

26/11/2018 22:16:32
Quote Anchor link
Hoi,

Ik heb van school (havo 5) oefening gekregen voor SQL, nu kom ik niet uit opdracht 5 13 en 14. Als ik 13 en 14 heb kan ik zelf 15 wel doen denk ik. Kan iemand mij hierbij helpen?

Dit zijn de vragen

Oefen-vragen bij SQL
1. De basisstructuur van een eenvoudige SQL-query bestaat uit:
SELECT …………
FROM …………
WHERE …………
Leg in je eigen woorden uit wat voor soort gegevens er op de stippellijntjes ingevuld moeten worden.
2. Geef bij de tabel klas (hiernaast) het SELECT statement zodat je van iedere leerling de naam en de hobby selecteert.
3. Gebruik dezelfde tabel om enkel de leerlingen met als hobby korfbal te selecteren.
4. Beschrijf de effecten van het gebruik van de statements GROUP BY en ORDER BY.
5. Geef het statement waarmee je een lijst krijgt van de sporten die meer dan 2 keer voorkomen.
6. Beschrijf de werking van de volgende SQL-functies:
a. COUNT(attribuut)
b. SUM(attribuut)
c. AVG(attribuut)
d. MAX(attribuut)
e. MIN(attribuut)

7. Geef het statement waarmee de Leerlingen in een lijst komen die zowel op P1 als PO een 7 of hoger haalden. En zet de namen in alfabetische volgorde.
8. Geef het statement waarmee voor deze klas de gemiddelden op P1 en P0 in beeld komen.
9. Geef het statement waarmee de hoogste score voor P1 en P0 (afzonderlijk) in beeld komt.
10. Wat doet PRIMARY KEY AUTOINCREMENT ?
11. Selecteer op (“dans”, “zwemmen”, “schaken”) m.b.v. een SELECT IN statement
In de tabel GROEPEN wordt van de leerlingen bijgehouden in welke groep ze zitten:
12. Wat is het SELECT statement waarmee je uit deze tabel de ll_ID kunt filteren van alle H3 groepsleden?

13. Gebruik het SELECT statement van opgave 12 om de namen van de leerlingen uit de klas H3 hiermee in beeld te krijgen..
De structuur van de opdracht wordt dus
SELECT … FROM … WHERE … IN ( SELECT … FROM … WHERE…)

14. Gebruik een JOIN om de tabel GROEPEN te koppelen met de tabel klas.
Creëer nu een lijst met de namen van leerlingen uit groep H2.
De structuur van de opdracht wordt dus
SELECT … FROM … WHERE … JOIN … ON
15. Schrijf het statement waarmee je de gemiddelden voor het P0 per groep (H1,H2,H3) in beeld krijgt.


Hierbij mijn antwoorden tot nu toe

/* Het maken van de databases */
CREATE TABLE klas (id INTEGER, naam TEXT, P1 REAL, P0 REAL, Hobby TEXT ) ;
INSERT INTO klas VALUES ( 133944, "Jeroen" ,6.5,6.00,"zwemmen" );
INSERT INTO klas VALUES ( 134131,"Thomas" ,8.0,6.00,"rugby" );
INSERT INTO klas VALUES ( 128081,"Pascal" ,6.0,6.50,"schaken" );
INSERT INTO klas VALUES ( 133838, "Jitka" ,7.5,6.50,"gamen" );
INSERT INTO klas VALUES ( 133783, "Chantal" ,7.3,6.50,"fietsen" );
INSERT INTO klas VALUES ( 133774, "Jan" ,9.5,9.50,"korfbal" );
INSERT INTO klas VALUES ( 128261, "Wietse" ,6.5,7.30,"gamen" );
INSERT INTO klas VALUES ( 133759, "Lisanne" ,6.5,7.30,"korfbal" );
INSERT INTO klas VALUES ( 134296, "Martijn" ,6.0,6.00,"rugby" );
INSERT INTO klas VALUES ( 133901, "Koen" ,8.0,8.00,"racen" );
INSERT INTO klas VALUES ( 133815, "Marijn" ,6.5,6.50,"gamen" );
INSERT INTO klas VALUES ( 127597, "Sieuwert" ,6.0,7.30,"rugby" );
INSERT INTO klas VALUES ( 133797, "Henk" ,6.0,7.50,"schaatsen" );
INSERT INTO klas VALUES ( 133861, "Maike" ,6.5,6.50,"turnen" );
INSERT INTO klas VALUES ( 133826, "Arman" ,7.3,8.00,"dans" );
INSERT INTO klas VALUES ( 133779, "Milou" ,7.3,8.00,"zwemmen" );
INSERT INTO klas VALUES ( 133805, "Tom" ,8.0,6.50,"korfbal" );
INSERT INTO klas VALUES ( 133866, "Twan" ,8.0,8.00,"voetbal" );
INSERT INTO klas VALUES ( 128778, "Waalko" ,6.5,6.00,"voetbal" );
CREATE TABLE groepen (id TEXT,ll_ID INTEGER);
INSERT INTO groepen VALUES ("H1",127597);
INSERT INTO groepen VALUES ("H2",128081);
INSERT INTO groepen VALUES ("H3",128261);
INSERT INTO groepen VALUES ("H1",128778);
INSERT INTO groepen VALUES ("H2",133759);
INSERT INTO groepen VALUES ("H3",133774);
INSERT INTO groepen VALUES ("H2",133779);
INSERT INTO groepen VALUES ("H3",1337830);
INSERT INTO groepen VALUES ("H1",133797);
INSERT INTO groepen VALUES ("H2",133805);
INSERT INTO groepen VALUES ("H3",133815);
INSERT INTO groepen VALUES ("H2",133826);
INSERT INTO groepen VALUES ("H1",133838);
INSERT INTO groepen VALUES ("H2",133861);
INSERT INTO groepen VALUES ("H3",133866);
INSERT INTO groepen VALUES ("H3",133901);
INSERT INTO groepen VALUES ("H1",133944);
INSERT INTO groepen VALUES ("H2",134131);
INSERT INTO groepen VALUES ("H3",134296);

/* Opdracht 1
SELECT is om een data de selecteren
FROM is vanaf waar je het wilt halen
WHERE is dat iets moet voldoen aan een conditie */

/* Opdracht 2 */
SELECT naam, hobby FROM klas;

/* opdracht 3 */
SELECT naam, hobby FROM klas WHERE hobby = "korfbal";

/* Opdracht 4
Met GROUO BY kan je data in groepen opsplitsen met de zelfe waarde
Met ORDER BY kan je data in een "ranglijst" zetten */

/* Opdracht 5 */
SELECT hobby, COUNT(hobby) FROM klas GROUP BY hobby ORDER BY COUNT(hobby) DESC;


/* Opdracht 6
A. Dit geeft het aantal weer van een kolom of database
B. Dit telt alle waardes bij elkaar op
C. Dit rekent het gemiddelde uit van de rij of colom
D. DIt geeft het hoogste getal
E. Dit geeft het laagste getal */

/* Opdracht 7 */
SELECT naam FROM klas WHERE p1 > 7 AND P0 > 7 ORDER BY naam;

/* Opdracht 8 */
SELECT AVG(p1), AVG(p0) FROM klas;

/* Opdracht 9 */
SELECT MAX(p1) FROM klas;
SELECT MAX(p0) FROM klas;

/* Opdracht 10
Dit maakt een uniek nieuw nummer per als er een nieuwe invoer van data komt */

/* Opdracht 11 */
SELECT naam FROM klas WHERE hobby = "dans" OR hobby = "zwemmen" OR hobby ="schaken";

/* Opdracht 12 */
SELECT * FROM groepen WHERE ID = "H3";

/* Opdracht 13 */


/* Opdracht 14 */

https://www.khanacademy.org/computer-programming/sql-oefen-toets/5813887489966080

Ik weet dat het veel is maar ik hoop dat iemand tijd en zin heeft om mij te helpen :)
Coen
Gewijzigd op 26/11/2018 22:21:59 door Coen Niemand
 
PHP hulp

PHP hulp

28/03/2024 10:32:00
 
- Ariën  -
Beheerder

- Ariën -

26/11/2018 23:09:35
Quote Anchor link
Opdracht 5: GROUP BY en HAVING als ik mij niet vergis.
Verder over de JOIN kan je een hoop lezen op internet. Alles voorkauwen doen we natuurlijk liever niet ;-)

Opdracht 11 klopt niet, en moet een SELECT IN() zijn
Gewijzigd op 26/11/2018 23:12:14 door - Ariën -
 
Coen Niemand

Coen Niemand

27/11/2018 11:21:01
Quote Anchor link
Opdracht 5 is gelukt, opdracht 11 is nu aangepast en als het goed is ook correct. Nu de laatste paar nog.
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 11:24:20
Quote Anchor link
Probeer eerst maar even een JOIN te maken en te begrijpen. De opbouw is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT  
FROM  
WHERE  
JOIN  ON


Kijk eens naar:
https://www.w3schools.com/sql/sql_join.asp
 
Coen Niemand

Coen Niemand

27/11/2018 12:38:44
Quote Anchor link
Dit is mijn beste antwoord voor 13...
SELECT LL_ID
FROM groepen
WHERE ID = "H3"
INNER JOIN klas on naam=naam;

Maar dit werkt ook niet. Ik snap niet wat ik fout doe.
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 12:43:17
Quote Anchor link
misschien even de tabellen aangeven voor de velden: groepen.LL_ID en ook bij de INNER JOIN.
naam en naam? Het gaat om het vergelijken uit twee tabellen. Normaliter zou je een vergelijking op ID-nummer moeten doen, en niet op de naam.
 
Adoptive Solution

Adoptive Solution

27/11/2018 12:45:33
Quote Anchor link
Ik heb dit ervan gemaakt :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM klas WHERE id IN ( SELECT ll_id FROM groepen WHERE id = 'h3')


En het antwoord op vraag 7 is dit :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT naam FROM klas WHERE p1 >= 7 AND P0 >= 7 ORDER BY naam;


Toevoeging op 27/11/2018 12:50:46:

En misschien een rare vraag, maar kan de meester dit niet uitleggen?

De gast wordt er voor betaald door de belastingbetaler. Vraag maar aan je ouders als die weer klagen dat het schoolgeld omhoog gaat.

En weten je klasgenoten het niet? Jullie zijn toch zo whatsapp savvy.
 
Coen Niemand

Coen Niemand

27/11/2018 18:50:52
Quote Anchor link
Onze docent legt niet veel uit, wij hebben inderdaad ook wel een WhatsApp groep maar niemand weet hoe we deze laatste vragen moeten oplossen, vandaar dat ik het hier vraag. Het antwoord van u is niet correct omdat je niet de namen krijgt. Ik ga nu veder met de tips van hierboven
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 18:52:40
Quote Anchor link
Welke query met INNER JOIN heb je nu dan?
De koppeling moet je bij de ID-nummers leggen.
 
Coen Niemand

Coen Niemand

27/11/2018 18:57:41
Quote Anchor link
Als ik

SELECT LL_ID, naam
FROM groepen
INNER JOIN klas on groepen.LL_ID=klas.ID

Zie ik de ID + naam maar zodra ik

SELECT LL_ID, naam
FROM groepen
WHERE ID = "H3";
INNER JOIN klas on groepen.LL_ID=klas.ID

Krijg ik een error, volgens mij ben ik op het goede pad maar mis ik iets waardoor de code niet klopt
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 19:10:22
Quote Anchor link
Een punt-komma sluit je query af. Dat wil je niet vroegtijdig ;-)
Het is zelfs niet nodig, tenzij je meerdere sql-opdrachten achtereenvolgens uitvoert in een query.
 
Adoptive Solution

Adoptive Solution

27/11/2018 19:15:20
Quote Anchor link
Dit is het antwoord op vraag 13 en niet op vraag 14 die over een inner join gaat. En bij mij wordt alles uit klas getoond.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM klas WHERE id IN ( SELECT ll_id FROM groepen WHERE id = 'h3')


Quote:
Dit is mijn beste antwoord voor 13...


Nee, het is je beste antwoord op vraag 14

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT LL_ID
FROM groepen
WHERE ID = "H3"
INNER JOIN klas on naam=naam;
Gewijzigd op 27/11/2018 19:15:58 door Adoptive Solution
 
Coen Niemand

Coen Niemand

27/11/2018 19:21:46
Quote Anchor link
Adoptive Solution als ik jouw code gebruik krijg ik niks
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 19:31:23
Quote Anchor link
H3 en h3. Zie het verschil...
Volgens mij kan dit afhankelijk van de MySQL instellingen wel of geen hit opleveren.

En waarom een naam en een zelfde naam koppelen? Moet dit niet op een ID's zoals ik al eerder zei?
Gewijzigd op 27/11/2018 19:37:56 door - Ariën -
 
Coen Niemand

Coen Niemand

27/11/2018 19:43:19
Quote Anchor link
Met een hoofdletter H werkt het inderdaad. Dit is wel het antwoord op de vraag en ook staat er dat we het via deze constructie moeten doen in de opdracht.
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 19:49:35
Quote Anchor link
Quote:
14. Gebruik een JOIN om de tabel GROEPEN te koppelen met de tabel klas.
Creëer nu een lijst met de namen van leerlingen uit groep H2.
De structuur van de opdracht wordt dus
SELECT … FROM … WHERE … JOIN … ON

Je moet de namen tonen, dat is wat je in het SELECT-deel doet. Maar je wilt gelijke data uit beide tabellen met elkaar koppelen. Dat zijn dan dus klas.id en groepen.LL_ID

(wel lekker inconsistent dat er afwisselend hoofd- en kleine letters gebruikt worden in de velden.)
Gewijzigd op 27/11/2018 19:49:52 door - Ariën -
 
Coen Niemand

Coen Niemand

27/11/2018 19:52:40
Quote Anchor link
Ja dat is voor opdracht 14, het antwoord van Adoptive was voor 13
 
Thomas van den Heuvel

Thomas van den Heuvel

27/11/2018 19:57:49
Quote Anchor link
- Ariën - op 27/11/2018 19:31:23:
Volgens mij kan dit afhankelijk van de MySQL instellingen wel of geen hit opleveren.

Dit kan inderdaad van de database-, tabel- en/of kolom-collation afhangen :). Dit bepaalt namelijk mede of vergelijkingen case-sensitive zijn of niet.
Gewijzigd op 27/11/2018 19:59:26 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

27/11/2018 19:59:32
Quote Anchor link
Jup, de _ci suffix bepaalt dit.
 
Adoptive Solution

Adoptive Solution

27/11/2018 20:54:19
Quote Anchor link
En om vraag 15 te beantwoorden.

Pleur onderstaande code in phpmyadmin en je kan zelf met een calculator controleren of het klopt.

Nog wel effe afronden. Maar dat is voor de vervolgcursus.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT klas.id, klas.naam, klas.P1, klas.P0, klas.hobby, groepen.id, groepen.ll_id
FROM klas
JOIN groepen ON klas.id = groepen.ll_id
WHERE groepen.id = H1'
ORDER BY klas.naam;

SELECT klas.id, klas.naam, klas.P1, klas.P0, klas.hobby, groepen.id, groepen.ll_id
FROM klas
JOIN groepen ON klas.id = groepen.ll_id
WHERE groepen.id = 'H2'
ORDER BY klas.naam;

SELECT klas.id, klas.naam, klas.P1, klas.P0, klas.hobby, groepen.id, groepen.ll_id
FROM klas
JOIN groepen ON klas.id = groepen.ll_id
WHERE groepen.id = 'H3'
ORDER BY klas.naam;

SELECT
( SELECT AVG(klas.P0) FROM klas WHERE klas.id IN ( SELECT groepen.ll_id FROM groepen WHERE groepen.id = 'H1') ) AS gemh1,
( SELECT AVG(klas.P0) FROM klas WHERE klas.id IN ( SELECT groepen.ll_id FROM groepen WHERE groepen.id = H2') ) AS gemh2,
( SELECT AVG(klas.P0) FROM klas WHERE klas.id IN ( SELECT groepen.ll_id FROM groepen WHERE groepen.id = 'H3') ) AS gemh3;


En ondertussen vraag ik aan Arie Slob of ik korting krijg op mijn belasting wegens onbezoldigd parttime meesterschap.

PS ik zie dat 'h1' en 'H1' bij mij geen verschil maakt.

Toevoeging op 27/11/2018 20:59:39:

PS 2 ik gebruik utf8mb4_general_ci voir database en tabellen.
Gewijzigd op 27/11/2018 20:57:59 door Adoptive Solution
 
Thomas van den Heuvel

Thomas van den Heuvel

27/11/2018 21:33:09
Quote Anchor link
Als de kolommen BINARY zijn dan zijn ze wel case sensitive volgens mij, ongeacht de collation, dus het hangt (in dat geval) niet alleen af van de collation.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.