12. Overzicht SQL

SQL, structured query language, is een vraagtaal, een manier om gegevens uit relationele databases op te vragen. SQL is in feite geen zuivere vraagtaal, want je kan er ook tabellen mee creëren en aanpassen.
SQL bestaat uit DDL, DML, DQL en DCL. DQL wordt het meest gebruikt, DCL, Data Control Language wordt hier niet besproken.

12.1. DDL, Data Definition Language

DDL dient om tabellen te definiëren. We noemen dit ook definitiequery's.

Een database makenCREATE DATABASE Db-Naam;
Een database verwijderenDROP DATABASE Db-Naam;
Een tabel makenCREATE TABLE Tabelnaam (Veldnaam1 type, Veldnaam2 type, ...);
types: int(n), decimal(n,d) of numeric(n,d), char(n), varchar(n), date(yyyymmdd)
met n = aantal tekens en d = aantal decimalen, cijfers na de komma
Een tabel indexerenCREATE [UNIQUE] INDEX Indexnaam ON Tabelnaam (Veldnaam);
Een index verwijderenDROP INDEX Indexnaam ON Tabelnaam;
in MySql: ALTER TABLE Tabelnaam DROP INDEX Indexnaam;
Een tabel verwijderenDROP TABLE Tabelnaam;
Een veld toevoegenALTER TABLE Tabelnaam ADD Veldnaam type;
Een veld wijzigenALTER TABLE Tabelnaam MODIFY (VeldnaamOud typeOud, VeldnaamNieuw typeNieuw)
Een veld verwijderenALTER TABLE Tabelnaam DROP COLUMN Veldnaam;

12.2. DML, Data Manipulation Language

Met DML kan je waarden invullen, wijzigen en wissen.

Gegevens invoegenINSERT INTO Tabelnaam [Veldnaam1, Veldnaam2, ... ] VALUES (veld1-waarde, veld2-waarde, ...);
Gegevens aanpassenUPDATE Tabelnaam SET Veldnaam1 = waarde1 [, Veldnaam2 = waarde2, ... ] [WHERE voorwaarde];
Gegevens kopiërenSELECT Veldnaam1 [, Veldnaam2, ...] INTO NieuweTabel FROM OrigineleTabel;
Een tabel kopiƫrenSELECT * INTO NieuweTabel FROM OrigineleTabel;
Gegevens wissenDELETE FROM Tabelnaam WHERE voorwaarde;
De inhoud van een tabel verwijderenTRUNCATE TABLE Tabelnaam;
of: DELETE * FROM Tabelnaam;

12.3. DQL, Data Query Language

DQL dient om waarden op te vragen. Het basiscommando is altijd SELECT.

Syntax: SELECT [DISTINCT] Veld(en) [AS Alias voor Veldnaam]
FROM Tabelnaam [AS Alias voor Tabelnaam]
[WHERE voorwaarde]
[ORDER BY sorteerveld(en) [ASC | DESC] ];

12.3.1. Selecteren met berekeningen

Je kan gegevens selecteren en er tegelijk een berekening op laten uitvoeren.
Dikwijls zal je zo'n berekend veld een alias meegeven die dan als kolomtitel in het resultaat verschijnt.
bv: SELECT SUM(prijs) AS Totaal, AVG(prijs) AS [Gemiddelde Prijs] FROM Ritten;

Enkele veelgebruikte functies:

COUNT(*)tel het aantal records
SUM(veld)maakt de som van de waarden in het veld tussen de haakjes
AVG(veld)maakt het gemiddelde van de waarden in het veld tussen de haakjes
MIN(veld)zoekt de minimale waarde in het veld tussen de haakjes
MAX(veld)zoekt de maximale waarde in het veld tussen de haakjes
ROUND(veld,decimalen)rondt het getal in het numerieke veld af op het gewenste aantal decimalen

12.3.2. Groeperen

Daarvoor bestaat GROUP BY en om hier een voorwaarde te stellen gebruik je HAVING.

Syntax: SELECT Veld(en)
FROM Tabelnaam
[WHERE voorwaarde(n)]
GROUP BY Groepeerveld
[HAVING groepeervoorwaarde]
[ORDER BY Sorteerveld(en) [ASC | DESC] ];

12.3.3. Selecteren uit meer tabellen

Tabellen worden normaal zo gedefinieerd dat redundante (= overbodige, dubbele) opslag van gegevens voorkomen wordt.
Zo ontstaan verscheidene basistabellen, die onderling gekoppeld zijn via verwijssleutels.

De meest voorkomende vorm is de INNER JOIN, waar de overeenkomende, via de sleutel verbonden, records uit beide tabellen getoond worden.

Syntax: SELECT Tabel1.Veldnaam1, Tabel1.Veldnaam2, Tabel2.Veldnaam1, ...
FROM Tabel1 INNER JOIN Tabel2
ON Tabel1.Verwijsveld = Tabel2.Sleutelveld;

Verder kan je geregeld tegenkomen:

  • LEFT JOIN: toont ALLE records uit de eerste tabel en de overeenkomende uit de tweede;
  • RIGHT JOIN: toont de overeenkomende records uit de eerste tabel en ALLE records uit de tweede tabel.

In SQL kan je ook een samenvoegquery maken: een query met gegevens uit twee onafhankelijke, niet gerelateerde tabellen. Dit gebeurt met UNION. Het resultaat bevat alle records van de eerste tabel, samen met alle records van de tweede tabel.