Prvi koristan upit
What you'll learn
- pisati upite s izričitim popisom stupaca iza
SELECTi filtrom redaka krozWHERE - prevesti poslovno pitanje u SQL putem: entitet →
FROM, ograničenja →WHERE(sAND), izlaz →SELECT, redoslijed →ORDER BY - objasniti zašto je
SELECT *loša praksa u radnim upitima - provjeriti upit prepričavanjem naglas: ako se prepričavanje poklopi s polaznim pitanjem, upit je smisleno ispravan
Karta je proučena — i QUERY mijenja pravila. Dosad si arhiv razgledavao u cijelosti, poput turista; arhivist radi drukčije. Na holoploči se gasi sve osim jedne tablice i pojavljuje se zadatak: postavi pitanje tako da se u odgovoru ne nađe ni jedan suvišan redak ni jedan suvišan stupac.
Biramo potrebne stupce i retke
Uzimati sve kroz * zgodno je za prvo upoznavanje, ali u stvarnome radu to je kao da na blagajnu doneseš cijelo skladište. Obično ti trebaju konkretna polja: nabroji ih zarezima iza SELECT.
S recima je isto: umjesto cijelog izloga odaberi samo potreban segment kroz WHERE. Primjerice, zatražimo od Kotomarketa samo proizvode 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 poslovnog pitanja — u upit
Stvarna pitanja arhivistu ne stižu u SQL-u: „koje su knjige jeftinije od tisuću i pol?”, „što je od elektronike skuplje od 5000?”. Prijevod uvijek ide istim putem:
- Entitet → tablica. O čemu je pitanje: o proizvodima, kupcima, narudžbama? „Knjige jeftinije od 1500” — o proizvodima, znači
FROM products. - Ograničenja → WHERE. Svaki uvjet iz pitanja zaseban je uvjet filtra: kategorija „Knjige”, cijena manja od 1500.
- Što pokazati → SELECT. Što čovjek želi vidjeti u odgovoru? Naziv i cijenu — njih i nabrajamo, ostalo je šum.
- Oblik odgovora → ORDER BY. „Od jeftinih prema skupima” — sortiranje po cijeni.
-- „Koje su knjige jeftinije od 1500 i koliko koštaju, od jeftinih prema skupima?”
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;
Nekoliko uvjeta povezuje se riječju AND — operatore filtra detaljno ćemo razložiti u sljedećem poglavlju.
I obrnuta navika dobrog arhivista: pročitaj gotovi upit naglas kao rečenicu. „Iz proizvoda uzmi knjige jeftinije od 1500, pokaži naziv i cijenu, sortiraj po cijeni” — ako se prepričavanje poklopi s polaznim pitanjem, upit je smisleno ispravan. Iskoči li u prepričavanju „svi stupci” ili „cijeli izlog” — vrati se i suzi.
Interview question
Pitanje s razgovora za posao: zašto se SELECT * smatra lošom praksom u radnim upitima?
Snažan odgovor: prvo, suvišni podaci: mreža i memorija troše se na stupce koji ne trebaju, a baza gubi mogućnost odgovoriti samo iz indeksa (index-only scan; indeksi — 10. poglavlje). Drugo, krhkost: pri dodavanju ili preimenovanju stupaca lome se izvještaji i kod koji računa na sastav i redoslijed stupaca. Izričit popis stupaca ugovor je upita; SELECT * je primjeren tek u interaktivnom istraživanju podataka.
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.