SQL
SQL(Structured Query Language,oorspronkelijkSEQUEL[1]) 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.[2][3]
Beschrijving
[bewerken|brontekst bewerken]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.[4]
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).
Werking
[bewerken|brontekst bewerken]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 veldkrediet
in de tabeltblKlanten
kleiner 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]INSERTINTOtabelnaam[veldnaam1[,veldnaam2[,....]]]
VALUES(waarde1[,waarde2[,...]]);
Een tabel lezen
[bewerken|brontekst bewerken]SELECTveldna(a)m(en)
FROMTabelnaam
[WHEREconditie]
[GROUPBYveldnaam[,veldnaam...]]
[HAVINGconditie2]
[ORDERBYveldnaam[ASC|DESC][,veldnaam[ASC|DESC]...]];
Gegevens bijwerken
[bewerken|brontekst bewerken]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;
|
Transacties
[bewerken|brontekst bewerken]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 WORK
ofBEGIN 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.ROLLBACK
ofABORT
: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;
Zie ook
[bewerken|brontekst bewerken]- ↑Interview with Donald D. Chamberlin(pagina's 12 en 16)
- ↑Imperative vs Declarative (kopje SQL)Philip Roberts, 2 april 2013 op latentflip (gearchiveerd)
- ↑Prolog and Natural-Language AnalysisPereira/Shieber, 1987-2002 op mtome
- ↑Don't Tell Anyone: The SQL Standard is Public!modern-sql.com over ontwikkeling van standaard-SQL (1992-2016)