Wat is SQL?

De standaardtaal voor het definiëren van tabellen, het zoeken, toevoegen, wijzigen en verwijderen van gegevens en het regelen van rechten in relationele databases. Ze is gestandaardiseerd door ISO/IEC (in Japan ook als JIS). Tot haar statements behoren SELECT, INSERT, UPDATE, DELETE, CREATE TABLE en GRANT.

Japanse benaming: SQL

“SQL” komt voor in 15 oefenvragen uit 3 onderwerpen, bijv. Basis van databases, Basis van informatiebeveiliging, LSI-ontwerpflow en EDA.

Vakgebied: Basis van databases

Soorten SQL-statements

SQL-statements vallen naar hun rol grofweg in drie groepen uiteen. De datadefinitietaal (DDL), zoals CREATE, ALTER en DROP, definieert structuren zoals tabellen, views en indexen. De datamanipulatietaal (DML), zoals SELECT, INSERT, UPDATE en DELETE, bewerkt de gegevens in tabellen. De datacontroletaal (DCL), zoals GRANT en REVOKE, regelt rechten. COMMIT, dat een transactie definitief maakt, en ROLLBACK, dat haar ongedaan maakt, worden soms tot DCL gerekend en soms apart behandeld als statements voor transactiebeheer.

De clausules van het SELECT-statement en hun verwerkingsvolgorde

Een SELECT-statement wordt geschreven door clausules op te sommen, zoals in SELECT kolommen FROM tabel WHERE voorwaarde GROUP BY kolommen HAVING voorwaarde ORDER BY kolommen. Anders dan de geschreven volgorde is de verwerking gemakkelijker te begrijpen als FROM (tabellen kiezen en joinen), WHERE (rijen selecteren), GROUP BY (groepen vormen), HAVING (groepen selecteren), SELECT (kolommen nemen en aggregatiefuncties berekenen) en ORDER BY (sorteren). Daarom kunnen aggregatiefuncties niet in WHERE staan en horen voorwaarden op groepen in HAVING.

Een declaratieve taal, en de omgang met NULL

SQL is een declaratieve taal waarin je schrijft welk resultaat je wilt, en de optimizer van het DBMS bepaalt de stappen om het te verkrijgen. Voorzichtigheid is geboden met NULL, dat een onbekende waarde voorstelt. Een vergelijking met NULL is waar noch onwaar (onbekend), dus er wordt op getest met IS NULL in plaats van = NULL. Aggregatiefuncties zoals SUM en AVG negeren NULL; COUNT(*) telt rijen, terwijl COUNT(kolom) de rijen telt waarin die kolom niet NULL is.

Nu oefenen: vragen over SQL

SQL-statements worden ingedeeld in de datadefinitietaal (DDL), de datamanipulatietaal (DML) en de datacontroletaal (DCL). Welke wordt als DDL ingedeeld?

  1. AUPDATE Medewerker SET Afdeling = 'Ontwikkeling' WHERE MedewerkerNr = 5
  2. BCREATE TABLE Afdeling (AfdelingID INTEGER PRIMARY KEY, Afdelingsnaam CHAR(10))
  3. CGRANT SELECT ON Medewerker TO tanaka
Antwoord en toelichting tonen

Antwoord: B. CREATE TABLE Afdeling (AfdelingID INTEGER PRIMARY KEY, Afdelingsnaam CHAR(10))

DDL-statements (Data Definition Language) definiëren de structuur van een database, zoals tabellen, views en indexen, en omvatten CREATE, ALTER en DROP. DML-statements (Data Manipulation Language) bewerken de gegevens in tabellen en omvatten SELECT, INSERT, UPDATE en DELETE. DCL-statements (Data Control Language) regelen zaken zoals rechten en omvatten GRANT, dat een gebruiker rechten geeft, en REVOKE, dat ze weer intrekt. COMMIT, dat een transactie definitief maakt, en ROLLBACK, dat haar ongedaan maakt, worden soms tot DCL gerekend en soms apart behandeld als statements voor transactiebeheer. Van de keuzes is CREATE TABLE, dat een tabel aanmaakt, DDL.

Wat is het resultaat als in SQL DELETE FROM Medewerker zonder WHERE-clausule wordt uitgevoerd?

  1. AAlle rijen van de tabel Medewerker worden verwijderd, en er blijft een lege tabel over
  2. BDe tabel zelf wordt verwijderd, en ook de definitie ervan verdwijnt
  3. COmdat er geen WHERE-clausule is, treedt er een fout op en wordt er niets verwijderd
Antwoord en toelichting tonen

Antwoord: A. Alle rijen van de tabel Medewerker worden verwijderd, en er blijft een lege tabel over

DELETE is een DML-statement dat rijen uit een tabel verwijdert. Met een voorwaarde in een WHERE-clausule worden alleen de rijen verwijderd die eraan voldoen; wordt de WHERE-clausule weggelaten, dan wordt elke rij verwijderd. Ook nadat DELETE alle rijen heeft verwijderd, blijft de definitie van de tabel (kolomnamen, typen en beperkingen) bestaan, dus kunnen er met INSERT weer rijen worden toegevoegd. De tabel zelf inclusief definitie verwijderen gebeurt met het DDL-statement DROP TABLE Medewerker. Hetzelfde geldt voor UPDATE: wie de WHERE-clausule vergeet, wijzigt elke rij, dus het is belangrijk de voorwaarde vóór het uitvoeren te controleren. Binnen een transactie kan de wijziging vóór COMMIT met ROLLBACK ongedaan worden gemaakt.

Veelgestelde vragen

Wat is het verschil tussen de WHERE- en de HAVING-clausule in SQL?

De WHERE-clausule is een voorwaarde op afzonderlijke rijen vóór het groeperen, en aggregatiefuncties kunnen er niet in staan. De HAVING-clausule is een voorwaarde op de groepen die GROUP BY vormt, en kan aggregatiefuncties gebruiken, zoals in HAVING SUM(Bedrag) >= 1000.

Hoe vind je in SQL rijen met NULL?

Schrijf WHERE kolom IS NULL. WHERE kolom = NULL selecteert geen enkele rij, omdat een vergelijking met NULL nooit waar is. Rijen die niet NULL zijn, worden geselecteerd met IS NOT NULL.

“SQL” in de toelichting

Vragen met “SQL” (15)

  1. SQL-statements worden ingedeeld in de datadefinitietaal (DDL), de datamanipulatietaal (DML) en de datacontroletaal (DCL). Welke wordt als DDL ingedeeld?
  2. Wat is het resultaat als in SQL DELETE FROM Medewerker zonder WHERE-clausule wordt uitgevoerd?
  3. Uit de tabel Medewerker (MedewerkerNr, Afdeling, Salaris) moeten de afdelingen met een gemiddeld salaris van 300 of meer worden opgevraagd, samen met dat gemiddelde. Welk SQL-statement is juist?
  4. Uit de tabel Klant (KlantID, Naam) en de tabel Bestelling (BestelID, KlantID, Bedrag) moeten de namen worden opgevraagd van klanten die nog nooit iets hebben besteld. Welk SQL-statement is juist?
  5. Welk antwoord noemt van de isolatieniveaus die de SQL-standaard definieert juist de verschijnselen die bij READ COMMITTED kunnen optreden?
  6. Welke hardwarebeschrijvingstaal wordt vooral gebruikt bij RTL-ontwerp?
  7. In een webapplicatie kan iemand zonder het wachtwoord te kennen inloggen door in het wachtwoordveld van het inlogscherm een tekenreeks zoals ' OR '1'='1 in te voeren. Hoe heet deze aanval?
  8. Waarom worden prepared statements met placeholders (geparametriseerde query's) als tegenmaatregel tegen SQL-injectie als fundamenteler beschouwd dan het verwijderen van gevaarlijke tekens uit de invoer?
  9. Welke term uit de terminologie van relationele databases komt overeen met één rij van een tabel (relatie)?
  10. Aan welke voorwaarde moet in een tabel van een relationele database de kolom (of combinatie van kolommen) voldoen die als primaire sleutel is aangewezen?
  11. De tabel Inschrijving (StudentNr, VakNr, Cijfer) legt vast welke student welk vak heeft gevolgd en met welk cijfer. Eén student volgt meerdere vakken, en één vak wordt door meerdere studenten gevolgd. Als dezelfde student zich nooit twee keer voor hetzelfde vak inschrijft, wat is dan een geschikte primaire sleutel voor deze tabel?
  12. De kolom Punten van de tabel Toets bevat vier waarden: 80, NULL, 70, 90 (NULL betekent dat de persoon de toets niet heeft gemaakt). Wat is het resultaat van SELECT AVG(Punten) FROM Toets?
  13. De voorraad van een product in de tabel Voorraad is 10. Transactie T1 leest de voorraad en schrijft de waarde min 3 terug, en T2 leest de voorraad en schrijft de waarde min 5 terug. Als ze zonder locks worden uitgevoerd in de volgorde T1 leest, T2 leest, T1 schrijft, T2 schrijft, wat is dan de uiteindelijke voorraad?
  14. Welke beschrijving van een dirty read, een van de problemen die optreden als transacties gelijktijdig lopen, is juist?
  15. Transactie T1 voerde SELECT COUNT(*) FROM Bestelling WHERE Bedrag >= 1000 uit en kreeg 8. Direct daarna voegde T2 met INSERT een rij toe voor een bestelling met een bedrag van 2000 en voerde een commit uit. Toen T1 hetzelfde SELECT-statement opnieuw uitvoerde, kreeg het 9. Welk verschijnsel is dit?

Verwante termen

Transactie Isolatieniveau Primaire sleutel SQL-injectie Relationele database View (databaseview) Index (databaseindex) Hardwarebeschrijvingstaal (HDL) RTL (register transfer level) Verilog

Naar de woordenlijst