Pirmoji naudinga užklausa
What you'll learn
- rašyti užklausas su aiškiu stulpelių sąrašu po
SELECTir eilučių filtru perWHERE - versti verslo klausimą į SQL maršrutu: esybė →
FROM, apribojimai →WHERE(suAND), išvedimas →SELECT, tvarka →ORDER BY - paaiškinti, kodėl
SELECT *— bloga praktika darbinėse užklausose - patikrinti užklausą perpasakojant balsu: perpasakojimas sutapo su pradiniu klausimu — užklausa teisinga pagal prasmę
Žemėlapis išstudijuotas — ir QUERY keičia taisykles. Iki šiol tu apžiūrinėjai archyvą visą, kaip turistas; archyvaras dirba kitaip. Holopanelėje užgęsta viskas, išskyrus vieną lentelę, ir pasirodo užduotis: užduok klausimą taip, kad atsakyme neatsirastų nė vienos nereikalingos eilutės ir nė vieno nereikalingo stulpelio.
Renkamės reikalingus stulpelius ir eilutes
Imti viską per * patogu pirmai pažinčiai, bet realiame darbe tai tarsi atnešti prie kasos visą sandėlį. Paprastai tau reikia konkrečių laukų: išvardyk juos kableliais po SELECT.
Su eilutėmis taip pat: vietoj visos vitrinos išsirink tik reikalingą segmentą per WHERE. Pavyzdžiui, paprašykim „Kotomarket“ tik prekių iš kategorijos Knygos:

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 |
Iš verslo klausimo — į užklausą
Tikri klausimai pas archyvarą ateina ne SQL kalba: „kokios knygos pigesnės nei pusantro tūkstančio?“, „kas iš elektronikos brangiau nei 5000?“. Vertimas visada eina vienu maršrutu:
- Esybė → lentelė. Apie ką klausimas: apie prekes, pirkėjus, užsakymus? „Knygos pigiau nei 1500“ — apie prekes, vadinasi
FROM products. - Apribojimai → WHERE. Kiekviena klausimo sąlyga — atskira filtro sąlyga: kategorija „Knygos“, kaina mažesnė nei 1500.
- Ką parodyti → SELECT. Ką žmogus nori pamatyti atsakyme? Pavadinimą ir kainą — juos ir išvardijame, likusia — triukšmas.
- Atsakymo forma → ORDER BY. „Nuo pigių prie brangių“ — rūšiavimas pagal kainą.
-- „Kokios knygos pigesnės nei 1500 ir kiek jos kainuoja, nuo pigių prie brangių?“
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;
Kelios sąlygos sujungiamos žodžiu AND — filtro operatorius išsamiai išnagrinėsime kitame skyriuje.
Ir atvirkštinis gero archyvaro įprotis: perskaityk paruoštą užklausą balsu kaip frazę. „Iš prekių paimti knygas pigiau nei 1500, parodyti pavadinimą ir kainą, surūšiuoti pagal kainą“ — jei perpasakojimas sutapo su pradiniu klausimu, užklausa teisinga pagal prasmę. Jei perpasakojime iškilo „visi stulpeliai“ ar „visa vitrina“ — grįžk ir susiaurink.
Interview question
Klausimas iš pokalbio: kodėl SELECT * laikoma bloga praktika darbinėse užklausose?
Stiprus atsakymas: pirma, pertekliniai duomenys: tinklas ir atmintis eikvojami stulpeliams, kurių nereikia, ir bazė praranda galimybę atsakyti vien pagal indeksą (index-only scan; indeksai — 10 skyrius). Antra, trapumas: pridedant ar pervadinant stulpelius lūžta ataskaitos ir kodas, besiremiantis stulpelių sudėtimi ir tvarka. Aiškus stulpelių sąrašas — tai užklausos kontraktas; SELECT * tinka nebent interaktyviame duomenų tyrinėjime.
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.