BASISINSTRUCTIES SQL SQL : Structured Query Language is een taal gericht op het ondervragen van een relationele database en die aan veel klassieke databasemanagementsystemen kan worden gekoppeld. SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd. Een belangrijke basisinstructie: SELECT Syntaxregels: -
Gereserveerde woorden in hoofdletters een instructie eindigt met een puntkomma asterisk (*) betekent alle velden of kolommen veldnaam alleen is voldoende indien deze uniek is in de aangeduide tabellen tabelnaam: veldnaam indien deze veldnaam niet uniek is in de aangeduide tabellen
RECORDS SELECTEREN UIT ÉÉN TABEL SELECT
FROM
Veldenlijst: - gewenste veldnaam gescheiden door komma’s - * Tabelnaam:Naam van de tabel uit de databank Voorbeeld: -
Toon de velden naam, voornaam, klas, geboortedatum van alle leerlingen uit de tabel Leerling SELECT Naam, Voornaam, Klas, Geboortedatum FROM Leerling;
-
Toon alle velden uit de tabel Leerling SELECT * FROM Leerling;
RECORDS SELECTEREN UIT ÉÉN TABEL DIE AAN ÉÉN VOORWAARDE VOLDOEN SELECT FROM WHERE
Vergelijkingsoperatoren = > < >= <= <>
gelijk aan groter dan kleiner dan groter dan of gelijk aan kleiner dan of gelijk aan verschillend van
Voorbeeld: -Toon de velden naam, voornaam en gemeente uit de tabel LEERLING van alle leerlingen uit 6IN. SELECT Naam, Voornaam, Gemeente FROM Leerling WHERE Klas=“6 IN”; -Toon alle velden uit de tabel LEERLING van de leerlingen die in Kortrijk wonen SELECT * FROM Leerling WHERE Postcode=“8500”;
Gebruik van wildcards * en ? SELECT FROM WHERE LIKE <deelstring> Voorbe eld: - Toon de velden naam, voornaam en klas uit de tabel Leerling van alle leerlingen die in Oost-Vlaanderen wonen, m.a.w. waarvan de postcode begint met 9 SELECT Naam, Voornaam, Klas FROM Leerling WHERE Postcode LIKE “9*”; - Toon de velden naam, voornaam, geboortedatum uit de tabel Leerling van alle leerlingen uit de afdeling Informatica, m.a.w. waarvan de klas eindigt op IN. SELECT Naam, Voornaam, Geboortedatum FROM Leerling WHERE Klas LIKE “??IN”;
Zoeken tussen een minimum en een maximum waarde SELECT FROM WHERE BETWEEN <waarde1> AND <waarde2> Waarde1: minimumwaarde Waarde2 maximumwaarde Beide waarden zijn inbegrepen in de lijst die zal worden weergegeven. Voorbeeld: - Toon de velden naam, voornaam en klas uit de tabel Leerling van alle leerlingen die in West-Vlaanderen wonen, m.a.w. waarvan de postcode ligt tussen 8000 en 8999 SELECT Naam, Voornaam, Klas FROM Leerling WHERE Postcode BETWEEN “8000” AND “8999”; RECORDS SELECTEREN UIT ÉÉN TABEL MET MEERDERE VOORWAARDEN SELECT FROM WHERE AND SELECT FROM WHERE OR SELECT FROM WHERE IN <waardenlijst> Waardenlijst: lijst met toegelaten waarden, tussen ronde haken en gescheiden door een komma Voorbeeld: - Toon Naam, voornaam en klas uit de tabel Leerling van alle leerlingen die in de derde graad zitten SELECT Naam, Voornaam, Klas FROM Leerling WHERE Klas LIKE “5*” OR klas LIKE “6*”; - Toon Naam, voornaam en klas uit de tabel Leerling van alle leerlingen die in het 6de jaar zitten en in Kortrijk wonen SELECT Naam, Voornaam, Klas FROM Leerling WHERE Klas LIKE “6*” AND Postcode=“8500”; - Toon Naam, Voornaam, Klas uit de tabel Leerling van alle leerlingen die geboren zijn in Kortrijk of in Gent SELECT Naam, Voornaam, Klas FROM Leerling WHERE Geboorteplaats IN (“Kortrijk”, “Gent”);
SELECTEREN EN SORTEREN VAN RECORDS UIT ÉÉN TABEL SELECT FROM ORDER BY <sortering> Sortering: - Bevat: de veldnamen waarop moet worden gesorteerd de sorteervolgorde: ASC = stijgend (standaardoptie) DESC = dalend - Verschillende velden worden gescheiden door een komma - Volgorde van sortering wordt bepaald door de volgorde van de velden (meest linkse veld bepaalt de hoofdvolgorde) Voorbeeld - Toon de velden Naam, Voornaam, Klas uit de tabel leerling gesorteerd op naam in stijgende volgorde SELECT Naam, Voornaam, Klas FROM Leerling ORDER BY Naam ASC; - Toon de velden Naam, Voornaam, Klas, Gemeente uit de tabel Leerling gesorteerd op Postcode en nadien op gemeente, in dalende volgorde SELECT Naam, Voornaam, Klas, Gemeente FROM Leerling ORDER BY Postcode, Gemeente DESC; - Toon de velden Naam, Voornaam, Klas uit de tabel leerling van alle leerlingen uit 5 IF of 6 IF gesorteerd op naam en voornaam SELECT Naam, Voornaam, Klas FROM Leerling WHERE KLAS= “5 IF” OR klas= “6 IF” ORDER BY Naam, Voornaam;
BEREKENINGEN MET RECORDS UIT ÉÉN TABEL Enkele functies: COUNT: aantal waarden in een kolom tellen SUM: som van alle waarden in een kolom MIN: kleinste waarde uit een kolom MAX: grootste waarden uit een kolom AVG: gemiddelde waarde uit een kolom SELECT FROM Voorbeeld: - Tel het aantal leerlingen uit de tabel leerling SELECT COUNT(Naam) FROM Leerling; -
Tel het aantal leerlinge uit 6 IN SELECT COUNT(Naam) FROM Leerling WHERE klas= “6 IN”
RECORDS UIT ÉÉN TABEL GROEPEREN SELECT FROM GROUP BY Berekeningen in SQL kunnen worden gegroepeerd volgens bepaalde velden. In dit geval worden de records eerst gesorteerd. SELECT FROM GROUP BY Voorbeeld: -
Tel het aantal leerlingen per gemeente SELECT Gemeente, COUNT(naam) FROM Leerling GROUP BY Gemeente De veldnaam Gemeente na SELECT is niet noodzakelijk maar verduidelijkt de berekening en geeft weer bij welke gemeente de berekening hoort.
RECORDS UIT ÉÉN TABEL GROEPEREN WAARBIJ BEPAALDE RECORDS UITGESLOTEN WORDEN SELECT FROM GROUP BY HAVING Records die aan een bepaalde groepsvoorwaarde niet voldoen worden uitgesloten Voorwaarde: Groepsvoorwaarde
Voorbeeld: - Tel het aantal leerlingen per klas waarbij de klas met meer dan 30 leerlingen niet moeten worden vermeld. SELECT klas, COUNT(naam) FROM Leerling GROUP BY klas HAVING COUNT(naam)<30
TABEL AANMAKEN Vooraleer een tabel kan worden aangemaakt, moeten volgende bijkomende gegevens gekend zijn: • Welk soort gegevens moet de tabel bevatten? • Wat is de tabelnaam? • Welke kolom(men) bevat de primaire sleutel? • Wat zijn de namen van de kolommen (velden)? • Wat is het gegevenstype van elke kolom: (CHAR, VARCHAR (gegevens met variabele lengte, NUMBER, DATE)? • Wat is de lengte van elke kolom? • In welke kolommen (velden) moeten gegevens verplicht worden ingevuld? CREATE TABLE ( [ NOT NULL ] [ PRIMARY KEY / UNIQUE ], [ NOT NULL ] [ PRIMARY KEY / UNIQUE ], [ NOT NULL ] [ PRIMARY KEY / UNIQUE ], [ NOT NULL ] [ PRIMARY KEY / UNIQUE ], … );
De beperking NULL / NOT NULL geeft aan in welke kolommen gegevens al dan niet moeten worden ingevuld. NULL in dit veld moeten de gegevens niet verplicht worden ingevuld, dus mag het veld leeg blijven Standaardwaarde voor een kolom en hoeft dus niet ingevuld te worden NOT NULL in dit veld moeten de gegevens verplicht worden ingevuld. PRIMARY KEY
Enkel vermeld naast de kolom(men) die als primaire sleutel dienst doet
UNIQUE
De ingevoerd gegevens moeten uniek zijn. Deze definitie is overbodig in de kolom met de primaire sleutel, aangezien deze gegevens reeds uniek moeten zijn.
Voorbeeld Maak een tabel Leerling met volgende velden: Veldnaam Type Lengte Nummer Number 3 Voornaam Character 15 Naam Character 20 Straat Character 25 Postcode Character 6 Plaats Character 25 Geboortedatum Date Klas Character 5
Invoer verplicht Ja Primaire sleutel Nee Ja Nee Nee Nee Nee Ja
CREATE TABLE Leerling ( Nummer NUMBER(3) NOT NULL PRIMARY KEY, Voornaam VARCHAR(15) NULL, Naam CHAR(20) NOT NULL, Straat VARCHAR(25) NULL, Postcode CHAR(6) NULL, Plaats VARCHAR(25) NULL, Geboortedatum DATE NULL Klas CHAR(5) NOT NULL);
TABEL WIJZIGEN Een bestaande tabel kan worden aangepast met de instructie ALTER TABLE. Hiermee kunnen kolommen worden toegevoegd of verwijderd, kan de kolomdefinitie worden gewijzigd, kunnen beperkingen worden toegevoegd of verwijder. Kolommen wijzigen ALTER TABLE MODIFY [ COLUMN ] [ / NULL / NOT NULL]; Voorbeeld Lengte van het veld voornaam wijzigen in 20 ALTER TABLE Leerling MODIFY Voornaam VARCHAR(20);
Kolommen toevoegen aan een tabel ALTER TABLE ADD COLUMN ; Toe te voegen kolommen in een bestaande tabel kunnen niet als NOT NULL worden gedefinieerd als er reeds gegevens in de tabel staan. NOT NULL betekent dat de kolom een waarde moet hebben in elke rij, maar de reeds bestaande rijen hebben nog geen waarde voor deze nieuwe kolom. Een verplichte kolom kan wel als volgt worden toegevoegd: • Nieuwe kolom toevoegen met als definitie NULL • Waarde invoeren voor de nieuwe kolom in alle bestaande rijen • Tabel aanpassen en kolomdefinitie nu wijzigen in NOT NULL
Kolommen verwijderen uit een tabel ALTER TABLE DROP COLUMN ;
TABEL UIT BESTAANDE TABEL MAKEN CREATE TABLE AS SELECT [* / / , … ] FROM [WHERE ]; Voorbeeld Maak een nieuwe tabel Klas aan, afgeleid uit de tabel Leerling, die enkel het leerlingnummer, de klas, de voornaam en de naam van de leerlingen bevat. CREATE TABLE Klas AS SELECT Nummer, Klas, Voornaam, Naam FROM Leerling;
TABELLEN VERWIJDEREN DROP TABLE ; Voorbeeld Verwijder de zopas aange maakt tabel DROP TABLE Klas;
GEGEVENS IN EEN TABEL INVOEREN INSERT INTO VALUES (<Waarde1>, <Waarde2>, <Waarde3>, …); Voorbeeld Vul volgende gegevens in in de tabel leerling: Nummer 001 Voornaam Ann Naam Deschamps Straat Lange Munt 9 Postcode 9000 Plaats Gent Geboortedatum Klas 5 IF
01-07-1989
INSERT INTO Leerling VALUES (‘001’, ‘Ann’, ‘Deschamps’, ‘Lange Munt 9’, ‘9000’, ‘Gent’, ‘01-07-1989’, ‘5 IF’);
GEGEVENS INVOEREN IN EEN BEPERKT AANTAL KOLOMMEN INSERT INTO (, , …) VALUES (<Waarde1>, <Waarde2>, …); Voorbeeld Vul volgende gegevens in in de tabel leerling: Nummer Voornaam Naam Straat Postcode Plaats
002 Lieven Bauwens Markt 25 8500 Kortrijk
INSERT INTO Leerling (Nummer, Voornaam, Naam, Straat, Postcode, Plaats) VALUES (‘002’, ‘Lieven’, ‘Bauwens’, ‘Markt 25’, ‘8500’, ‘Kortrijk’);
WAARDE VAN EEN KOLOM BIJWERKEN UPDATE SET = ‘<Waarde>’ [WHERE ]; Voorbeeld Wijzig de voornaam van de eerste leerling Ann in Anne UPDATE Leerling SET Voornaam = ‘Anne’ WHERE Nummer = ‘001’;
WAARDE VAN MEERDERE KOLOMMEN BIJWERKEN UPDATE SET = ‘<Waarde1>’ = ‘<Waarde2>’ = ‘<Waarde3>’ … [WHERE ];
RECORDS UIT EEN TABEL VERWIJDEREN DELETE FROM [WHERE ]; Voorbeeld Verwijder het eerste record uit de tabel Leerling DELETE FROM Leerling WHERE Nummer = ‘001’;
INDEX AANMAKEN CREATE INDEX ON (); Voorbeeld CREATE INDEX Klas ON Leerling (Klas);
INDEX VERWIJDEREN DROP INDEX ON ; Voorbeeld Drop INDEX Klas ON Leerling;