Skalar-, række- og tabelunderforespørgsler
Brug underforespørgsler, der returnerer én værdi, én række eller en hel tabel, og placér dem i SELECT-, FROM- og WHERE-klausuler.
Skalar-, række- og tabelunderforespørgsler er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad er en underforespørgsel?
En underforespørgsel er en SELECT inde i en anden SQL-sætning. Den kan være:
- En skalar-underforespørgsel — returnerer en enkelt værdi
- En række-underforespørgsel — returnerer en enkelt række
- En tabel-underforespørgsel — returnerer en relation (bruges i FROM)
Skalar-underforespørgsel
Bruges overalt, hvor der forventes en enkelt værdi:
SELECT id, total,
total - (SELECT AVG(total) FROM orders) AS diff_from_avg
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';Række-underforespørgsel
Returnerer én række med flere kolonner. Mindre almindelig, primært brugt sammen med række-konstruktører:
SELECT *
FROM orders
WHERE (status, country) = (
SELECT status, country FROM orders WHERE id = 1
);Tabel-underforespørgsel i FROM
Behandl resultatet af en forespørgsel som en midlertidig tabel:
SELECT country, AVG(big_order_total) AS avg_big
FROM (
SELECT country, total AS big_order_total
FROM orders
WHERE total > 1000
) AS sub
GROUP BY country;Alias for FROM-underforespørgsler
Alle FROM-underforespørgsler kræver et alias i PostgreSQL — også selvom du ikke bruger det:
SELECT * FROM (SELECT 1) sub; -- "sub" requiredUnderforespørgsler i WHERE
Filtrér efter et afledt sæt af værdier:
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE total > 100
);EXISTS / NOT EXISTS
Kontrollér, om en underforespørgsel returnerer mindst én række:
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);Underforespørgsler i SELECT
Indlejr en skalar-underforespørgsel pr. række:
SELECT id, full_name,
(SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;
-- Often readable, but a LEFT JOIN + GROUP BY is usually faster.Underforespørgsler som udtryk
En skalar-underforespørgsel, der returnerer mere end én række, er en fejl:
SELECT (SELECT email FROM users);
-- ERROR: more than one row returned by a subquery used as an expressionHvornår du bør omskrive til JOIN
Mange forekomster af "x IN (SELECT...)" kan omskrives til JOIN. Vælg den form, der er lettest at læse; moderne forespørgselsplanlæggere producerer ofte den samme plan.
Underforespørgsler kontra CTE'er
Hvis du har brug for den samme underforespørgsel to gange, kan du give den et navn med en CTE — det gennemgås i næste lektion.
Opsummering
Underforespørgsler findes i tre varianter.
- Skalar i SELECT/WHERE
- Række i lighedstjek
- Tabel i FROM
- EXISTS til tjek for "et vilkårligt match"
Hurtigt tjek
Hvilken form for underforespørgsel bruges i en FROM-klausul som en midlertidig tabel?
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “Skalar-, række- og tabelunderforespørgsler” gratis?
Ja — hele teksten til “Skalar-, række- og tabelunderforespørgsler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Skalar-, række- og tabelunderforespørgsler”?
Brug underforespørgsler, der returnerer én værdi, én række eller en hel tabel, og placér dem i SELECT-, FROM- og WHERE-klausuler. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Skalar-, række- og tabelunderforespørgsler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne SQL Academy-lektion?
Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Skalar-, række- og tabelunderforespørgsler
- Korrelerede kontra ikke-korrelerede underforespørgsler
- Common Table Expressions (WITH)
- Rekursive CTE'er til hierarkier