PostgreSQL EKSISTERER med SELECT Operator (Eksempel)

⚡ Smart oppsummering

PostgreSQL EXISTS er en boolsk operator som tester om en korrelert delspørring returnerer en rad, slik at SELECT-, INSERT-, UPDATE- og DELETE-setninger effektivt kan filtrere data etter tilstedeværelse eller fravær av samsvarende poster.

  • ???? Syntaks: WHERE EXISTS (delspørring) returnerer sann når delspørringen gir minst én rad.
  • 🔗 Korrelert delspørring: EXISTS kobler sammen indre og ytre spørringer, og matcher rader på en delt nøkkel.
  • Kortslutning: EXISTS stopper ved den første samsvarende raden, så den skalerer godt på store tabeller.
  • 🔁 Fire utsagn: Operatoren fungerer i SELECT-, INSERT-, UPDATE- og DELETE-spørringer.
  • 🛡️ EKSISTERER IKKE: Ekskluderer rader på en sikker måte og unngår NULL-fellen som brytes NOT IN.
  • 🤖 AI-spørringer: Assistenter genererer EXISTS-klausuler og flagger ytelsesrisikoer knyttet til korrelerte underspørringer.

PostgreSQL EKSISTERER med Select Operator

Hva finnes i PostgreSQL?

Ocuco PostgreSQL Eksisterer Operatoren tester om en rad(er) finnes i en delspørring. Dette betyr at operatoren brukes sammen med en delspørring. EXISTS-operatoren sies å være oppfylt når minst én rad finnes i delspørringen. Du kan bruke denne operasjonen sammen med SELECT-, UPDATE-, INSERT- og DELETE-setninger.

PostgreSQL EXISTS-spørresyntaks

Her er syntaksen for PostgreSQL EKSISTERER uttalelse:

WHERE EXISTS (subquery);

Syntaksen ovenfor viser at EXISTS-operatoren tar inn et argument, som er en underspørring. Underspørringen er ganske enkelt en SELECT-setning som skal begynne med en SELECT * i stedet for en liste over kolonnenavn eller uttrykk.

PostgreSQL EXISTS med SELECT-setning

La oss se hvordan vi bruker en SELECT-setning med EXISTS-operatoren. Vi har følgende tabeller:

Bok:

PostgreSQL EXISTS med SELECT-setning

Pris:

PostgreSQL EXISTS med SELECT-setning

Kjør følgende setning:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Dette returnerer følgende:

PostgreSQL EXISTS med SELECT-setningsresultat

Kommandoen ovenfor skal returnere alle poster i boktabellen hvis ID samsvarer med IDen til alle poster av underspørringen. Bare én id ble matchet. Derfor ble bare én post returnert.

PostgreSQL EXISTS med INSERT-setning

Vi kan bruke EXISTS-operatoren i en INSERT uttalelse. Vi har følgende 3 tabeller:

Bok:

PostgreSQL EXISTS med INSERT-setning

Pris:

PostgreSQL EXISTS med INSERT-setning

Pris 2:

PostgreSQL EXISTS med INSERT-setning

Vi kan da kjøre følgende setning:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Pristabellen er nå som følger:

PostgreSQL EXISTS med INSERT-setningsresultat

Raden med en id på 5 i tabellen kalt Pris2 ble matchet. Denne posten ble deretter satt inn i pristabellen.

PostgreSQL EXISTS med UPDATE-setning

Vi kan bruke EXISTS-operatoren i en UPDATE-setning.

Kjør følgende spørring:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

PostgreSQL EXISTS med UPDATE-setning

Vi oppdaterer priskolonnen i Pristabellen. Vårt mål er at prisene på varer som deler en id skal være de samme. Bare én rad ble matchet, det vil si 5.

Men siden prisene er like, det vil si 205, ble det ikke gjort noen oppdatering. Hvis det var en forskjell, ville en oppdatering blitt gjort.

PostgreSQL EXISTS med DELETE-setning

A PostgreSQL DELETE-setningen kan bruke EXISTS-operatoren. Her er et eksempel:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Pristabellen er nå som følger:

PostgreSQL EXISTS med DELETE-setning

Raden med ID 5 er slettet.

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Utover SQL-skallet kan de samme EXISTS-spørringene utføres visuelt gjennom pgAdmin-grensesnittet. La oss nå se hvordan disse handlingene kan utføres ved hjelp av pgAdmin:

Med SELECT-setning

Nedenfor finner du trinnene for å bruke en EXISTS-spørring i PostgreSQL med en SELECT-setning ved bruk av pgAdmin:

Trinn 1) Logg inn på pgAdmin-kontoen din. Åpne pgAdmin og logg inn på kontoen din med påloggingsinformasjonen din.

Trinn 2) Opprett en demodatabase.

  1. Fra navigasjonslinjen til venstre klikker du på Databaser.
  2. Klikk på Demo.

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Trinn 3) Skriv inn søket nedenfor i spørringsredigeringsprogrammet:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Trinn 4) Klikk på Utfør-knappen.

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Den skal returnere følgende:

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Med INSERT Statement

For å oppnå det samme gjennom pgAdmin, gjør dette:

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  1. Fra navigasjonslinjen til venstre klikker du på Databaser.
  2. Klikk på Demo.

EXISTS-setning i PostgreSQL ved å bruke pgAdmin

Trinn 3) Skriv inn søket i spørringsredigeringsprogrammet:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Trinn 4) Klikk på Utfør-knappen.

EXISTS-setning i PostgreSQL ved å bruke pgAdmin

Pristabellen skal nå være som følger:

EXISTS-setning i PostgreSQL ved å bruke pgAdmin

Med UPDATE-erklæring

For å oppnå det samme gjennom pgAdmin, gjør dette:

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  1. Fra navigasjonslinjen til venstre klikker du på Databaser.
  2. Klikk på Demo.

EXISTS-setning i PostgreSQL ved å bruke pgAdmin

Trinn 3) Skriv inn søket i spørringsredigeringsprogrammet:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

Trinn 4) Klikk på Utfør-knappen.

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Pristabellen skal nå være som følger:

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Med SLETT-erklæring

For å oppnå det samme gjennom pgAdmin, gjør dette:

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  1. Fra navigasjonslinjen til venstre klikker du på Databaser.
  2. Klikk på Demo.

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Trinn 3) Skriv inn søket i spørringsredigeringsprogrammet:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Trinn 4) Klikk på Utfør-knappen.

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Pristabellen skal nå være som følger:

PostgreSQL EXISTS-setning ved bruk av pgAdmin

Last ned databasen som brukes i denne opplæringen

Spørsmål og svar

EXISTS tester om en korrelert delspørring returnerer en hvilken som helst rad og stopper ved det første treffet, slik at den passer til store delspørringer. IN sammenligner en verdi mot en liste og tilpasser små, konstante sett.

NOT IN kan returnere null rader når delspørringen inneholder en NULL, fordi sammenligningen blir ukjent. NOT EXISTS ignorerer NULL-er og evaluerer hver rad riktig, noe som gjør den til det pålitelige valget for anti-joins.

En korrelert delspørring refererer til en kolonne fra den ytre spørringen, for eksempel WHERE Book.id = Price.id. EXISTS sjekker den på nytt for hver ytre rad og returnerer sann når et treff er funnet.

Ja. EXISTS returnerer sann så snart delspørringen produserer én rad, slik at den ikke skanner resten. Denne kortslutningsvirkemåten gjør den effektiv på store korrelerte delspørringer.

Nei. EXISTS sjekker bare om delspørringen returnerer en rad, så SELECT *, SELECT 1 eller SELECT id oppfører seg likt. Kolonnelisten i delspørringen påvirker ikke resultatet.

Indekser kolonnene som er koblet sammen i delspørringen, hold korrelasjonsbetingelsen Sargable, og kjør EXPLAIN ANALYZE. PostgreSQL omskriver ofte EXISTS som en effektiv semi-join når indekser støtter det.

AI-assistenter gjør om klarspråklige regler til EXISTS-klausuler, bygger den korrelerte delspørringen og advarer om NOT IN NULL-feller. De foreslår også indekser og EXPLAIN-tips for finjustering.

Ja. En AI-copilot oppdager delspørringsmønstre og omskriver IN som EXISTS eller NOT IN som NOT EXISTS, noe som forbedrer NULL-sikkerhet og ytelse på store tabeller.

Oppsummer dette innlegget med: