## MySQL database maken

Databases zijn een belangrijk onderdeel van veel websites en applicaties, en vormen de kern van de manier waarop gegevens worden opgeslagen en uitgewisseld via internet. Een van de belangrijkste aspecten van databasebeheer is het ophalen van gegevens uit een database, of dit nu op ad-hoc basis is of als onderdeel van een proces dat in een applicatie is gecodeerd. Er zijn verschillende manieren om informatie uit een database op te halen, maar een van de meest gebruikte methoden is het indienen van vragen via de opdrachtregel.

In relationele databasebeheersystemen is een query elke opdracht die wordt gebruikt om gegevens uit een tabel op te halen. In Structured Query Language (SQL) worden queries bijna altijd gedaan met de `SELECT`instructie.

Voordat we kunnen beginnen met het maken van query's in SQL, zullen we eerst een database en een paar tabellen maken en deze tabellen vervolgens vullen met enkele voorbeeldgegevens. Hierdoor kun je wat praktische ervaring opdoen wanneer je later begint met het maken van queries.

Open om te beginnen een MySQL-prompt als je MySQL- rootgebruiker :

    sudo mysql

Opmerking: mogelijk heb je de rootgebruiker geconfigureerd om te verifiëren met een wachtwoord. In dit geval maak je verbinding met de MySQL-prompt met de volgende opdracht:

    mysql -u root -p

Maak vervolgens de database door:

    CREATE DATABASE `verjaardag`;

Selecteer vervolgens deze database door te typen:

    USE verjaardag;

Maak vervolgens twee tabellen binnen deze database. We gebruiken de eerste tabel om de records van je vrienden op de bowlingbaan bij te houden. Met het volgende commando wordt een tabel gemaakt `tourneys`met kolommen voor `name`elk van je vrienden, het aantal toernooien dat ze hebben gewonnen ( `wins`), hun all-time `best`score en welke maat bowlingschoen ze dragen ( `size`):

    CREATE TABLE tourneys (name varchar(30), wins real, best real, size real);

Nadat u de `CREATE TABLE`opdracht hebt uitgevoerd krijg je de melding:

`Query OK`

Vul de `tourneys`tabel met enkele voorbeeldgegevens:

    INSERT INTO tourneys (name, wins, best, size) VALUES ('Koos', '7', '245', '8.5'), ('Richard', '4', '283', '9'), ('Martijn', '9', '266', '7'), ('Wilma', '2', '197', '7.5'), ('Annet', '13', '273', '8');

Je ontvangt een output als deze:

`Output`

`Query OK, 5 rows affected (0.01 sec)`

Maak daarna een nieuwe tabel in dezelfde database die we zullen gebruiken om informatie op te slaan over de favoriete verjaardagsmaaltijden van je vrienden. Met de volgende opdracht maak je een tabel met de naam `dinners`met kolommen voor `name` je vrienden, hun `birthdate`, hun favoriet `entree`, hun favoriete `side`gerecht en hun favoriet `dessert`:

    CREATE TABLE dinners (name varchar(30), birthdate date, entree varchar(30), side varchar(30), dessert varchar(30));

Op dezelfde manier ontvang je voor deze tabel feedback waarin wordt bevestigd dat de opdracht met succes is uitgevoerd:

`Query OK, 0 rows affected (0.01 sec)`

Vul deze tabel ook met enkele voorbeeldgegevens:

    INSERT INTO dinners (name, birthdate, entree, side, dessert) VALUES ('Hans', '1946-01-19', 'steak', 'salad', 'cake'), ('Linda', '1938-01-25', 'chicken', 'fries', 'ice cream'), ('Helma', '1941-02-18', 'tofu', 'fries', 'cake'), ('Daan', '1948-12-25', 'tofu', 'salad', 'ice cream'), ('Tom', '1944-05-28', 'steak', 'fries', 'ice cream');

`Query OK, 5 rows affected (0.00 sec)`

Zodra die opdracht met succes is voltooid, bent je klaar met het opzetten van je database. Vervolgens bespreken we de basisopdrachtstructuur van `SELECT`query's.

Inzicht in SELECT query's

Zoals vermeld in de inleiding, beginnen SQL-query's bijna altijd met de `SELECT`instructie. `SELECT`wordt gebruikt in query's om aan te geven welke kolommen uit een tabel in de resultatenset moeten worden geretourneerd. Query's bevatten ook bijna altijd `FROM`, wat wordt gebruikt om aan te geven in welke tabel de instructie een query zal uitvoeren.

Over het algemeen volgen SQL-query's deze syntaxis:

    SELECT column_to_select FROM table_to_select WHERE certain_conditions_apply;

Bij wijze van voorbeeld zal de volgende instructie de volledige `name`kolom uit de `dinners`tabel retourneren :

    SELECT name FROM dinners;

Je kunt meerdere kolommen uit dezelfde tabel selecteren door hun namen als volgt met een komma te scheiden:

    SELECT name, birthdate FROM dinners;

In plaats van een specifieke kolom of set kolommen een naam te geven, kun je de `SELECT`operator volgen met een asterisk ( `*`) die dient als tijdelijke aanduiding voor alle kolommen in een tabel. De volgende opdracht retourneert elke kolom uit de `tourneys`tabel:

    SELECT * FROM tourneys;

`WHERE`wordt gebruikt in query's om records te filteren die aan een bepaalde voorwaarde voldoen, en alle rijen die niet aan die voorwaarde voldoen, worden uit het resultaat verwijderd. Een `WHERE`clausule volgt doorgaans deze syntaxis:

    . . . WHERE column_name comparison_operator value

De vergelijkingsoperator in een `WHERE`clausule definieert hoe de opgegeven kolom moet worden vergeleken met de waarde. Hier zijn enkele veelgebruikte SQL-vergelijkingsoperatoren:

Operator | Wat het doet
--- | ---
`=` | test voor gelijkheid
`!=` | test voor ongelijkheid
`<` | test voor minder dan
`>` | test voor groter dan
`<=` | test voor kleiner dan of gelijk aan
`>=` | test voor groter dan of gelijk aan
`BETWEEN` | test of een waarde binnen een bepaald bereik ligt
`IN` | test of de waarde van een rij is opgenomen in een set gespecificeerde waarden
`EXISTS` | test of er rijen bestaan, gegeven de opgegeven voorwaarden
`LIKE` | test of een waarde overeenkomt met een opgegeven string
`IS NULL` | test voor `NULL`waarden
`IS NOT NULL` | test voor alle andere waarden dan `NULL`

Als je bijvoorbeeld de schoenmaat van Koos wilt vinden, kun je de volgende zoekopdracht gebruiken:

    SELECT size FROM tourneys WHERE name = 'Koos';

Probeer zelf eens uit meerdere tabellen gegevens naar voren te krijgen die in de tabellen zitten met bovenstaande operators.

Query's geven is een van de meest uitgevoerde taken op het gebied van databasebeheer. Er zijn applicaties zoals phpMyAdmin waarmee je query's kunt visualiseren, maar op de achtergrond is er altijd een database dat ergens op een server draait.