První užitečný dotaz
What you'll learn
- psát dotazy s explicitním seznamem sloupců po
SELECTa filtrem řádků přesWHERE - převádět byznysovou otázku do SQL po trase: entita →
FROM, omezení →WHERE(sAND), výstup →SELECT, pořadí →ORDER BY - vysvětlit, proč je
SELECT *špatná praxe v ostrých dotazech - ověřit dotaz převyprávěním nahlas: když převyprávění odpovídá původní otázce, je dotaz významově správný
Mapa je nastudovaná — a QUERY mění pravidla. Doteď sis prohlížel archiv celý jako turista; archivář pracuje jinak. Na holopanelu zhasne všechno kromě jedné tabulky a objeví se zadání: polož otázku tak, aby v odpovědi nebyl jediný řádek navíc a jediný sloupec navíc.
Vybíráme potřebné sloupce a řádky
Brát všechno přes * se hodí pro první seznámení, ale ve skutečné práci je to jako přitáhnout k pokladně celý sklad. Obvykle potřebuješ konkrétní pole: vyjmenuj je čárkami po SELECT.
S řádky je to stejné: místo celé výlohy vyber jen potřebný segment přes WHERE. Například si od «Kotomarketu» vyžádáme jen zboží z kategorie Knihy:

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 |
Z byznysové otázky — do dotazu
Opravdové otázky nepřicházejí k archiváři v SQL: «které knihy jsou levnější než patnáct set?», «co z elektroniky je dražší než 5000?». Překlad jde vždy po jedné trase:
- Entita → tabulka. O čem je otázka: o zboží, zákaznících, objednávkách? «Knihy levnější než 1500» je o zboží, takže
FROM products. - Omezení → WHERE. Každá podmínka z otázky je samostatná podmínka filtru: kategorie «Knihy», cena nižší než 1500.
- Co ukázat → SELECT. Co chce člověk vidět v odpovědi? Název a cenu — ty taky vyjmenujeme, zbytek je šum.
- Podoba odpovědi → ORDER BY. «Od levných k drahým» je řazení podle ceny.
-- «Které knihy jsou levnější než 1500 a kolik stojí, od levných k drahým?»
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;
Několik podmínek se spojuje slovem AND — operátory filtru podrobně probereme v příští kapitole.
A opačný návyk dobrého archiváře: přečti si hotový dotaz nahlas jako větu. «Ze zboží vzít knihy levnější než 1500, ukázat název a cenu, seřadit podle ceny» — když převyprávění odpovídá původní otázce, je dotaz významově správný. Pokud v převyprávění vyplave «všechny sloupce» nebo «celá výloha» — vrať se a zužuj.
Interview question
Otázka z pohovoru: proč se SELECT * považuje za špatnou praxi v ostrých dotazech?
Silná odpověď: zaprvé zbytečná data: síť a paměť se utrácejí na sloupce, které nejsou potřeba, a databáze ztrácí možnost odpovědět jen z indexu (index-only scan; indexy — Kapitola 10). Zadruhé křehkost: při přidání nebo přejmenování sloupců se lámou reporty a kód, který počítá se sadou a pořadím sloupců. Explicitní seznam sloupců je kontrakt dotazu; SELECT * se hodí leda v interaktivním zkoumání dat.
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.