Forberedelse til SQL-intervju · leksjon

Logisk rekkefølge for spørringskjøring

Hvorfor FROM kjøres før SELECT, og hvordan den faktiske kjøringsrekkefølgen besvarer en rekke lurespørsmål.

Leksjon 2 av 413 trinn

Logisk rekkefølge for spørringskjøring er en gratis leksjon i Forberedelse til SQL-intervju på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til SQL-intervju, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.

Spørsmålet som åpner døren til et dusin andre

Intervjuere spør "I hvilken rekkefølge kjører en spørring egentlig?" fordi det forklarer så mye: hvorfor et SELECT-alias mislykkes i WHERE, hvorfor WHERE ikke kan filtrere en aggregert verdi, og mer.

Skriftlig rekkefølge kontra logisk rekkefølge

Du skriver en spørring med SELECT først, men motoren kjører den med FROM først. Dette misforholdet, der SELECT evalueres nesten sist, skaper det meste av forvirringen.

Den fullstendige logiske rekkefølgen

Den fullstendige logiske rekkefølgen er: FROM, deretter WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY og til slutt LIMIT. Alle fallgruvene nedenfor følger direkte av denne listen.

Hvorfor FROM kjører først

FROM kjører først fordi motoren trenger rader å arbeide med før noe annet kan skje. Den bygger kilderadene, og først da kan WHERE avgjøre hvilke rader som skal beholdes.

SELECT e.name, d.name AS dept
FROM employees e
JOIN departments d ON d.id = e.department_id
WHERE e.salary > 50000;

Felle: Alias kan ikke brukes i WHERE

Den vanligste konsekvensen det spørres om, er at et SELECT-alias ikke kan brukes i WHERE, fordi WHERE kjører før SELECT. Koden nedenfor viser feilen og løsningen: Gjenta uttrykket.

-- FAILS: alias 'annual' unknown in WHERE
SELECT salary * 12 AS annual
FROM employees
WHERE annual > 600000;

-- FIX: repeat the expression
SELECT salary * 12 AS annual
FROM employees
WHERE salary * 12 > 600000;

Felle: WHERE kan ikke se aggregerte verdier

WHERE kjører før grupperingen, så den kan ikke se aggregerte verdier som COUNT(). Det er det HAVING brukes til: WHERE filtrerer rader, mens HAVING filtrerer grupper etter aggregeringen.

-- WHERE cannot use COUNT(*)
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

Hvorfor ORDER BY kan bruke aliaser

Det motsatte gjelder for ORDER BY: Den kjører etter SELECT, så den kan bruke SELECT-aliaser. Det samme aliaset har ulik plassering i rekkefølgen, og derfor fungerer det her, men ikke i WHERE.

SELECT name, salary * 12 AS annual
FROM employees
ORDER BY annual DESC;

Hvor DISTINCT passer inn

DISTINCT kjører etter SELECT, men før ORDER BY. Fordi den fjerner duplikater basert på resultatkolonnene, kan du bare sortere etter noe som finnes i select-listen.

-- ERROR in many engines:
-- ORDER BY column not in the DISTINCT select list
SELECT DISTINCT department
FROM employees
ORDER BY hire_date;

Gjennomgang av en fullstendig spørring

La oss følge en ekte spørring gjennom trinnene: FROM leser radene, WHERE filtrerer, GROUP BY grupperer, HAVING beholder grupper, SELECT beregner, ORDER BY sorterer, og LIMIT avgrenser resultatet.

SELECT customer_id, SUM(amount) AS total
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(amount) > 1000
ORDER BY total DESC
LIMIT 10;

Logisk kontra fysisk kjøring

En nyanse som imponerer: Dette er den logiske rekkefølgen som definerer korrektheten. Optimaliseringens fysiske plan kan være annerledes, så lenge den produserer de samme radene.

En huskeregel for rekkefølgen

En huskeregel: Se for deg at rader flyter gjennom en rørledning, der hvert trinn sender et mindre utvalg videre til det neste. Når noe mislykkes, bør du undersøke om et tidligere trinn produserte det som trengs.

Hurtigsjekk

Bruk kjørerekkefølgen til å finne feilen.

Oppsummering

Oppsummering: Den logiske rekkefølgen er FROM, WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY, LIMIT. WHERE kjører før SELECT, så aliaser kan ikke brukes der. ORDER BY kjører etter SELECT, så aliaser fungerer der.

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Logisk rekkefølge for spørringskjøring» gratis?

Ja – hele teksten i «Logisk rekkefølge for spørringskjøring» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til SQL-intervju-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.

Hva lærer jeg i «Logisk rekkefølge for spørringskjøring»?

Hvorfor FROM kjøres før SELECT, og hvordan den faktiske kjøringsrekkefølgen besvarer en rekke lurespørsmål. Du øver på Forberedelse til SQL-intervju med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Forberedelse til SQL-intervju?

Ingen tidligere erfaring er nødvendig. Forberedelse til SQL-intervju på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Logisk rekkefølge for spørringskjøring»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Forberedelse til SQL-intervju-leksjonen?

Ja. Alle Forberedelse til SQL-intervju-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hva er SQL, og hvorfor spør intervjuere om det?
  2. Logisk rekkefølge for spørringskjøring
  3. Primærnøkler, fremmednøkler og begrensninger
  4. Lese et skjema under press
← Tilbake til Forberedelse til SQL-intervju