Pirmais noderīgais vaicājums
What you'll learn
- rakstīt vaicājumus ar skaidru kolonnu sarakstu pēc
SELECTun rindu filtru caurWHERE - pārtulkot biznesa jautājumu SQL valodā pa maršrutu: entītija →
FROM, ierobežojumi →WHERE(arAND), 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:

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 |
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:
- 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. - Ierobežojumi → WHERE. Katrs nosacījums no jautājuma ir atsevišķs filtra nosacījums: kategorija „Grāmatas”, cena mazāka par 1500.
- Ko parādīt → SELECT. Ko cilvēks grib redzēt atbildē? Nosaukumu un cenu — tos arī uzskaitām, pārējais ir troksnis.
- 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ē.
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.