PostgreSQL FINNS med SELECT Operator (Exempel)

โšก Smart sammanfattning

PostgreSQL EXISTS รคr en boolesk operator som testar om en korrelerad delfrรฅga returnerar nรฅgon rad, vilket gรถr att SELECT-, INSERT-, UPDATE- och DELETE-satser effektivt kan filtrera data efter nรคrvaron eller frรฅnvaron av matchande poster.

  • ๐Ÿ“‹ Syntax: WHERE EXISTS (delfrรฅga) returnerar sant nรคr delfrรฅgan ger minst en rad.
  • ๐Ÿ”— Korrelerad delfrรฅga: EXISTS lรคnkar inre och yttre frรฅgor och matchar rader pรฅ en delad nyckel.
  • โšก Kortslutning: EXISTS stannar vid den fรถrsta matchande raden, sรฅ den skalas bra i stora tabeller.
  • ๐Ÿ” Fyra pรฅstรฅenden: Operatorn fungerar inuti SELECT-, INSERT-, UPDATE- och DELETE-frรฅgor.
  • ๐Ÿ›ก๏ธ FINNS INTE: Exkluderar rader pรฅ ett sรคkert sรคtt och undviker NULL-fรคllan som bryts NOT IN.
  • ๐Ÿค– AI-frรฅgor: Assistenter genererar EXISTS-klausuler och flaggar prestandarisker fรถr korrelerade underfrรฅgor.

PostgreSQL FINNS med Select Operator

Vad som FINNS i PostgreSQL?

Ocuco-landskapet PostgreSQL EXISTS Operatorn testar om en rad(er) finns i en delfrรฅga. Det betyder att operatorn anvรคnds tillsammans med en delfrรฅga. EXISTS-operatorn sรคgs vara uppfylld nรคr minst en rad hittas i delfrรฅgan. Du kan anvรคnda den hรคr operationen tillsammans med SELECT-, UPDATE-, INSERT- och DELETE-satser.

PostgreSQL EXISTS-frรฅgesyntax

Hรคr รคr syntaxen fรถr PostgreSQL EXISTS uttalande:

WHERE EXISTS (subquery);

Ovanstรฅende syntax visar att operatorn EXISTS tar in ett argument, som รคr en underfrรฅga. Underfrรฅgan รคr helt enkelt en SELECT-sats som bรถr bรถrja med en SELECT * istรคllet fรถr en lista med kolumnnamn eller uttryck.

PostgreSQL EXISTS med SELECT-sats

Lรฅt oss se hur man anvรคnder en SELECT-sats med EXISTS-operatorn. Vi har fรถljande tabeller:

Bok:

PostgreSQL EXISTS med SELECT-sats

Pris:

PostgreSQL EXISTS med SELECT-sats

Kรถr fรถljande uttalande:

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

Detta returnerar fรถljande:

PostgreSQL EXISTS med SELECT-satsresultat

Ovanstรฅende kommando bรถr returnera alla poster i boktabellen vars id matchar id:t fรถr alla poster av underfrรฅgan. Endast ett id matchades. Dรคrfรถr returnerades endast en post.

PostgreSQL EXISTS med INSERT-sats

Vi kan anvรคnda operatorn EXISTS i en INSERT-sats. Vi har fรถljande 3 tabeller:

Bok:

PostgreSQL EXISTS med INSERT-sats

Pris:

PostgreSQL EXISTS med INSERT-sats

Pris2:

PostgreSQL EXISTS med INSERT-sats

Vi kan sedan kรถra fรถljande uttalande:

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

Pristabellen รคr nu som fรถljer:

PostgreSQL EXISTS med INSERT-satsresultat

Raden med id 5 i tabellen med namnet Price2 matchades. Denna post infogades sedan i pristabellen.

PostgreSQL EXISTS med UPDATE-sats

Vi kan anvรคnda operatorn EXISTS i en UPDATE-sats.

Kรถr fรถljande frรฅga:

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-sats

Vi uppdaterar priskolumnen i pristabellen. Vรฅrt mรฅl รคr att priserna pรฅ varor som delar ett id ska vara desamma. Endast en rad matchades, det vill sรคga 5.

Men eftersom priserna รคr lika, det vill sรคga 205, gjordes ingen uppdatering. Om det funnits nรฅgon skillnad hade en uppdatering gjorts.

PostgreSQL EXISTS med DELETE-sats

A PostgreSQL DELETE-satsen kan anvรคnda operatorn EXISTS. Hรคr รคr ett exempel:

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

Pristabellen รคr nu som fรถljer:

PostgreSQL EXISTS med DELETE-sats

Raden med id 5 har tagits bort.

PostgreSQL EXISTS-instruktion med pgAdmin

Utรถver SQL-skalet kan samma EXISTS-frรฅgor kรถras visuellt via pgAdmin-grรคnssnittet. Lรฅt oss nu se hur dessa รฅtgรคrder kan utfรถras med pgAdmin:

Med SELECT-sats

Nedan fรถljer stegen fรถr att anvรคnda en EXISTS-frรฅga i PostgreSQL med en SELECT-sats med hjรคlp av pgAdmin:

Steg 1) Logga in pรฅ ditt pgAdmin-konto. ร–ppna pgAdmin och logga in pรฅ ditt konto med dina inloggningsuppgifter.

Steg 2) Skapa en demodatabas.

  1. Klicka pรฅ Databaser i navigeringsfรคltet till vรคnster.
  2. Klicka pรฅ Demo.

PostgreSQL EXISTS-instruktion med pgAdmin

Steg 3) Skriv in frรฅgan nedan i frรฅgeredigeraren:

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

Steg 4) Klicka pรฅ knappen Kรถr.

PostgreSQL EXISTS-instruktion med pgAdmin

Det bรถr returnera fรถljande:

PostgreSQL EXISTS-instruktion med pgAdmin

Med INSERT uttalande

Fรถr att รฅstadkomma samma sak genom pgAdmin, gรถr sรฅ hรคr:

Steg 1) Logga in pรฅ ditt pgAdmin-konto.

Steg 2)

  1. Klicka pรฅ Databaser i navigeringsfรคltet till vรคnster.
  2. Klicka pรฅ Demo.

EXISTS-uttryck i PostgreSQL med pgAdmin

Steg 3) Skriv in frรฅgan i frรฅgeredigeraren:

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

Steg 4) Klicka pรฅ knappen Kรถr.

EXISTS-uttryck i PostgreSQL med pgAdmin

Pristabellen bรถr nu vara fรถljande:

EXISTS-uttryck i PostgreSQL med pgAdmin

Med UPPDATERING

Fรถr att รฅstadkomma samma sak genom pgAdmin, gรถr sรฅ hรคr:

Steg 1) Logga in pรฅ ditt pgAdmin-konto.

Steg 2)

  1. Klicka pรฅ Databaser i navigeringsfรคltet till vรคnster.
  2. Klicka pรฅ Demo.

EXISTS-uttryck i PostgreSQL med pgAdmin

Steg 3) Skriv in frรฅgan i frรฅgeredigeraren:

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);

Steg 4) Klicka pรฅ knappen Kรถr.

PostgreSQL EXISTS-instruktion med pgAdmin

Pristabellen bรถr nu vara fรถljande:

PostgreSQL EXISTS-instruktion med pgAdmin

Med DELETE Statement

Fรถr att รฅstadkomma samma sak genom pgAdmin, gรถr sรฅ hรคr:

Steg 1) Logga in pรฅ ditt pgAdmin-konto.

Steg 2)

  1. Klicka pรฅ Databaser i navigeringsfรคltet till vรคnster.
  2. Klicka pรฅ Demo.

PostgreSQL EXISTS-instruktion med pgAdmin

Steg 3) Skriv in frรฅgan i frรฅgeredigeraren:

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

Steg 4) Klicka pรฅ knappen Kรถr.

PostgreSQL EXISTS-instruktion med pgAdmin

Pristabellen bรถr nu vara fรถljande:

PostgreSQL EXISTS-instruktion med pgAdmin

Ladda ner den databas som anvรคnds i denna handledning

Vanliga frรฅgor

EXISTS testar om en korrelerad delfrรฅga returnerar nรฅgon rad och stannar vid den fรถrsta matchningen, sรฅ att den passar stora delfrรฅgor. IN jรคmfรถr ett vรคrde mot en lista och anpassar smรฅ, konstanta mรคngder.

NOT IN kan returnera noll rader nรคr delfrรฅgan innehรฅller ett NULL-vรคrde, eftersom jรคmfรถrelsen blir okรคnd. NOT EXISTS ignorerar NULL-vรคrden och utvรคrderar varje rad korrekt, vilket gรถr det till ett pรฅlitligt val fรถr anti-joins.

En korrelerad delfrรฅga refererar till en kolumn frรฅn den yttre frรฅgan, till exempel WHERE Book.id = Price.id. EXISTS kontrollerar den igen fรถr varje yttre rad och returnerar sant nรคr en matchning hittas.

Ja. EXISTS returnerar sant sรฅ snart delfrรฅgan producerar en rad, sรฅ den skannar inte resten. Detta kortslutningsbeteende gรถr den effektiv pรฅ stora korrelerade delfrรฅgor.

Nej. EXISTS kontrollerar bara om delfrรฅgan returnerar en rad, sรฅ SELECT *, SELECT 1 eller SELECT id beter sig likadant. Kolumnlistan i delfrรฅgan pรฅverkar inte resultatet.

Indexera kolumnerna som รคr kopplade inuti delfrรฅgan, behรฅll korrelationsvillkoret Sargable och kรถr EXPLAIN ANALYZE. PostgreSQL skriver ofta om EXISTS som en effektiv semi-join nรคr index stรถder det.

AI-assistenter omvandlar vanliga engelska regler till EXISTS-klausuler, bygger den korrelerade delfrรฅgan och varnar fรถr NOT IN NULL-fรคllor. De fรถreslรฅr ocksรฅ index och EXPLAIN-tips fรถr finjustering.

Ja. En AI-copilot upptรคcker delfrรฅgemรถnster och skriver om IN som EXISTS eller NOT IN som NOT EXISTS, vilket fรถrbรคttrar NULL-sรคkerhet och prestanda pรฅ stora tabeller.

Sammanfatta detta inlรคgg med: