Mikä on SQL? Tietokantakieli selitettynä yksinkertaisesti
SQL (Structured Query Language, lausutaan ”S-Q-L” tai ”sequel”) on yleinen kieli relaatiotietokantojen käsittelyyn. Ne tallentavat datan riveistä ja sarakkeista koostuviin tauluihin, kuten Postgres, MySQL, SQLite ja SQL Server. Kysyt SQL:llä datastasi kysymyksiä (”ketkä asiakkaat varasivat tässä kuussa?”) ja lisäät, muutat tai poistat tietueita. Se on ollut käytössä 1970-luvulta lähtien, se on kansainvälinen standardi ja se pyörittää suuren osan maailman sovelluksista.
Miksi SQL on tärkeä, kun rakennat tekoälyllä
Kun pyydät tekoälysovellusrakentajaa ”tallentamaan tilaukset” tai ”näyttämään listan tulevista varauksista”, jonkin täytyy puhua tietokannan kanssa. Useimmissa sovelluksissa se on SQL, joko kirjoitettuna suoraan tai ORM:n generoimana.
Et tarvitse kirjoittaa SQL:ää itse, mutta pieni ymmärrys kannattaa:
- Voit tarkistaa omaa dataasi. Lyhyt kysely vastaa kysymykseen ”montako rekisteröitymistä tällä viikolla?” nopeammin kuin uuden näkymän rakentaminen.
- Voit pyytää parempia raportteja. ”Ryhmittele liikevaihto kuukausittain ja palveluittain” on SQL-ajatus. Sen tunteminen tekee pyynnöstäsi selkeämmän.
- Voit tunnistaa vaaralliset muutokset.
DELETEtaiUPDATEilmanWHERE-lauseketta vaikuttaa jokaiseen riviin. Se kannattaa pysäyttää ennen kuin se ajetaan. - Datasi ei ole lukittu. SQL on yhteinen standardi, joten SQL-tietokannan dataa voivat siirtää ja lukea monet työkalut.
Arkinen vertaus
Ajattele erittäin hyvin järjestettyä kirjastoa, jonka kirjastonhoitaja puhuu vain tarkkaa ja yksinkertaista kieltä.
Et kävele hyllyjen välissä itse. Annat kirjastonhoitajalle kortin: ”Hae kaikki tämän kirjailijan kirjat, jotka on julkaistu vuoden 2010 jälkeen, uusimmat ensin.” Kirjastonhoitaja tuntee rakennuksen perusteellisesti ja palaa juuri noilla kirjoilla siinä järjestyksessä.
SQL on kieli kortissa. Sanot, mitä haluat, et miten se löydetään. Tietokanta selvittää nopeimman reitin itse.
Miten SQL toimii: taulut, rivit ja sarakkeet
Relaatiotietokanta säilyttää datan tauluissa. Jokainen taulu sisältää yhdentyyppisiä asioita, jokainen rivi on yksi tietue ja jokainen sarake on yksi tiedon osa:
customers (asiakkaat)
| id | name | city | |
|---|---|---|---|
| 1 | Lena Ortiz | lena@example.com | Lisbon |
| 2 | Sam Patel | sam@example.com | Leeds |
orders (tilaukset)
| id | customer_id | total | placed_at |
|---|---|---|---|
| 101 | 1 | 42.00 | 2026-09-20 |
| 102 | 2 | 18.50 | 2026-09-22 |
| 103 | 1 | 25.00 | 2026-09-27 |
Sarake customer_id yhdistää jokaisen tilauksen asiakkaaseen. Tuo yhteys tekee tietokannasta ”relaatiollisen”.
Työstetty esimerkki: todellisiin kysymyksiin vastaaminen
1. Datan lukeminen: ”näytä kaikki Lissabonin asiakkaat”:
SELECT name, email
FROM customers
WHERE city = 'Lisbon';
2. Järjestäminen ja rajaus: ”viisi uusinta tilausta”:
SELECT id, total, placed_at
FROM orders
ORDER BY placed_at DESC
LIMIT 5;
3. Taulujen yhdistäminen: ”jokainen tilaus asiakkaan nimen kanssa”:
SELECT o.id, c.name, o.total
FROM orders o
JOIN customers c ON c.id = o.customer_id;
4. Yhteenveto: ”kokonaiskulutus asiakasta kohden”:
SELECT c.name, SUM(o.total) AS total_spent
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.name
ORDER BY total_spent DESC;
Esimerkkidatalla tämä palauttaa Lena Ortizin summalla 67.00 ja Sam Patelin summalla 18.50.
5. Datan muuttaminen:
INSERT INTO customers (name, email, city)
VALUES ('Ana Silva', 'ana@example.com', 'Porto');
UPDATE customers SET city = 'Porto' WHERE id = 1;
DELETE FROM orders WHERE id = 102;
Nämä vastaavat lähes jokaisen sovelluksen neljää perustoimintoa, luontia, lukemista, päivittämistä ja poistamista, jotka tunnetaan nimellä CRUD.
Varoitus: UPDATE customers SET city = 'Porto'; ilman WHERE-lauseketta muuttaa jokaisen asiakkaan. Tarkista aina WHERE ennen kuin ajat muutoksen.
SQL:n pääosat
| Komento | Mitä se tekee |
|---|---|
SELECT | Lukee dataa |
INSERT | Lisää uusia rivejä |
UPDATE | Muuttaa olemassa olevia rivejä |
DELETE | Poistaa rivejä |
CREATE TABLE / ALTER TABLE | Luo tai muuttaa taulun rakennetta |
WHERE | Suodattaa, mihin riveihin vaikutetaan |
JOIN | Yhdistää toisiinsa liittyviä tauluja |
GROUP BY | Tiivistää rivit ryhmiksi, COUNT, SUM ja AVG -funktioilla |
ORDER BY / LIMIT | Järjestää ja rajaa tulokset |
SQL on standardoitu, mutta jokainen tietokanta lisää omia laajennuksiaan, joita kutsutaan murteeksi (dialect). Postgres, MySQL ja SQLite ymmärtävät yllä olevat esimerkit, mutta esimerkiksi päivämääräfunktiot eroavat hieman.
Keskeiset termit
| Termi | Merkitys |
|---|---|
| Kysely (query) | SQL-lause, erityisesti sellainen, joka lukee dataa. |
| Taulu / rivi / sarake | Tyyppi / yksi tietue / yksi ominaisuus. |
| Pääavain (primary key) | Sarake, joka tunnistaa jokaisen rivin yksikäsitteisesti, yleensä id. |
| Vierasavain (foreign key) | Sarake, joka osoittaa toisen taulun riviin, kuten customer_id. |
| Indeksi | Hakurakenne, joka nopeuttaa sarakkeen hakemista huomattavasti. |
| Skeema | Kaikkien taulujen ja sarakkeiden rakenne. |
| Transaktio | Muutosten ryhmä, joka onnistuu tai epäonnistuu yhdessä. |
| SQL-injektio | Hyökkäys, jossa käyttäjän syöte kätketään kyselyyn. Estetään parametrisoiduilla kyselyillä. |
Yleiset väärinkäsitykset
- ”SQL on tietokanta.” SQL on kieli. Postgres, MySQL ja SQLite ovat tietokantoja, jotka puhuvat sitä.
- ”SQL on vanha, joten se on vanhentunut.” Se on kypsä, ei vanhentunut. Nykyaikaiset tietokannat ja datatyökalut käyttävät sitä edelleen, ja uudetkin lisäävät usein SQL-tuen.
- ”Vain kehittäjät voivat käyttää SQL:ää.” Analyytikot, markkinoijat ja perustajat käyttävät yksinkertaisia kyselyitä joka päivä.
- ”SQL ei kestä joustavaa dataa.” Monet SQL-tietokannat tallentavat myös JSONia. Postgresilla on esimerkiksi
jsonb-tyyppi. Katso SQL vs. NoSQL. - ”On ihan ok antaa tekoälyn ajaa mitä tahansa SQL:ää tuotantodatalle.” Lukeminen on vähäriskistä. Muutokset ja poistot elävään dataan vaativat varmuuskopion ja toisen tarkistuksen. Katso miten varmuuskopioit sovelluksesi tietokannan.
Mitä pyytää tekoälysovellusrakentajalta
- ”Näytä minulle tietokantani taulut ja mitä kukin sarake tarkoittaa.”
- ”Kirjoita vain lukeva kysely: montako uutta rekisteröitymistä päivässä viimeisen 30 päivän aikana?”
- ”Ennen kuin ajat yhtäkään UPDATE- tai DELETE-lausetta, näytä kysely ja kuinka monta riviä se vaikuttaa.”
- ”Lisää indeksit sarakkeisiin, joilla suodatamme ja järjestämme useimmin.”
- ”Varmista, että jokainen kysely, joka käyttää käyttäjän syötettä, on parametrisoitu.”
- ”Kääri tilaus- ja maksupäivitykset transaktioon, jotta ne eivät voi onnistua vain osittain.”
SQL Mythexissä
Kun sovelluksesi tarvitsee tallentaa dataa, Mythex lisää projektiin oman Postgres-tietokannan. Pyydä chatissa, esimerkiksi ”tallenna odotuslistan sähköpostit tietokantaan”, tai käytä komentoa /database (Database). Agentti luo taulut ja kirjoittaa kyselyt. Voit pyytää Kysy-tilassa selittämään minkä tahansa kyselyn selkeällä kielellä. Lisää tietokannasta itsestään löydät sivulta mikä Postgres on.
Kysymykset
Mitä SQL on yksinkertaisesti?
SQL (Structured Query Language) on yleinen kieli relaatiotietokantojen käsittelyyn. Sillä kysyt datasi kysymyksiä, kuten ”mitkä tilaukset tehtiin tällä viikolla”, ja lisäät, muutat tai poistat tietueita.
Miten SQL lausutaan?
Sekä ”S-Q-L” (kirjaimet erikseen) että ”sequel” ovat yleisiä ja oikeita. Kieli kulki alun perin nimellä SEQUEL, mistä toinen lausumistapa tulee.
Onko SQL ohjelmointikieli?
SQL on datan hallintaan suunniteltu kyselykieli. Kuvailet, minkä tuloksen haluat, ja tietokanta selvittää, miten se saadaan. Sitä ei käytetä kokonaisten sovellusten rakentamiseen yksin, mutta se on osa lähes jokaista sovellusta, joka käyttää relaatiotietokantaa.
Onko SQL vaikea oppia?
Perusteet ovat helppoja: SELECT, WHERE, ORDER BY, INSERT, UPDATE ja DELETE kattavat useimmat arkitarpeet ja lukeutuvat lähes kuin englantia. Liitokset (join), ryhmittely ja suorituskyvyn viritys vievät kauemmin.
Pitääkö minun osata SQL, jotta voin rakentaa sovelluksen tekoälyllä?
Ei. Tekoälysovellusrakentaja kirjoittaa SQL:n tai tietokantakoodin puolestasi. Pienikin ymmärrys auttaa tarkistamaan datasi, pyytämään raportteja ja huomaamaan riskialttiit muutokset ennen kuin ne tapahtuvat.