0Pricing
Coding Interview Prep · Lezione

Ordine logico di esecuzione delle query

Capire perché FROM viene eseguito prima di SELECT e come l'ordine reale di esecuzione risolve decine di domande-trabocchetto

Ordine logico di esecuzione delle query è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.

La domanda che ne apre una dozzina

Gli intervistatori chiedono "In quale ordine viene eseguita davvero una query?" perché questa domanda chiarisce moltissimi aspetti: perché un alias di SELECT non funziona in WHERE, perché WHERE non può filtrare un'aggregazione e molto altro.

Ordine di scrittura e ordine logico

Si scrive una query iniziando da SELECT, ma il motore la esegue iniziando da FROM. Questa differenza, unita al fatto che SELECT viene valutata quasi per ultima, causa la maggior parte della confusione.

L'ordine logico completo

L'ordine logico completo è: FROM, poi WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY e infine LIMIT. Tutti i casi problematici illustrati di seguito derivano direttamente da questo elenco.

Perché FROM viene eseguito per primo

FROM viene eseguito per primo perché il motore ha bisogno di righe su cui operare prima di poter fare qualsiasi altra cosa. Costruisce le righe di origine e solo dopo WHERE può decidere quali mantenere.

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

Tranello: l'alias non è utilizzabile in WHERE

La conseguenza più frequentemente chiesta è questa: un alias di SELECT non può essere usato in WHERE, perché WHERE viene eseguito prima di SELECT. Il codice seguente mostra l'errore e la correzione: ripetere l'espressione.

-- 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;

Tranello: WHERE non può vedere le aggregazioni

WHERE viene eseguito prima del raggruppamento, quindi non può vedere le aggregazioni come COUNT(). A questo serve HAVING: WHERE filtra le righe, HAVING filtra i gruppi dopo l'aggregazione.

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

Perché ORDER BY può usare gli alias

Il caso opposto: ORDER BY viene eseguito dopo SELECT, quindi può usare gli alias di SELECT. Lo stesso alias, ma in un momento diverso: ecco perché funziona qui, ma non in WHERE.

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

Dove si colloca DISTINCT

DISTINCT viene eseguito dopo SELECT, ma prima di ORDER BY. Poiché elimina i duplicati in base alle colonne di output, è possibile ordinare solo in base a qualcosa che è rimasto nell'elenco di selezione.

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

Tracciare una query completa

Seguiamo una query reale attraverso i vari passaggi: FROM legge le righe, WHERE filtra, GROUP BY crea i gruppi, HAVING mantiene i gruppi desiderati, SELECT calcola i valori, ORDER BY ordina e LIMIT seleziona una porzione.

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;

Esecuzione logica e fisica

Una precisazione che dimostra una buona preparazione: questo è l'ordine logico che definisce la correttezza del risultato. Il piano fisico dell'ottimizzatore può essere diverso, purché produca le stesse righe.

Un espediente per ricordare l'ordine

Per ricordarlo, immagini le righe che scorrono lungo una pipeline, con ogni passaggio che consegna al successivo un insieme più piccolo. Quando qualcosa non funziona, verifichi se un passaggio precedente ha prodotto ciò di cui quello successivo ha bisogno.

Verifica rapida

Applichi l'ordine di esecuzione per individuare l'errore.

Riepilogo

Riepilogo: l'ordine logico è FROM, WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY, LIMIT. WHERE viene eseguito prima di SELECT, quindi gli alias non sono disponibili; ORDER BY viene eseguito dopo, quindi gli alias funzionano.

Domande Frequenti

La lezione «Ordine logico di esecuzione delle query» è gratuita?

Sì — il testo completo di «Ordine logico di esecuzione delle query» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.

Cosa imparerò in «Ordine logico di esecuzione delle query»?

Capire perché FROM viene eseguito prima di SELECT e come l'ordine reale di esecuzione risolve decine di domande-trabocchetto Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Coding Interview Prep?

Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Ordine logico di esecuzione delle query»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?

Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Che cos'è SQL e perché viene richiesto ai colloqui
  2. Ordine logico di esecuzione delle query
  3. Chiavi primarie, chiavi esterne e vincoli
  4. Leggere uno schema sotto pressione
← Torna a Coding Interview Prep