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: