English version of the materials are work in progress!
Expect bugs, typos, and other issues. The English version is expected to be completed during spring 2026.
Basics of SQL
SQL (Structured Query Language) is a structured query language based on the ANSI/ISO standard for searching and retrieving data from a database. As the standard has expanded, SQL has expanded from searching data to e.g. inserting, deleting, and modifying data, defining the database structure, defining access rights, and managing transaction processing.
The SQL language is declarative: the language describes what the desired result is (for example, what information is wanted from the database). Below is the simplest example of retrieving the content of a data structure with SQL:
The query only tells that all rows and columns in the table table are wanted to be retrieved. It remains the task of the database management system to decide which algorithm is best to execute the query.
Compare this to a corresponding query in a so-called imperative language (e.g. C#):
In imperative languages, on the other hand, it remains the writer's task to think about and implement the algorithm based on which the information is retrieved. SQL is fundamentally suitable as a declarative language for controlling database management systems: the same SQL query can work equally well in different database management systems, and learning SQL does not require deep programming skills or knowledge of physical models.
SQL Language and the Relational Model
The relational model is the theoretical basis of the SQL standard. For relational model structures, such as relations, attributes, tuples, and integrity constraints (see Chapter 3.1), there are direct equivalents in the SQL standard. SQL is said to be relationally complete: it is so strong in its expressive power that operations according to relational algebra can be implemented with the language.
The SQL standard differs from the relational model in some respects. First, the SQL standard uses slightly more practical concepts to describe the structures of the relational model. The table below describes the terms used in the relational model and their rough correspondence to SQL.
| Relational Model | SQL |
|---|---|
| Relation | Table |
| Attribute | Column |
| Tuple | Row |
In addition to this, the SQL standard partially differs functionally from the relational model. For example, the relational model requires that every row of a relation is different (Chapter 3.1, Core Properties of the Relational Model). In SQL, on the other hand, table rows do not have to be different if a primary key is not defined.
Different database management systems also implement the SQL standard in their own ways, bringing their own functional and syntactic additional flavors, and some products even leave parts of the SQL standard unimplemented. For example, in SQLite, referential integrity brought by foreign keys (Chapter 3.1) can be able to be turned off on a database basis. As another example, SurrealDB extends the SQL language by mixing in a query language specific to graph databases. SQL implementations of different database management systems are called SQL dialects.
According to the SQL standard, the SQL language consists of four different sublanguages:
- Data Manipulation Language (DML)
- Data Definition Language (DDL)
- Data Control Language (DCL)
- Transaction Control Language (TxCL)
Usually, all four languages are used through the same interface, but for example, defining access rights and transaction management are strongly based on the presented four-way division. These areas are discussed in later chapters.
SQL Statements
An entity consisting of SQL keywords, names of database objects, and variable values is called an SQL statement. Basic rules for SQL statements are:
- Line breaks do not matter, i.e., the same SQL statement can be split over multiple lines.
- An SQL statement is always ended by a semicolon (
;). - Case sensitivity does not matter:
SELECTandselectare interpreted in the same way. - Only letters, numbers, and underscores (
_) can be used in the names of tables, columns, and other database objects. Spaces are not allowed, and the name cannot start with a number. - Names of tables, columns, and other database objects must not be keywords used in the SQL language.
Common SQL keywords include e.g.
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 |
SQL-kielen perusteet
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: kielellä kuvataan sitä, mikä on haluttu lopputulos (esimerkiksi mitä tietoa halutaan tietokannasta). Alla on yksinkertaisin esimerkki tietorakenteen sisällön noutamisesta SQL-kielellä:
Kysely kertoo ainoastaan, että taulusta taulu halutaan hakea kaikki siinä olevat rivit ja sarakkeet. Tietokannanhallintajärjestelmän tehtäväksi jää päättää, millä algoritmilla kysely saadaan suoritettua parhaiten.
Vertaa tätä vastaavaan kyselyyn ns. imperatiivisella kielellä (esim. C#):
Imperatiivissa kielissä puolestaan kirjoittajan tehtäväksi jää miettimään ja toteuttamaan algoritmi, jonka perusteella tieto haetaan. SQL onkin deklaratiivisena kielenä sopiva tietokannanhallintajärjestelmien ohjaamiseen: sama SQL-kielen kysely voi toimia yhtä hyvin eri tietokannanhallintajärjestelmissä, eikä SQL-kielen oppimiseen tarvita syvää ohjelmoinnin taitoa taikka fyysisten mallien tuntemista.
SQL-kieli ja relaatiomalli
Relaatiomalli on SQL-standardin teoreettinen perusta. Relaatiomallin rakenteille, kuten relaatioille, attribuuteille, monikoille ja eheysrajoitteille (ks. Luku 3.1) on olemassa suorat vastineet SQL-standardissa. SQL:n sanotaan olevan relaationaalisesti täydellinen: se on ilmaisuvoimaltaan niin vahva, että kielen avulla voidaan toteuttaa relaatioalgebran mukaiset operaatiot.
SQL-standardi eroaa relaatiomallista joltain osin. Ensiksi, SQL-standardissa käytetään hieman käytännönläheisempiä käsitteitä kuvaamaan relaatiomallin rakenteita. 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) |
Tämän lisäksi SQL-standardi osittain poikkeaa toiminnallisesti relaatiomallista. Esimerkiksi relaatiomalli vaatii, että relaation jokainen rivi on erilainen (Luku 3.1, Relaatiomallin ydinominaisuudet). SQL:ssä puolestaan taulun rivien ei tarvitse olla erilaisia, jos perusavainta ei määritetä.
Eri tietokannanhallintajärjestelmät toteuttavat lisäksi SQL-standardia omilla tavoillaan tuoden omia toiminnallisia ja syntaktisia lisämausteitaan, ja jotkut tuotteet jopa jättävät osia SQL-standardista toteuttamatta. Esimerkiksi SQLite:ssa viiteavainten tuoma viite-eheys (Luku 3.1) voidaan pystyä kytkemään pois päältä tietokantakohtaisesti. Toisena esimerkkinä, SurrealDB laajentaa SQL-kieltä sekoittamalla siihen graafitietokkannoille ominaista kyselykieltä. Eri tietokannanhallintajärjestelmien SQL-toteutuksia sanotaan SQL-murteiksi.
SQL-standardin mukaan SQL-kieli koostuu neljästä eri alikielestä:
- Datan hallintakieli (Data Management Language, DML)
- Rakenteen määrittämisen kieli (Data Definition Language, DDL)
- Valtuuttamisen kieli (Data Control Language, DCL)
- Tapahtumanhallintakieli (Transaction Control Language, TxCL)
Tavallisesti 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öhemmissä luvuissa.
SQL-lauseet
SQL-lauseeksi kutsutaan SQL-avainsanoista, tietokantaobjektien nimistä ja muuttujien arvoista koostuvaa kokonaisuutta. Perussääntöjä SQL-lauseille ovat:
- Rivityksellä ei ole väliä, eli sama SQL-lause voi jakaa usealle riville.
- SQL-lauseen päättää aina puolipiste (
;). - Kirjainkoolla ei ole merkitystä:
SELECTjaselecttulkitaan samalla tavalla. - Taulujen, sarakkeiden, ja muiden tietokantaobjektien nimissä voidaan käyttää vain kirjaimia, numeroita ja alaviivaa (
_). Välilyöntiä ei sallita, eikä nimi voi alkaa numerolla. - Taulujen, sarakkeiden ja muiden tietokantaobjektien nimet eivät saa olla SQL-kielessä käytettyjä avainsanoja.
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.