Den första nyttiga frågan
What you'll learn
- skriva frågor med en explicit lista av kolumner efter
SELECToch ett radfilter viaWHERE - översätta en affärsfråga till SQL längs rutten: entitet →
FROM, villkor →WHERE(medAND), utdata →SELECT, ordning →ORDER BY - förklara varför
SELECT *är dålig praxis i skarpa frågor - kontrollera en fråga genom att återberätta den högt: stämmer återberättelsen med den ursprungliga frågan — då är frågan korrekt till sin innebörd
Kartan är inlärd — och QUERY ändrar reglerna. Hittills har du betraktat hela arkivet som en turist; en arkivarie arbetar annorlunda. På holopanelen slocknar allt utom en tabell, och en uppgift dyker upp: ställ din fråga så att svaret inte innehåller en enda överflödig rad och inte en enda överflödig kolumn.
Vi väljer ut de kolumner och rader vi behöver
Att ta allt med * är behändigt för en första bekantskap, men i verkligt arbete är det som att bära fram hela lagret till kassan. Vanligtvis behöver du bestämda fält: räkna upp dem, kommaseparerade, efter SELECT.
Med rader är det likadant: i stället för hela skyltfönstret, välj bara det segment du behöver via WHERE. Vi ber till exempel «Kotomarket» enbart om varorna i kategorin Böcker:

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 |
Från affärsfråga till query
Riktiga frågor når inte arkivarien på SQL: «vilka böcker är billigare än ettusenfemhundra?», «vad i elektroniken kostar mer än 5000?». Översättningen går alltid längs en och samma rutt:
- Entitet → tabell. Vad handlar frågan om: varor, köpare, ordrar? «Böcker billigare än 1500» handlar om varor, alltså
FROM products. - Villkor → WHERE. Varje villkor i frågan är ett separat filtervillkor: kategorin «Böcker», pris under 1500.
- Vad som ska visas → SELECT. Vad vill personen se i svaret? Namnet och priset — dem räknar vi upp, resten är brus.
- Svarets form → ORDER BY. «Från billiga till dyra» är en sortering efter pris.
-- «Vilka böcker är billigare än 1500 och vad kostar de, från billiga till dyra?»
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;
Flera villkor fogas samman med ordet AND — filteroperatorerna går vi igenom i detalj i nästa kapitel.
Och den gode arkivariens omvända vana: läs den färdiga frågan högt som en mening. «Ur varorna ta böckerna billigare än 1500, visa namn och pris, sortera efter pris» — stämmer återberättelsen med den ursprungliga frågan är frågan korrekt till sin innebörd. Dyker «alla kolumner» eller «hela skyltfönstret» upp i återberättelsen — gå tillbaka och smalna av.
Interview question
Intervjufråga: varför anses SELECT * vara dålig praxis i skarpa frågor?
Ett starkt svar: för det första, överflödiga data: nät och minne går åt till kolumner som inte behövs, och databasen förlorar möjligheten att svara enbart utifrån indexet (index-only scan; index — Kapitel 10). För det andra, skörhet: när kolumner läggs till eller byter namn går rapporter och kod sönder som förlitar sig på kolumnernas uppsättning och ordning. En explicit kolumnlista är frågans kontrakt; SELECT * är på sin plats möjligen bara vid interaktiv utforskning av data.
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.