Ensimmäinen hyödyllinen kysely
What you'll learn
- kirjoittamaan kyselyitä, joissa on eksplisiittinen sarakelista
SELECT-kohdan jälkeen ja rivisuodatinWHERE-kohdan kautta - kääntämään bisneskysymyksen SQL:ksi reittiä pitkin: entiteetti →
FROM, rajoitukset →WHERE(AND-sanalla), tuloste →SELECT, järjestys →ORDER BY - selittämään, miksi
SELECT *on huono käytäntö tuotantokyselyissä - tarkistamaan kyselyn kertomalla sen ääneen: jos kertaus osuu alkuperäiseen kysymykseen, kysely on merkitykseltään oikein
Kartta on opittu – ja QUERY muuttaa säännöt. Tähän asti olet katsellut arkistoa kokonaisuutena kuin turisti; arkistoija työskentelee toisin. Holopaneelista sammuu kaikki yhtä taulua lukuun ottamatta, ja eteen ilmestyy tehtävä: esitä kysymyksesi niin, ettei vastaukseen jää yhtään ylimääräistä riviä eikä yhtään ylimääräistä saraketta.
Valitsemme tarvittavat sarakkeet ja rivit
Kaiken hakeminen *:llä on kätevää ensituttavuudessa, mutta oikeassa työssä se on kuin toisi koko varaston kassalle. Yleensä tarvitset tiettyjä kenttiä: luettele ne pilkuilla erotettuina SELECT-kohdan jälkeen.
Rivien kanssa sama juttu: koko hyllyn sijaan valitse vain tarvittava segmentti WHERE-kohdalla. Pyydetään esimerkiksi Kotomarketilta vain Kirjat-kategorian tuotteet:

Choosing the columns and rows you need
Grabbing everything with * is convenient for a first look, but in real work it’s like hauling the entire warehouse up to the checkout. Usually you need specific fields: list them, comma-separated, after SELECT.
It’s the same with rows: instead of the whole storefront, pick only the segment you need via WHERE. For example, let’s ask Kotomarket for only the products in the Books category:
| name | price |
|---|---|
| SQL для профи | 1290.00 |
| Чистый код | 1490.00 |
| Алгоритмы на практике | 1690.00 |
Bisneskysymyksestä kyselyksi
Todelliset kysymykset eivät tule arkistoijalle SQL:nä: ”mitkä kirjat ovat alle puolentoista tuhannen?”, ”mitkä elektroniikkatuotteet maksavat yli 5000?”. Käännös etenee aina yhtä reittiä pitkin:
- Entiteetti → taulu. Mistä kysymys on: tuotteista, ostajista, tilauksista? ”Kirjat alle 1500” on tuotteista, eli
FROM products. - Rajoitukset → WHERE. Jokainen kysymyksen ehto on erillinen suodatusehto: kategoria ”Kirjat”, hinta alle 1500.
- Mitä näyttää → SELECT. Mitä ihminen haluaa nähdä vastauksessa? Nimen ja hinnan – ne luettelemme, muu on kohinaa.
- Vastauksen muoto → ORDER BY. ”Halvimmista kalliimpiin” – lajittelu hinnan mukaan.
-- ”Mitkä kirjat ovat alle 1500 ja paljonko ne maksavat, halvimmista kalliimpiin?”
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;
Useat ehdot yhdistetään sanalla AND – käymme suodatusoperaattorit perusteellisesti läpi seuraavassa luvussa.
Ja hyvän arkistoijan käänteinen tapa: lue valmis kysely ääneen lauseena. ”Tuotteista ota kirjat alle 1500, näytä nimi ja hinta, lajittele hinnan mukaan” – jos kertaus osuu alkuperäiseen kysymykseen, kysely on merkitykseltään oikein. Jos kertaukseen pulpahtaa ”kaikki sarakkeet” tai ”koko hylly” – palaa takaisin ja kavenna.
Interview question
Haastattelukysymys: miksi SELECT * katsotaan huonoksi käytännöksi tuotantokyselyissä?
Vahva vastaus: ensinnäkin ylimääräinen data: verkkoa ja muistia kuluu sarakkeisiin, joita ei tarvita, ja tietokanta menettää mahdollisuuden vastata pelkän indeksin perusteella (index-only scan; indeksit – luku 10). Toiseksi hauraus: kun sarakkeita lisätään tai nimetään uudelleen, hajoavat raportit ja koodi, jotka luottavat sarakkeiden joukkoon ja järjestykseen. Eksplisiittinen sarakelista on kyselyn sopimus; SELECT * sopii korkeintaan interaktiiviseen datan tutkimiseen.
SELECT name FROM products WHERE category = 'Книги' näyttää?The index has been read: you know what’s in the five tables and which threads stitch them together. QUERY dims the map, and the next clearance level lights up on the holopanel — the reading terminal.
QUERY: Remember the cardinal property of this place: the archive answers only well-formed questions. From the next clearance on, we learn to ask precisely.