Naar inhoud springen

SQL

Uit Wikipedia, de vrije encyclopedie

SQL(Structured Query Language) is eenANSI/ISO-standaardtaalvoor een relationeeldatabasemanagementsysteem(DBMS). Het is een gestandaardiseerde taal die gebruikt kan worden voor taken zoals het bevragen en het aanpassen vangegevensin eenrelationele database.SQL kan met vrijwel alle moderne relationele databaseproducten worden gebruikt.

SQL is eenvierde-generatie-taal(G4-taal) omdat ze nietimperatiefmaardeclaratiefis, zoalsProlog.[1][2]

SQL is gebaseerd op derelationele algebraen werd in de loop van de jaren zeventig ontwikkeld doorIBM(San José). Sinds het ontstaan van SQL hebben verschillende SQL-versies het levenslicht gezien. In de loop van de jaren 80 werd SQL gestandaardiseerd, gevolgd door renovaties als SQL-92, SQL-99, SQL-2003 en verder.[3]

Bijna elk DBMS heeft zijn eigen extra functies toegevoegd aan SQL-92. Dit maakt dat computerprogramma's waarbij de database-interface werd geschreven met behulp van SQL niet noodzakelijk zonder problemen kunnen worden gemigreerd van de ene naar de andere SQL-compatibele database. In vele gevallen werd door de ontwikkelaar van de software een SQL-functie gebruikt die alleen bestaat in de SQL-implementatie van één specifiek DBMS.

In eerste instantie werd SQL ontwikkeld als een vraagtaal voor deeindgebruiker.Het idee was datbusinessmanagersSQL zouden gebruiken om bedrijfsgegevens te analyseren. Achteraf is gebleken dat SQL te complex is om door eindgebruikers toegepast te worden. Het gebruik van SQL impliceert immers een volledige kennis van de structuur van de te ondervragen database. Tegenwoordig benadert deprogrammeurvan de applicatie de database met SQL via eenapplication programming interface(API), zoalsODBCofADO(Windows),JDBC(Java) of een productspecifieke API. SQL is dus in essentie omgevormd van een taal voor eindgebruikers tot een brug tussen applicaties en databases.

SQL kan worden opgedeeld in vier onderdelen: de query language, dedata manipulation language(DML), dedata control language(DCL) en dedata definition language(DDL).

SQL maakt voor de communicatie met het DBMS gebruik van zogenaamdequery's. Een query is eenASCII-tekenreeks en is een opdracht die naar het DBMS wordt verzonden. Het DBMS zal de opdracht interpreteren en uitvoeren en stuurt eventueel gegevens terug naar het opdrachtgevende programma.

Een SQL-query ziet er bijvoorbeeld als volgt uit:

SELECT*
FROMtblKlanten
WHEREtblKlanten.krediet<0;

De betekenis van bovenstaande query is als volgt:

  • SELECT:hierachter wordt geplaatst welke velden (kolommen) worden geselecteerd; * betekent 'alle velden'.
  • FROM:hierachter komt de naam van de tabel, in dit gevaltblKlanten.
  • WHERE:hierachter komen veldnamen met waarden waaraan de velden moeten voldoen.
    In dit geval: alle records waarvan het veldkredietin de tabeltblKlantenkleiner is dan 0.

Met SQL is het mogelijk om tabellen aan te maken, te wijzigen, te vullen en te verwijderen.

Een tabel maken

[bewerken|brontekst bewerken]
CREATETABLEtabelnaam(
veldNaam1veldtype1[NOTNULL][PRIMARYKEY|UNIQUE]
,veldNaam2veldtype2[NOTNULL][PRIMARYKEY|UNIQUE]
[,...]);

Een tabel verwijderen

[bewerken|brontekst bewerken]
DROPTABLEtabelnaam;

Een tabel vullen

[bewerken|brontekst bewerken]
Zie ook:Insert (SQL)
INSERTINTOtabelnaam[veldnaam1[,veldnaam2[,....]]]
VALUES(waarde1[,waarde2[,...]]);

Een tabel lezen

[bewerken|brontekst bewerken]
Zie ook:Select (SQL)
SELECTveldna(a)m(en)
FROMTabelnaam
[WHEREconditie]
[GROUPBYveldnaam[,veldnaam...]]
[HAVINGconditie2]
[ORDERBYveldnaam[ASC|DESC][,veldnaam[ASC|DESC]...]];

Gegevens bijwerken

[bewerken|brontekst bewerken]
Zie ook:Update (SQL)
UPDATE<tabel-naam>SETveldnaam=waarde,veldnaam2=waarde2WHEREconditie;

SQL-sleutelwoorden staan in HOOFDletters, niet verplichte code tussen [ en ], herhalingen met...

SQL-uitdrukkingen

[bewerken|brontekst bewerken]
uitdrukking beschrijving query
CREATE DATABASE nieuwe database CREATE DATABASE database_naam;
CREATE TABLE nieuwe tabel CREATE TABLE tabel_naam(kolom1 text, kolom2 integer [,...] );
INSERT nieuwe gegevens in de tabel toevoegen INSERT INTO tabelnaam (kolom1, kolom2 [,...] ) VALUES (waarde1, waarde2 [,...] );
SELECT gegevens uit een tabel selecteren SELECT kolom1, kolom2 [,...] FROM tabelnaam where conditie;
UPDATE bestaande rijen (Engels:rows) wijzigen UPDATE tabelnaam SET kolom1 = waarde1 [,...] WHERE conditie;
DELETE rijen wissen uit een tabel DELETE FROM tabelnaam WHERE conditie;
TRUNCATE allerijen wissen uit een tabel TRUNCATE TABLE tabelnaam;
DROP tabel geheel wissen uit de database DROP TABLE tabelnaam;

Eentransactiebestaat uit een reeks van een of meer databasebewerkingen. De transactie maakt mogelijk dat zo'n reeks bewerkingen ofwel allemaal, ofwel geen van alle worden doorgevoerd.

Een voorbeeld is de database van een bank, waarbij bij een overboeking eerst het saldo van rekening A met een SQL-opdracht wordt verlaagd, en daarna het saldo van rekening B met een SQL-opdracht wordt verhoogd. Als er een fout plaatsvindt nádat het saldo op rekening A is verlaagd, maar vóordat het saldo op rekening B is verhoogd, 'verdwijnt' het bedrag. De database is dan "inconsistent". Deze ongewenste toestand kan worden voorkomen door de twee SQL-opdrachten binnen een transactie af te werken.

Een transactie kan expliciet worden gestart (BEGIN WORKofBEGIN TRANSACTION) of impliciet bij de eerste lees- of schrijfopdracht sinds de voorgaande transactie (of sinds het sessiebegin).

Er zijn twee commando's om een transactie af te sluiten:

  • COMMIT:De transactie wordt doorgevoerd. Als het commit-commando door de database succesvol wordt uitgevoerd dan zijn de bewerkingen definitief in de database opgeslagen. Sommige statements bevatten een impliciete commit. Soms is het mogelijk zelf een impliciete commit te definiëren.
  • ROLLBACKofABORT:De transactie wordt niet doorgevoerd. De gegevens houden de waarde die ze hadden vóór de transactie. Bij sommige databases wordt automatisch een rollback uitgevoerd als er een fout optreedt gedurende een transactie.

De syntaxis en manier van werken verschillen enigszins per databasesysteem zoalsDB2,MySQL,Oracle,PostgreSQL,SQLiteen andere.

Zo gaat in Oracle het uitvoeren van DDL (gegevensdefinitietaal) impliciet gepaard aan een commit, en zo'n opdracht kan dus niet worden teruggedraaid (geROLLBACKt). In PostgreSQL daarentegen kunnen DDL-opdrachten in een transactie worden uitgevoerd en vervolgens ongedaan gemaakt via ROLLBACK.

BEGINWORK;
UPDATEtabelSETkolom1=waarde1,kolom2=waarde2WHEREkolomID=eenID;
COMMIT;