Andmebaasid ilma uduta

Esimene kasulik päring

21 min
What you'll learn
  • kirjutama päringuid SELECT-i järel selge veergude loeteluga ja ridade filtriga WHERE kaudu
  • tõlkima ärilise küsimuse SQL-i marsruudil: olem → FROM, piirangud → WHERE (AND-iga), väljund → SELECT, järjekord → ORDER BY
  • selgitama, miks SELECT * on tööpäringutes halb tava
  • kontrollima päringut valju häälega ümberjutustades: ümberjutustus langes algse küsimusega kokku — päring on mõtte poolest õige

Kaart on selgeks õpitud — ja QUERY muudab reegleid. Seni vaatasid arhiivi tervikuna nagu turist; arhivaar töötab teisiti. Holopaneelil kustub kõik peale ühe tabeli ja ilmub ülesanne: esita küsimus nii, et vastuses ei oleks ühtegi liigset rida ega ühtegi liigset veergu.

Valime vajalikud veerud ja read

Kõige võtmine * kaudu on mugav esmatutvuseks, aga päristöös on see nagu tuua kassasse terve ladu. Tavaliselt on sul vaja konkreetseid välju: loetle need komaga eraldatult SELECT-i järel.

Ridadega on sama lugu: terve vitriini asemel vali ainult vajalik segment WHERE kaudu. Näiteks palume „Kotomarketilt“ ainult kategooria Raamatud kaupu:

Kursant kitsendab merevaigukollase filtrikiirega holograafilist vitriini: läbi kiire pääsevad vaid mõned kapsel-read raamatutega
Täpne küsimus arhiivile: SELECT nimetab vajalikud veerud, WHERE laseb läbi ainult vajalikud read.

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:

Millised raamatud on vitriinil ja kui palju need maksavad:
Query result
nameprice
SQL для профи1290.00
Чистый код1490.00
Алгоритмы на практике1690.00

Ärilisest küsimusest — päringusse

Pärisküsimused jõuavad arhivaarini mitte SQL-is: „millised raamatud on odavamad kui poolteist tuhat?“, „mis elektroonikast on kallim kui 5000?“. Tõlkimine käib alati üht marsruuti pidi:

  1. Olem → tabel. Millest on küsimus: kaupadest, ostjatest, tellimustest? „Raamatud odavamad kui 1500“ on kaupade kohta, seega FROM products.
  2. Piirangud → WHERE. Iga tingimus küsimusest on eraldi filtritingimus: kategooria „Raamatud“, hind väiksem kui 1500.
  3. Mida näidata → SELECT. Mida inimene tahab vastuses näha? Nimetust ja hinda — neid loetlemegi, ülejäänu on müra.
  4. Vastuse kuju → ORDER BY. „Odavamatest kallimateni“ on sorteerimine hinna järgi.
-- «Какие книги дешевле 1500 и сколько они стоят, от дешёвых к дорогим?»
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;

Mitu tingimust ühendatakse sõnaga AND — filtrioperaatoreid vaatame üksikasjalikult järgmises peatükis.

Ja hea arhivaari vastupidine harjumus: loe valmis päring valjusti läbi nagu lause. „Kaupadest võta raamatud odavamad kui 1500, näita nimetust ja hinda, sorteeri hinna järgi“ — kui ümberjutustus langes algse küsimusega kokku, on päring mõtte poolest õige. Kui ümberjutustuses kerkis esile „kõik veerud“ või „terve vitriin“ — mine tagasi ja kitsenda.

Interview question

Küsimus vestlusel: miks peetakse SELECT * tööpäringutes halvaks tavaks?

Tugev vastus: esiteks, liigsed andmed: võrku ja mälu kulutatakse veergudele, mida pole vaja, ja andmebaas kaotab võimaluse vastata ainult indeksi põhjal (index-only scan; indeksid — 10. peatükk). Teiseks, haprus: veergude lisamisel või ümbernimetamisel lähevad katki aruanded ja kood, mis arvestab veergude koosseisu ja järjekorraga. Selge veergude loetelu on päringu leping; SELECT * sobib vahest vaid interaktiivseks andmete uurimiseks.

Check yourself
Mida näitab päring 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.

Practice: solve the tasks
Solved 0 of 2