Prva uporabna poizvedba
What you'll learn
- pisati poizvedbe z izrecnim seznamom stolpcev za
SELECTin filtrom vrstic prekWHERE - prevesti poslovno vprašanje v SQL po poti: entiteta →
FROM, omejitve →WHERE(zAND), izpis →SELECT, vrstni red →ORDER BY - razložiti, zakaj je
SELECT *slaba praksa v delovnih poizvedbah - preveriti poizvedbo s pripovedovanjem na glas: če se pripoved ujema z izhodiščnim vprašanjem, je poizvedba pomensko pravilna
Zemljevid je preučen — in QUERY spremeni pravila. Doslej si arhiv razgledoval v celoti, kot turist; arhivist dela drugače. Na holopanelu ugasne vse razen ene tabele in pojavi se naloga: zastavi vprašanje tako, da v odgovoru ne bo niti ene odvečne vrstice in niti enega odvečnega stolpca.
Izberemo potrebne stolpce in vrstice
Vzeti vse prek * je priročno za prvo seznanitev, v resničnem delu pa je to, kot bi na blagajno prinesel celo skladišče. Običajno potrebuješ konkretna polja: naštej jih z vejicami za SELECT.
Z vrsticami je enako: namesto cele izložbe izberi le potreben segment prek WHERE. Na primer, prosimo Kotomarket samo za izdelke iz kategorije Knjige:

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 |
Iz poslovnega vprašanja — v poizvedbo
Resnična vprašanja k arhivistu ne pridejo v SQL: »katere knjige so cenejše od poldrugega tisoča?«, »kaj iz elektronike je dražje od 5000?«. Prevod vedno poteka po eni poti:
- Entiteta → tabela. O čem govori vprašanje: o izdelkih, kupcih, naročilih? »Knjige pod 1500« je o izdelkih, torej
FROM products. - Omejitve → WHERE. Vsak pogoj iz vprašanja je samostojen pogoj filtra: kategorija »Knjige«, cena pod 1500.
- Kaj prikazati → SELECT. Kaj človek želi videti v odgovoru? Naziv in ceno — ta dva naštejemo, ostalo je šum.
- Oblika odgovora → ORDER BY. »Od cenenih k dragim« je razvrstitev po ceni.
-- »Katere knjige so cenejše od 1500 in koliko stanejo, od cenenih k dragim?«
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;
Več pogojev se poveže z besedo AND — operatorje filtra bomo podrobno razčlenili v naslednjem poglavju.
In obratna navada dobrega arhivista: preberi dokončano poizvedbo na glas kot stavek. »Iz izdelkov vzemi knjige, cenejše od 1500, prikaži naziv in ceno, razvrsti po ceni« — če se pripoved ujema z izhodiščnim vprašanjem, je poizvedba pomensko pravilna. Če v pripovedi pricurlja »vsi stolpci« ali »cela izložba« — vrni se in oži.
Interview question
Vprašanje z razgovora: zakaj velja SELECT * za slabo prakso v delovnih poizvedbah?
Močan odgovor: prvič, odvečni podatki: omrežje in pomnilnik se trošita na stolpce, ki niso potrebni, baza pa izgubi možnost odgovoriti samo iz indeksa (index-only scan; indeksi — 10. poglavje). Drugič, krhkost: pri dodajanju ali preimenovanju stolpcev se podrejo poročila in koda, ki računata na sestavo in vrstni red stolpcev. Izrecen seznam stolpcev je pogodba poizvedbe; SELECT * je primeren kvečjemu pri interaktivnem raziskovanju podatkov.
SELECT name FROM products WHERE category = 'Книги'?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.