Duomenų bazės be miglos

Pirmoji naudinga užklausa

21 min
What you'll learn
  • rašyti užklausas su aiškiu stulpelių sąrašu po SELECT ir eilučių filtru per WHERE
  • versti verslo klausimą į SQL maršrutu: esybė → FROM, apribojimai → WHERE (su AND), 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:

Kursantas gintariniu spinduliu-filtru susiaurina holografinę vitriną: pro spindulį praeina vos kelios eilutės-kapsulės su knygomis
Tikslus klausimas archyvui: SELECT įvardija reikalingus stulpelius, WHERE praleidžia tik reikalingas eilutes.

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:

Kokios knygos yra ant vitrinos ir kiek jos kainuoja:
Query result
nameprice
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:

  1. Esybė → lentelė. Apie ką klausimas: apie prekes, pirkėjus, užsakymus? „Knygos pigiau nei 1500“ — apie prekes, vadinasi FROM products.
  2. Apribojimai → WHERE. Kiekviena klausimo sąlyga — atskira filtro sąlyga: kategorija „Knygos“, kaina mažesnė nei 1500.
  3. Ką parodyti → SELECT. Ką žmogus nori pamatyti atsakyme? Pavadinimą ir kainą — juos ir išvardijame, likusia — triukšmas.
  4. 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.

Check yourself
Ką parodys užklausa 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.