Datubāzes bez miglas

Pirmais noderīgais vaicājums

21 min
What you'll learn
  • rakstīt vaicājumus ar skaidru kolonnu sarakstu pēc SELECT un rindu filtru caur WHERE
  • pārtulkot biznesa jautājumu SQL valodā pa maršrutu: entītija → FROM, ierobežojumi → WHERE (ar AND), izvade → SELECT, kārtība → ORDER BY
  • izskaidrot, kāpēc SELECT * ir slikta prakse darba vaicājumos
  • pārbaudīt vaicājumu, pārstāstot to skaļi: ja pārstāsts sakrīt ar sākotnējo jautājumu — vaicājums pēc jēgas ir pareizs

Karte izpētīta — un QUERY maina noteikumus. Līdz šim tu apskatīji arhīvu kopumā, kā tūrists; arhivists strādā citādi. Holopanelī nodziest viss, izņemot vienu tabulu, un parādās uzdevums: uzdod jautājumu tā, lai atbildē nebūtu nevienas liekas rindas un nevienas liekas kolonnas.

Izvēlamies vajadzīgās kolonnas un rindas

Ņemt visu caur * ir ērti pirmajai iepazīšanās reizei, bet īstajā darbā tas ir kā atnest uz kasi visu noliktavu. Parasti tev vajadzīgi konkrēti lauki: uzskaiti tos ar komatu pēc SELECT.

Ar rindām ir tāpat: visas vitrīnas vietā izvēlies tikai vajadzīgo segmentu caur WHERE. Piemēram, palūgsim „Kotomarket” tikai preces no kategorijas Grāmatas:

Kursants ar dzintarkrāsas staru-filtru sašaurina hologrāfisko vitrīnu: cauri staram iziet tikai dažas grāmatu rindas-kapsulas
Precīzs jautājums arhīvam: SELECT nosauc vajadzīgās kolonnas, WHERE izlaiž tikai vajadzīgās rindas.

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:

Kādas grāmatas ir uz vitrīnas un cik tās maksā:
Query result
nameprice
SQL для профи1290.00
Чистый код1490.00
Алгоритмы на практике1690.00

No biznesa jautājuma — uz vaicājumu

Īstie jautājumi pie arhivista nenonāk SQL valodā: „kuras grāmatas lētākas par pusotru tūkstoti?”, „kas no elektronikas dārgāks par 5000?”. Tulkojums vienmēr iet pa vienu maršrutu:

  1. Entītija → tabula. Par ko ir jautājums: par precēm, pircējiem, pasūtījumiem? „Grāmatas lētākas par 1500” ir par precēm, tātad FROM products.
  2. Ierobežojumi → WHERE. Katrs nosacījums no jautājuma ir atsevišķs filtra nosacījums: kategorija „Grāmatas”, cena mazāka par 1500.
  3. Ko parādīt → SELECT. Ko cilvēks grib redzēt atbildē? Nosaukumu un cenu — tos arī uzskaitām, pārējais ir troksnis.
  4. Atbildes forma → ORDER BY. „No lētajām uz dārgajām” — kārtošana pēc cenas.
-- „Kuras grāmatas lētākas par 1500 un cik tās maksā, no lētajām uz dārgajām?”
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;

Vairāki nosacījumi tiek savienoti ar vārdu AND — sīki filtra operatorus apskatīsim nākamajā nodaļā.

Un laba arhivista apgrieztais ieradums: izlasi gatavo vaicājumu skaļi kā frāzi. „No precēm paņemt grāmatas lētākas par 1500, parādīt nosaukumu un cenu, sakārtot pēc cenas” — ja pārstāsts sakrita ar sākotnējo jautājumu, vaicājums pēc jēgas ir pareizs. Ja pārstāstā uzpeldēja „visas kolonnas” vai „visa vitrīna” — atgriezies un sašaurini.

Interview question

Jautājums no darba intervijas: kāpēc SELECT * tiek uzskatīts par sliktu praksi darba vaicājumos?

Spēcīga atbilde: pirmkārt, lieki dati: tīkls un atmiņa tiek tērēti uz kolonnām, kas nav vajadzīgas, un datubāze zaudē iespēju atbildēt tikai pēc indeksa (index-only scan; indeksi — 10. nodaļa). Otrkārt, trauslums: pievienojot vai pārdēvējot kolonnas, salūst atskaites un kods, kas paļaujas uz kolonnu sastāvu un kārtību. Skaidrs kolonnu saraksts ir vaicājuma kontrakts; SELECT * ir vietā varbūt tikai interaktīvā datu izpētē.

Check yourself
Ko parādīs vaicājums 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.