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: