SQL Academy · leksjon

IN kontra ANY kontra ALL

Sammenlign med mengder av verdier.

Leksjon 3 av 413 trinn

IN kontra ANY kontra ALL er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 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 SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva er IN, ANY og ALL?

Når du skriver SQL-spørringer, trenger du ofte å sammenligne en verdi med et sett med verdier. SQL gir deg tre kraftige operatorer for dette: IN, ANY og ALL.

Alle tre kan brukes med underspørringer som returnerer en liste med verdier. De ser like ut, men oppfører seg forskjellig — å velge riktig operator kan gjøre spørringen både mer uttrykksfull og effektiv.

IN-operatoren

IN-operatoren kontrollerer om en verdi samsvarer med en verdi i en liste eller i resultatet fra en underspørring. Dette er den enkleste av de tre.

Eksempelet nedenfor henter ansatte som arbeider i salgs-, HR- eller ingeniøravdelingen.

SELECT name, department
FROM employees
WHERE department IN ('Sales', 'HR', 'Engineering');

IN med en underspørring

IN blir spesielt kraftig når den kombineres med en underspørring. I stedet for en hardkodet liste kan du hente sammenligningsverdiene direkte fra en annen tabell.

Her finner vi alle ansatte som tilhører en avdeling med et budsjett på over 100 000.

SELECT name, department
FROM employees
WHERE department IN (
  SELECT dept_name
  FROM departments
  WHERE budget > 100000
);

ANY-operatoren

ANY (også skrevet som SOME) sammenligner en verdi med hver verdi som returneres av en underspørring, ved hjelp av en sammenligningsoperator som =, >, <, >= eller <=.

Betingelsen er sann hvis sammenligningen er sann for minst én verdi i resultatet fra underspørringen.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT salary
  FROM employees
  WHERE department = 'HR'
);

= ANY er det samme som IN

En viktig ekvivalens du bør kjenne til: = ANY (subquery) er logisk identisk med IN (subquery). Begge returnerer TRUE når verdien samsvarer med minst ett resultat fra underspørringen.

Disse to spørringene gir samme resultat:

-- Using IN
SELECT name FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'NYC');

-- Using = ANY
SELECT name FROM employees
WHERE department_id = ANY (SELECT id FROM departments WHERE location = 'NYC');

ALL-operatoren

ALL sammenligner en verdi med hver verdi i resultatet fra en underspørring. Betingelsen er bare sann hvis sammenligningen gjelder for alle de returnerte verdiene.

Dette eksempelet finner ansatte med en lønn som er høyere enn alle lønningene på praktikantnivå — det vil si at de tjener mer enn den best betalte praktikanten.

SELECT name, salary
FROM employees
WHERE salary > ALL (
  SELECT salary
  FROM employees
  WHERE job_grade = 'Intern'
);

ANY kontra ALL – side ved side

Den viktigste forskjellen er at ANY krever at betingelsen er sann for minst én verdi, mens ALL krever at den er sann for hver verdi.

Tenk på det slik: ANY tilsvarer OR mellom alle sammenligningene, mens ALL tilsvarer AND mellom alle sammenligningene.

-- Returns rows where salary > at least one value in the subquery
SELECT name, salary FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department = 'Support');

-- Returns rows where salary > every value in the subquery
SELECT name, salary FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE department = 'Support');

NOT IN kontra &lt;&gt; ALL

Akkurat som = ANY tilsvarer IN, er operatoren <> ALL ekvivalent med NOT IN. Begge returnerer TRUE bare når verdien ikke samsvarer med noen verdi i underspørringen.

Vær imidlertid forsiktig — hvis underspørringen returnerer selv én NULL, returnerer NOT IN ingen rader i det hele tatt på grunn av SQLs treverdilogikk.

-- Using NOT IN
SELECT name FROM employees
WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'Remote');

-- Using <> ALL (equivalent)
SELECT name FROM employees
WHERE department_id <> ALL (SELECT id FROM departments WHERE location = 'Remote');

NULL-fellen med NOT IN

En viktig fallgruve er at hvis underspørringen som brukes med NOT IN returnerer en NULL, evalueres hele NOT IN-betingelsen som UNKNOWN for hver rad, og resultatsettet blir tomt.

For å unngå dette kan du filtrere bort NULL-verdier fra underspørringen eller bruke NOT EXISTS i stedet — den håndterer NULL-verdier på en trygg måte.

-- Dangerous: if manager_id has any NULL, no rows are returned
SELECT name FROM employees
WHERE id NOT IN (SELECT manager_id FROM employees);

-- Safe: filter NULLs explicitly
SELECT name FROM employees
WHERE id NOT IN (
  SELECT manager_id FROM employees
  WHERE manager_id IS NOT NULL
);

Praktisk eksempel: Finne høytlønte

La oss se alle tre operatorene brukt i et realistisk scenario. Vi har en employees-tabell med kolonnene name, department og salary.

Vi ønsker ansatte som tjener mer enn gjennomsnittslønnen i en hvilken som helst enkeltavdeling — det vil si mer enn gjennomsnittet i minst én avdeling.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT AVG(salary)
  FROM employees
  GROUP BY department
)
ORDER BY salary DESC;

Når bør du bruke hvilken?

Her er en rask veiledning for å velge mellom de tre operatorene:

  • IN — når du har en statisk liste eller trenger enkel likhetssammenligning med en underspørring.
  • = ANY — det samme som IN, men lar deg bruke andre sammenligningsoperatorer som > og <.
  • ALL — når betingelsen må gjelde for hver verdi, for eksempel når en verdi skal være større enn maksimumsverdien uten å bruke MAX.
  • NOT IN — praktisk, men vær oppmerksom på NULL-verdier; foretrekk NOT EXISTS når underspørringen kan inneholde NULL-verdier.

Hurtigsjekk

Test forståelsen din av IN, ANY og ALL.

Oppsummering av leksjonen

I denne leksjonen lærte du hvordan du sammenligner verdier med et sett ved hjelp av IN, ANY og ALL.

Sentrale poenger:

  • IN kontrollerer medlemskap — uttrykket er sant hvis verdien samsvarer med et element i listen eller underspørringen.
  • = ANY er ekvivalent med IN; bruk av andre operatorer, som > ANY, betyr at uttrykket er sant for minst ett treff.
  • ALL betyr at betingelsen må gjelde for hver verdi som underspørringen returnerer.
  • NOT IN returnerer stille ingen rader når underspørringen inneholder NULL-verdier — kontroller alltid at dette ikke skjer.
  • Bruk NOT EXISTS som et tryggere alternativ til NOT IN når det kan forekomme NULL-verdier.
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
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «IN kontra ANY kontra ALL» gratis?

Ja – hele teksten i «IN kontra ANY kontra ALL» 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 SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «IN kontra ANY kontra ALL»?

Sammenlign med mengder av verdier. Du øver på SQL Academy 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 SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy 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 3 av 4.

Hvor lang tid tar leksjonen «IN kontra ANY kontra ALL»?

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 SQL Academy-leksjonen?

Ja. Alle SQL Academy-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. Korrelert under-spørring
  2. EXISTS og NOT EXISTS
  3. IN kontra ANY kontra ALL
  4. EXISTS kontra JOIN-ytelse
← Tilbake til SQL Academy