Skip to main content

SQL - deel 1 (SELECT WHERE)

Inleiding

We kijken naar een database met drie entiteiten; student, vak en een koppeltabel.

De relatie student-vak is veel-op-veel (N:M) want één student kan meer vakken hebben en één vak kan bij meer studenten horen.

We hebben dus een N:M relatie en hebben daarbij een koppeltabel nodig.

Als we het cijfer van een student voor een vak willen opslaan dan moet dat in de koppeltabel. Het cijfer gaat namelijk over de combinatie student-vak. Alles wat over de combinatie gaat moet in de koppeltabel.

We hebben dus het volgende ERD.

image-1676378321011.png

Database maken

Start MariaDB (MySQL) in XAMPP en ga naar http://localhost/phpmyadmin

Je kunt ook op de admin in XAMPP drukken:

image-1676379334123.png

  • In phpmyadmin, maak je een nieuwe database en noem die student.

image-1676378685637.png

image-1676378813133.png

  • Controleer of de database is geïmporteerd. De koppeltabel in heet in deze database cijfer (dat is omdat in de koppeltabel het cijfer is opgeslagen; het is en blijft ook de koppeling tussen student en vak)

image-1676378544439.png

  • Klap de drie entiteiten (cijfer, student en vak) open en kijk of je alle kolommen ziet.

Select

Om gegevens uit de database te halen is een aparte taal bedacht. Dit heet SQL. Een SQL-programmaatje wordt een query genoemd en telt meestal maar een paar regel.

De meeste query's halen gegeven uit de database en de meest eenvoudige query haalt alle gegevens uit één entiteit. Stel, je wilt alle informatie van alle studenten zien, dan is dit de query:

SELECT * FROM student

SELECT betekent; haal de gegevens op.

* betekent alle kolommen

FROM betekent dat er een tabelnaam (entiteitsnaam) volgt en student is dan de naam van de tabel.

Voer de query uit in phpmyadmin onder het tabje SQL.

image-1676379711258.png

Zorg er voor dat je de juiste database hebt geselecteerd (hebt aangeklikt).

Je hebt nu een * in de query gebruikt. Dat betekent dat je alle velden laat zien. Stel dat je alleen de voornaam en het email adres wilt afdrukken dan kan je dat als volgt.

SELECT voornaam, email FROM student

Aliasen (AS)

Stel dat je nu de kolomnamen wilt veranderen dan kan je aliassen gebruiken. Stel de kolomnaam voornaam veranderen in Naam, en email in eMail dan kan dat als volgt.

SELECT voornaam as 'Naam', email as 'eMail' FROM student

WHERE

Stel je wilt alle gegevens van de student met de voornaam Grazia zien. Dat doe je door een WHERE te gebruiken.

De standaard query wordt als volgt opgebouwd

SELECT kolomnaam1, kolomnaam2, .... of * voor alles
FROM tabelnaam
WHERE de conditie

De query die alle gegeven van de student Grazia opzoekt wordt dan

SELECT * FROM `student`
WHERE voornaam='Grazia'

Let op dat Grazia een string is en daarom tussen '(singel quotes) moet worden gezet.

Wildcards (LIKE)

Een conditie kan ook een zogenaamde wildcard bevatten. Een wildcard is bijvoorbeeld alle namen die met een a beginnen. Daarvoor gebruik je in plaats van de = een like en je gebruikt bijvoorbeeld 'a%' om aan te geven dat de naam met een a moet beginnen. Of bijvoorbeeld '%t' om aan te geven dat de naam met een t moet eindigen.

OK, stel willen alle gegevens van alles studenten zien van wie de voornaam met een a begint.

SELECT * FROM student
WHERE voornaam LIKE 'a%'

Hoeveel studenten hebben een voornaam die met een a begint?

Nog een voorbeeld, stel willen alle gegevens van alles studenten met een email adres dat met .com eindigt. Hoe doe je dat?

SELECT * FROM student
WHERE email  like '%.com'

AND en OR

Stel we willen alle gegevens van alle studenten waarvan de voornaam met een a of een b of een c begint. Dan kunnen we met OR (net als in PHP) deze condities combineren.

SELECT * FROM student
where voornaam like 'a%' OR voornaam like 'b%' OR voornaam like 'c%'

Stel dat je in deze bovenstaande query per ongeluk een AND had gebruikt, wat zou er dan gebeuren? Als je wilt kan je het uitproberen!

Stel we willen alle gegevens van alles studenten van wie de voornaam met een a begint én van wie het e-mailadres op .com eindigt.

Daarvoor hebben we een AND nodig om de twee condities te combineren.

SELECT * FROM student
where voornaam like 'a%' AND email like '%.com'

Nu een lastige. Stel we willen de studenten van wie de voornaam met een a, b of c begint en van wie het e-mailadres op .com eindigt. We moeten nu de AND en OR gaan combineren.

Als je dat doet dan is er een regel en dat is dat je de OR tussen haakjes moet zetten omdat die bij elkaar hoort.

Dus de gecombineerde query wordt dan;

SELECT * FROM student
where ( voornaam like 'a%' OR voornaam like 'b%' OR voornaam like 'c%' )
       AND email like '%.com'

Opgave 1

Maak een query waarin alle voornamen, achternamen en e-mailadressen van alle studenten worden getoond waarvan de voornaam met een m begint en waarvan het email adres eindigt met .gov of .org

Als je het goed doet krijg je drie resultaten. Welke?

Inleveren

Screenshot van je resultaten. Maak een screenshot van je gehele browser.


JOIN


FUNCTIONS


INSERT


UPDATE


DELETE

----------------------------------------------------------

image-1676378580643.png

image-1676378514972.pngc22