Precedenza di AND/OR e uso delle parentesi
Il problema di filtraggio più comune che viene inserito nelle domande dei colloqui
Precedenza di AND/OR e uso delle parentesi è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 1 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 SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Interview Prep include 4 lezioni in totale.
L'insidia preparata nei colloqui
Il più comune errore di filtraggio nei colloqui sembra corretto a prima vista. La richiesta è: trovare gli ordini del cliente 5 con stato in sospeso o spedito. Un candidato scrive una WHERE in cui mescola AND e OR e ottiene righe aggiuntive.
Perché? Perché AND ha una precedenza maggiore di OR. Il database valuta prima tutte le coppie di AND, poi gli OR. Questa lezione rende automatica la regola, così non si perdono mai punti per questo motivo.
La precedenza degli operatori in una frase
In ogni dialetto SQL, gli operatori logici vengono valutati in quest'ordine: prima NOT, poi AND e infine OR.
NOTha la precedenza più altaANDha una precedenza intermediaORha la precedenza più bassa
Quindi A OR B AND C viene interpretato come A OR (B AND C), mai come (A OR B) AND C. L'intervistatore conta sul fatto che questa regola venga dimenticata.
La query errata
Questa è la query che un candidato scrive per cliente 5, stato in sospeso o spedito. Sembra corretta, ma non lo è.
Poiché AND ha una precedenza maggiore, SQL la interpreta come (customer_id = 5 AND status = 'pending') OR status = 'shipped'. Il secondo ramo non contiene alcun filtro sul cliente, quindi restituisce gli ordini spediti di tutti i clienti.
SELECT *
FROM orders
WHERE customer_id = 5
AND status = 'pending'
OR status = 'shipped';La correzione: le parentesi
Racchiuda il ramo OR tra parentesi, così il filtro sul cliente si applica a entrambi gli stati. Le parentesi sovrascrivono la precedenza e rendono esplicito l'intento.
Ora SQL valuta prima il gruppo OR, poi applica customer_id = 5 all'intero gruppo. I revisori esperti aggiungono le parentesi anche quando la precedenza produce già il risultato corretto, semplicemente per migliorare la leggibilità.
SELECT *
FROM orders
WHERE customer_id = 5
AND (status = 'pending' OR status = 'shipped');Seguire la tabella della verità
Consideri un ordine spedito del cliente 9. Segua la versione errata:
customer_id = 5è falsestatus = 'pending'è falsefalse AND falseè falsefalse OR (status = 'shipped' is true)è true
La riga viene restituita anche se non appartiene al cliente 5. Descrivere ad alta voce il percorso di una riga concreta è esattamente ciò che gli intervistatori vogliono vedere.
NOT ha la precedenza maggiore
NOT si applica solo alla condizione che lo segue immediatamente. Quindi NOT status = 'open' AND priority = 'high' significa (NOT status = 'open') AND priority = 'high'.
Se intende negare l'intera espressione, deve usare le parentesi: NOT (status = 'open' AND priority = 'high'). Per la legge di De Morgan, ciò equivale a status <> 'open' OR priority <> 'high'.
SELECT *
FROM tickets
WHERE NOT (status = 'open' AND priority = 'high');Un esempio con tre condizioni
Trovi prodotti che siano (elettronica o elettrodomestici) e disponibili. Senza parentesi, il filtro sulla disponibilità si applicherebbe solo agli elettrodomestici.
La query raggruppata è chiara: selezionare una delle due categorie e poi richiedere la disponibilità. La regola da tenere a mente è questa: quando una query combina AND con OR, quasi sempre servono le parentesi attorno al gruppo OR.
SELECT *
FROM products
WHERE (category = 'electronics' OR category = 'appliances')
AND in_stock = true;IN come alternativa più pulita
Una lunga catena di OR sulla stessa colonna è soggetta a errori e prolissa. La sostituisca con IN, che non è ambiguo e non richiede parentesi.
La query seguente è esattamente equivalente alla precedente, ma è più difficile da rompere. Gli intervistatori apprezzano questa rifattorizzazione perché dimostra che comprende sia la correttezza sia la leggibilità.
SELECT *
FROM products
WHERE category IN ('electronics', 'appliances')
AND in_stock = true;Precedenza nei filtri calcolati
La precedenza si applica anche quando si combinano aritmetica e logica. In price * 1.2 > 100 OR discount = 0 AND active = true, prima vengono risolti il confronto e l'aritmetica, poi AND e infine OR.
Quindi si legge (price * 1.2 > 100) OR ((discount = 0) AND (active = true)). Quando ha dei dubbi, non cerchi di memorizzare la tabella sotto pressione: racchiuda semplicemente ogni gruppo tra parentesi.
Come rispondere sul momento
Quando un intervistatore le mostra un filtro misto AND/OR e chiede che cosa restituisce, faccia tre cose:
- Enunci la regola della precedenza:
ANDprima diOR - Raggruppi nuovamente la query ad alta voce per rivelarne la vera struttura
- Tracci una riga che renda evidente il bug
Poi proponga la versione corretta, con le parentesi. Questa sequenza dimostra un rigore da profilo senior.
Buona pratica difensiva
La buona pratica professionale è: racchiudere sempre tra parentesi ogni gruppo OR. Richiede due caratteri e rimuove un'intera categoria di bug e commenti in revisione.
I revisori del codice non dovrebbero mai dover valutare mentalmente la precedenza per verificare che un filtro sia corretto. Renda visibile il raggruppamento. Questo è uno dei pochi casi in cui la sintassi ridondante è considerata buona pratica da tutti.
SELECT order_id, status
FROM orders
WHERE customer_id = 5
AND (status = 'pending' OR status = 'shipped');Verifica rapida
Ragioni sulla regola della precedenza prima di rispondere.
Riepilogo
Punti chiave:
- La precedenza logica è NOT, poi AND, poi OR
- I filtri che combinano
ANDeORrichiedono quasi sempre parentesi attorno al gruppoOR - Una parentesi mancante amplia silenziosamente il risultato, spesso eliminando del tutto un filtro
- Sostituisca le lunghe catene di
ORsulla stessa colonna conIN - Per rispondere sul momento: enunci la regola, raggruppi nuovamente, tracci una riga e poi corregga
Racchiuda sempre tra parentesi i gruppi OR, anche quando la precedenza produce già il risultato corretto.
Domande Frequenti
La lezione «Precedenza di AND/OR e uso delle parentesi» è gratuita?
Sì — il testo completo di «Precedenza di AND/OR e uso delle parentesi» è 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 SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Precedenza di AND/OR e uso delle parentesi»?
Il problema di filtraggio più comune che viene inserito nelle domande dei colloqui Eserciti SQL 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 SQL Interview Prep?
Non è richiesta alcuna esperienza precedente. SQL 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 1 di 4.
Quanto tempo richiede la lezione «Precedenza di AND/OR e uso delle parentesi»?
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 SQL Interview Prep?
Sì. Ogni lezione SQL 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
- Precedenza di AND/OR e uso delle parentesi
- BETWEEN, IN e limiti inclusivi
- LIKE, caratteri jolly ed escaping
- Filtrare in base a valori calcolati