SQL-kielen perusteet

Video on koostettu Toni Taipaluksen kevään 2023 luentonauhoitteista. Videolla mainitut viittaukset demoihin tai tenttiin eivät pidä paikkaansa keväällä 2024. Ajankohtaiset tiedot kurssin suorittamisesta löytyvät etusivulta.

Luku tekstinä

SQL (Structured Query Language tai SQL Query Language) on ANSI/ISO-standardiin perustuva rakenteinen kyselykieli datan etsimiseen ja noutamiseen tietokannasta. Standardin laajentuessa SQL on laajentunut datan etsimisestä mm. datan lisäämiseen, poistamiseen ja muokkaamiseen, tietokannan rakenteen määrittelyyn, käyttöoikeuksien määrittämiseen ja tapahtumankäsittelyn hallintaan.

SQL-kieli on deklaratiivinen: hakulauseella kuvataan sitä, mitä tietoa tietokannasta halutaan noutaa, ja tietokannanhallintajärjestelmän optimoijakomponentti päättää, miten tieto haetaan. Kieli suunniteltiin alunperin siten, että yksinkertaisten operaatioiden suorittaminen olisi vaivatonta ohjelmointikieliin nähden. Alla on esimerkki tietorakenteen sisällön noutamisesta deklaratiivisella (SQL) ja imperatiivisella (Java) kielellä.

SELECT *
FROM taulu;
for (int i = 0; i < taulu.length; i++) {
	system.println(taulu[i]);
}

4.1 Yleistä SQL-kielestä

Relaatiomalli on SQL-standardin teoreettinen perusta, mutta standardi eroaa relaatiomallista joiltakin osin. Esimerkiksi relaatiomalli vaatii, että relaation jokainen rivi on erilainen. SQL:ssä puolestaan taulun rivien ei tarvitse olla erilaisia, jos perusavainta ei määritetä. SQL:n sanotaan olevan relaationaalisesti täydellinen, ts. se on ilmaisuvoimaltaan niin vahva, että kielen avulla voidaan toteuttaa relaatioalgebran mukaiset operaatiot. Alla olevassa taulukossa on kuvattu relaatiomallissa käytetyt termit ja niiden suurpiirteinen vastaavuus SQL:ään.

Relaatiomalli SQL
Relaatio (relation) Taulu (table)
Attribuutti (attribute) Sarake (column)
Monikko (tuple) Rivi (row)

Eri tietokannanhallintajärjestelmät (ts. tuotteet) toteuttavat SQL-standardia omilla tavoillaan tuoden omia toiminnallisia ja syntaktisia lisämausteitaan. Jotkin tuotteet puolestaan jättävät SQL-standardin osia toteuttamatta. Voidaankin sanoa, että jonkin tuotteet SQL-rajapinta on relaatiomallin sovelluksen sovellus. Eri tietokannanhallintajärjestelmien SQL-toteutuksia sanotaan SQL-murteiksi.

SQL-standardin mukaan SQL koostuu neljästä eri kielestä:

  • Datan hallinta (Data Management Language, DML)
  • Rakenteen määrittäminen (Data Definition Language, DDL)
  • Valtuuttaminen (Data Control Language, DCL)
  • Tapahtumanhallinta (Transaction Control Language, TxCL)

Tavallisesti relaatiotietokannanhallintajärjestelmissä (relational database management system, RDBMS) kaikkia neljää kieltä käytetään saman rajapinnan kautta, mutta esimerkiksi käyttöoikeuksien määrittäminen ja tapahtumanhallinta perustuvat vahvasti esitettyyn nelijakoon. Näitä osa-alueita käsitellään myöhemmin.

4.2 SQL-lauseet

SQL-lauseeksi kutsutaan SQL-avainsanoista, tietokantaobjektien nimistä ja muuttujien arvoista koostuvaa kokonaisuutta. Rivityksellä ei ole merkitystä, vaan SQL-lauseen päättää puolipiste ;. Kirjainkoolla ei ole merkitystä: SQL-avainsanat ja tietokantaobjektien nimet voidaan kirjoittaa suuraakkosilla tai pienillä kirjaimilla. Tässä materiaalissa SQL-avainsanat on kirjoitettu suuraakkosilla hyvän käytänteen ja selkeyden vuoksi.

Taulujen, sarakkeiden, esiteltyjen muuttujien ja tarkentimien sekä muiden tietokantaobjektien nimissä voidaan käyttää kirjaimia, numeroita ja alaviivaa. Välilyöntiä ei sallita, eikä nimi voi alkaa numerolla. Myös varattuja SQL-avainsanoja ei sallita nimissä. Yleisiä SQL-avainsanoja ovat mm.

¨
AS COPY FROM IN ON
LIKE NOT MIN MAX NULL
DROP INTO SELECT SUM LOCK
MOVE BEGIN AND OR SET
WHERE TRUE WITH FALSE GRANT
REVOKE DELETE TO OUT USER

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.