Förberedelser inför SQL-intervjun · Lektion

AND/OR-prioritet och parenteser

Det vanligaste filtreringsfelet som intervjuare planterar i sina frågor

Lektion 1 av 413 steg

AND/OR-prioritet och parenteser är en gratis lektion i Förberedelser inför SQL-intervjun på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelser inför SQL-intervjun, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.

Fällan som intervjuare gillrar

Det vanligaste filtreringsfelet i intervjuer ser korrekt ut vid första anblicken. Frågan är: hitta order från kund 5 som antingen är väntande eller skickade. En kandidat skriver en WHERE med AND och OR blandade och får tillbaka extra rader.

Varför? Eftersom AND binder hårdare än OR. Databasen utvärderar först alla AND-par och därefter OR-operatorerna. Den här lektionen gör regeln automatisk, så att inga poäng går förlorade på den.

Operatorprioritet på en mening

I alla SQL-dialekter har de logiska operatorerna följande prioritet: NOT först, sedan AND och sist OR.

  • NOT har högst prioritet
  • AND har medelhög prioritet
  • OR har lägst prioritet

Så A OR B AND C läses som A OR (B AND C), aldrig som (A OR B) AND C. Intervjuaren räknar med att detta glöms bort.

Den felaktiga frågan

Här är frågan som en kandidat skriver för kund 5, status väntande eller skickad. Den ser rätt ut men är fel.

Eftersom AND binder hårdare tolkar SQL den som (customer_id = 5 AND status = 'pending') OR status = 'shipped'. Den andra grenen har inget kundfilter alls, så den returnerar skickade order från alla kunder.

SELECT *
FROM orders
WHERE customer_id = 5
  AND status = 'pending'
  OR status = 'shipped';

Lösningen: parenteser

Omslut OR-grenen med parenteser så att kundfiltret gäller för båda statusarna. Parenteser åsidosätter prioritetsordningen och gör avsikten tydlig.

Nu utvärderar SQL den grupperade OR-delen först och tillämpar sedan customer_id = 5 på hela gruppen. Erfarna granskare lägger till parenteser även när prioritetsordningen redan ger rätt resultat, enbart för läsbarhetens skull.

SELECT *
FROM orders
WHERE customer_id = 5
  AND (status = 'pending' OR status = 'shipped');

Gå igenom sanningstabellen

Ta en skickad order från kund 9. Följ den felaktiga versionen:

  • customer_id = 5 är false
  • status = 'pending' är false
  • false AND false är false
  • false OR (status = 'shipped' is true) är true

Raden returneras trots att den inte gäller kund 5. Att högt gå igenom en konkret rad är exakt vad intervjuare vill se.

NOT binder hårdast

NOT gäller endast villkoret direkt efter operatorn. Därför betyder NOT status = 'open' AND priority = 'high' (NOT status = 'open') AND priority = 'high'.

Om hela uttrycket skulle negeras måste det omges av parenteser: NOT (status = 'open' AND priority = 'high'). Enligt De Morgans lag motsvarar det status <> 'open' OR priority <> 'high'.

SELECT *
FROM tickets
WHERE NOT (status = 'open' AND priority = 'high');

Ett exempel med tre villkor

Hitta produkter som är (elektronik eller vitvaror) och finns i lager. Utan parenteser skulle filtret för lagerstatus bara gälla vitvaror.

Frågan nedan är tydligt grupperad: välj en av två kategorier och kräv sedan lagerstatus. Tumregel: när en fråga blandar AND med OR behöver du nästan alltid parenteser runt OR-gruppen.

SELECT *
FROM products
WHERE (category = 'electronics' OR category = 'appliances')
  AND in_stock = true;

IN som ett tydligare alternativ

En lång kedja av OR-villkor i samma kolumn är både felbenägen och omständlig. Ersätt den med IN, som är entydigt och inte kräver parenteser.

Frågan nedan är exakt likvärdig med den föregående, men mindre känslig för fel. Intervjuare uppskattar denna refaktorering eftersom den visar att du förstår både korrekthet och läsbarhet.

SELECT *
FROM products
WHERE category IN ('electronics', 'appliances')
  AND in_stock = true;

Operatorprioritet i beräknade filter

Operatorprioritet gäller också när aritmetik och logik blandas. I price * 1.2 > 100 OR discount = 0 AND active = true utvärderas aritmetiken och jämförelsen först, sedan AND och därefter OR.

Det kan alltså läsas som (price * 1.2 > 100) OR ((discount = 0) AND (active = true)). Vid osäkerhet behöver du inte memorera tabellen under press – sätt bara parenteser runt varje grupp.

Så svarar du under intervjun

När en intervjuare visar ett blandat AND/OR-filter och frågar vad returnerar detta, gör tre saker:

  • Ange prioritetsregeln: AND före OR
  • Skriv om frågan med parenteser högt för att synliggöra den faktiska grupperingen
  • Följ en rad som avslöjar felet

Erbjud sedan den korrigerade versionen med parenteser. Den följden signalerar noggrannhet på seniornivå.

Defensiv vana

Den professionella vanan är: sätt alltid parenteser runt varje OR-grupp. Det kostar två tecken och eliminerar en hel kategori av fel och kommentarer vid kodgranskning.

Kodgranskare ska aldrig behöva utvärdera operatorprioritet mentalt för att bekräfta att ett filter är korrekt. Gör grupperingen synlig. Det här är ett av de få fall där överflödig syntax av alla anses vara god stil.

SELECT order_id, status
FROM orders
WHERE customer_id = 5
  AND (status = 'pending' OR status = 'shipped');

Snabbkontroll

Tänk igenom operatorprioriteten innan du svarar.

Sammanfattning

Viktiga slutsatser:

  • Logisk operatorprioritet är NOT, sedan AND, sedan OR
  • Blandade AND/OR-filter behöver nästan alltid parenteser runt OR-gruppen
  • En saknad parentes utökar omärkligt resultatet och tar ofta bort ett filter helt
  • Ersätt långa OR-kedjor i en kolumn med IN
  • För att svara under intervjun: ange regeln, sätt tillbaka parenteserna, följ en rad och korrigera sedan

Sätt alltid parenteser runt OR-grupper, även när operatorprioriteten redan ger samma resultat.

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”AND/OR-prioritet och parenteser” gratis?

Ja – hela texten till ”AND/OR-prioritet och parenteser” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelser inför SQL-intervjun, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.

Vad lär jag mig i ”AND/OR-prioritet och parenteser”?

Det vanligaste filtreringsfelet som intervjuare planterar i sina frågor Ni övar på Förberedelser inför SQL-intervjun med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelser inför SQL-intervjun?

Du behöver inga förkunskaper. Utbildningen i Förberedelser inför SQL-intervjun på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”AND/OR-prioritet och parenteser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelser inför SQL-intervjun-lektionen?

Ja. Varje Förberedelser inför SQL-intervjun-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. AND/OR-prioritet och parenteser
  2. BETWEEN, IN och inkluderande gränser
  3. LIKE, jokertecken och escape
  4. Filtrera på beräknade värden
← Tillbaka till Förberedelser inför SQL-intervjun