SQL syntax

De SQL syntax is erg uitgebreid. In deze module zullen we dan ook de meest voorkomende SQL opdrachten doornemen. Een compleet overzicht van de SQL syntax kun je vinden op de website van MySQL (https://dev.mysql.com/doc/refman/8.0/en/dynindex-statement.html)

Data selecteren, filteren en ordenen

Een van de voordelen van een SQL database is het gemak waarmee je data kunt selecteren, filteren en ordenen. Dit doe je met een "query". Vaak gebruik je HeidiSQL om query's te maken en testen. Dit doe je in het Query scherm.

 

Selecteren

Voor het selecteren van data gebruik je het SELECT commando. De syntax voor dit commando is:
SELECT kolom1, kolom2, ... FROM tabel_naam;
Door de kolomnamen van volgorde te veranderen verander je ook de volgorde van de data. In plaats van de kolomnamen mag je ook een wildcard (*) gebruiken om alle kolommen te selecteren.
SELECT * FROM tabel_naam;

Filteren

Om data te filteren gebruiken we het WHERE commando:
SELECT * FROM tabel_naam WHERE conditie;
Met de conditie die je meegeeft filter je de data.

Hieronder een aantal voorbeelden:
SELECT * FROM leerlingen WHERE leerling_voornaam="Piet";
Je krijgt nu alleen de rijen terug waarbij de voornaam gelijk is aan "Piet".
SELECT * FROM leerlingen WHERE leerling_voornaam="piet" OR leerling_voornaam="Klaas";
Je krijgt nu alleen de rijen terug waarbij de voornaam gelijk is aan "Piet" of "Klaas".
SELECT * FROM leerlingen WHERE leerling_voornaam="piet" AND leerling_achternaam="Vries";
Je krijgt nu alleen de rijen terug waarbij de voornaam gelijk is aan "Piet" en de achternaam gelijk is aan "Vries".
SELECT * FROM leerlingen WHERE leerling_nummer < 12346;
Je krijgt nu alleen de rijen terug waarbij het leerlingnummer kleiner is als 12346. Dit werkt ook bij datum velden.
Vaak wil je ook zoeken met wildcards. In SQL kan dat ook. Het wildcard teken is % :
SELECT * FROM leerlingen WHERE leerling_voornaam LIKE 'Pie%';
Je krijgt nu alleen de rijen terug waarbij de voornaam begint met "Pie". In ons geval Piet en Pien.
Wildcards mogen overal in de string staan.

Ordenen

Om de data te sorteren gebruik je het ORDER BY commando.
SELECT kolom1, kolom2, ... FROM tabel_naam ORDER BY kolom1, kolom2, ... ASC|DESC;
Hierbij geef je op welke kolommen gebruikt moeten worden voor de sortering.

SELECT * FROM leerlingen ORDER BY leerling_achternaam ASC,leerling_voornaam DESC;
Deze query sorteert de data eerst op achternaam (ASC: oplopend, van A naar Z) en bij gelijke achternaam op voornaam (DESC: aflopend, van Z naar A). Het commando ASC is niet strikt noodzakelijk, als je geen sorteervolgorde opgeeft gaat SQL er van uit dat je oplopend wilt sorteren.

Combineren

Je kunt alle bovenstaande commando's combineren tot één query:
SELECT * FROM leerlingen WHERE leerling_voornaam LIKE 'Pie%' ORDER BY leerling_achternaam ASC,leerling_voornaam DESC;
Je krijgt nu alleen de rijen terug waarbij de voornaam begint met "Pie". Gesorteerd op achternaam en voornaam. Let hierbij wel op de volgorde van de commando's. Het WHERE commando komt altijd voor het ORDER BY commando. Je moet ten slotte eerst filteren voordat je sorteert.

Toevoegen via SQL

Als je data toevoegt via HeidiSQL geeft deze op de achtergrond SQL commandos aan de database. Zo ook bij het toevoegen van data aan een tabel. Hiervoor gebruik je het commando INSERT.
INSERT INTO tabel_naam (kolom1, kolom2, kolom3, ...) VALUES ('waarde1', 'waarde2', 'waarde3', ...);

Een voorbeeld hiervan zijn we hierboven al tegen gekomen:
INSERT INTO leerlingen
(leerling_nummer, leerling_voornaam, leerling_tussenvoegsels, leerling_achternaam, leerling_geboortedatum, leerling_stamgroep)
VALUES
('12545', 'Mien', '', 'Dobbelsteen', '2004-06-10', 'H4B');

Updaten via SQL

Om data bij te werken gebruik je het commando UPDATE. Als een gebruiker van klas wisselt of een ander e-mail adres krijgt wil je de betreffende velden bijwerken:
UPDATE leerlingen SET leerling_stamgroep = 'H4D', leerling_geboortedatum = '2005-06-10' WHERE leerling_id = 1;
Met UPDATE kun je ook meerdere rijen tegelijk aanpassen:
UPDATE leerlingen SET leerling_stamgroep = 'H4D', leerling_geboortedatum = '2005-06-10' WHERE leerling_voornaam LIKE 'Pie%';
Alle leerlingen waarvan de voornaam begint met 'Pie' krijgen nu de klas 'H4D'.

LET OP:
UPDATE zonder WHERE veranderd alle rijen in de tabel.

Verwijderen via SQL

Via SQL kun je ook rijen weggooien met het DELETE commando. Hierbij is het van belang dat je de rijen goed kunt selecteren via het WHERE commando anders gooi je snel te veel weg en MySQL heeft geen prullenbak.
Voorbeelden van het DELETE commando zijn:
DELETE FROM leerlingen WHERE leerling_id=21;
DELETE FROM leerlingen WHERE leerling_voornaam LIKE 'Pie%';
DELETE FROM leerlingen WHERE leerling_nummer < '12346';

LET OP:
Als je geen selectie maakt (WHERE) gooi je alle rijen weg.
DELETE FROM leerlingen;
Deze query maakt de hele tabel leeg.