PostgreSQL BESTAAT met SELECT Operator (Voorbeeld)

โšก Slimme samenvatting

PostgreSQL EXISTS is een Booleaanse operator die test of een gecorreleerde subquery een rij retourneert, waardoor SELECT-, INSERT-, UPDATE- en DELETE-instructies gegevens efficiรซnt kunnen filteren op basis van de aanwezigheid of afwezigheid van overeenkomende records.

  • ๐Ÿ“‹ Syntax: De WHERE EXISTS (subquery) retourneert true wanneer de subquery ten minste รฉรฉn rij oplevert.
  • ๐Ÿ”— Gecorreleerde subquery: EXISTS koppelt interne en externe query's aan elkaar en vergelijkt rijen op basis van een gedeelde sleutel.
  • โšก Kortsluiting: EXISTS stopt bij de eerste overeenkomende rij, waardoor het goed schaalbaar is voor grote tabellen.
  • ๐Ÿ” Vier beweringen: De operator werkt binnen SELECT-, INSERT-, UPDATE- en DELETE-query's.
  • ๐Ÿ›ก๏ธ BESTAAT NIET: Sluit rijen veilig uit en voorkomt de NULL-val die NOT IN onbruikbaar maakt.
  • ๐Ÿค– AI-vragen: Assistenten genereren EXISTS-clausules en signaleren prestatierisico's die samenhangen met subquery's.

PostgreSQL BESTAAT met Selecteren Operator

Wat bestaat er in PostgreSQL?

De PostgreSQL BESTAAT De EXISTS-operator test of een of meer rijen in een subquery voorkomen. Dit betekent dat de operator samen met een subquery wordt gebruikt. Er wordt gezegd dat aan de EXISTS-operator is voldaan wanneer er ten minste รฉรฉn rij in de subquery wordt gevonden. U kunt deze bewerking gebruiken in combinatie met SELECT-, UPDATE-, INSERT- en DELETE-instructies.

PostgreSQL EXISTS-querysyntaxis

Hier is de syntaxis voor de PostgreSQL EXISTS-verklaring:

WHERE EXISTS (subquery);

De bovenstaande syntaxis laat zien dat de EXISTS-operator een argument accepteert, wat een subquery is. De subquery is simpelweg een SELECT-instructie dat moet beginnen met een SELECT * in plaats van een lijst met kolomnamen of expressies.

PostgreSQL EXISTS met SELECT-instructie

Laten we eens kijken hoe we een SELECT-instructie met de EXISTS-operator kunnen gebruiken. We hebben de volgende tabellen:

Boek:

PostgreSQL EXISTS met SELECT-instructie

Prijs:

PostgreSQL EXISTS met SELECT-instructie

Voer de volgende instructie uit:

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

Dit geeft het volgende terug:

PostgreSQL EXISTS met SELECT-statementresultaat

De bovenstaande opdracht zou alle records in de Boek-tabel moeten retourneren waarvan de id overeenkomt met de id van alle records in de subquery. Er kwam slechts รฉรฉn ID overeen. Er werd dus slechts รฉรฉn record geretourneerd.

PostgreSQL BESTAAT met INVOEGINSTRUCTIE

We kunnen de EXISTS-operator gebruiken in een INSERT-verklaring. We hebben de volgende 3 tabellen:

Boek:

PostgreSQL BESTAAT met INVOEGINSTRUCTIE

Prijs:

PostgreSQL BESTAAT met INVOEGINSTRUCTIE

Prijs2:

PostgreSQL BESTAAT met INVOEGINSTRUCTIE

We kunnen dan de volgende verklaring uitvoeren:

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

De prijstabel ziet er nu als volgt uit:

PostgreSQL BESTAAT met INSERT-instructieresultaat

De rij met ID 5 in de tabel met de naam Price2 is gematcht. Dit record werd vervolgens ingevoegd in de prijstabel.

PostgreSQL BESTAAT met UPDATE-verklaring

We kunnen de EXISTS-operator gebruiken in een UPDATE-instructie.

Voer de volgende query uit:

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 BESTAAT met UPDATE-verklaring

We werken de prijskolom van de prijstabel bij. Ons doel is om de prijzen van artikelen met een gedeeld ID hetzelfde te laten zijn. Er kwam slechts รฉรฉn rij overeen, dat wil zeggen 5.

Omdat de prijzen echter gelijk zijn, dat wil zeggen 205, is er geen update uitgevoerd. Als er een verschil was geweest, zou er een update zijn uitgevoerd.

PostgreSQL BESTAAT met DELETE-instructie

A PostgreSQL De DELETE-instructie kan de EXISTS-operator gebruiken. Hier is een voorbeeld:

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

De prijstabel ziet er nu als volgt uit:

PostgreSQL BESTAAT met DELETE-instructie

De rij met ID 5 is verwijderd.

PostgreSQL EXISTS-instructie met pgAdmin

Naast de SQL-shell kunnen dezelfde EXISTS-query's ook visueel worden uitgevoerd via de pgAdmin-interface. Laten we nu eens kijken hoe deze acties met pgAdmin kunnen worden uitgevoerd:

Met een SELECT-instructie

Hieronder volgen de stappen voor het gebruik van een EXISTS-query in PostgreSQL met een SELECT-instructie via pgAdmin:

Stap 1) Log in op uw pgAdmin-account. Open pgAdmin en log in met uw inloggegevens.

Stap 2) Maak een demo-database aan.

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. Klik op Demo.

PostgreSQL EXISTS-instructie met pgAdmin

Stap 3) Typ de onderstaande query in de query-editor:

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

Stap 4) Klik op de knop Uitvoeren.

PostgreSQL EXISTS-instructie met pgAdmin

Het volgende zou moeten worden geretourneerd:

PostgreSQL EXISTS-instructie met pgAdmin

Met INSERT-verklaring

Om hetzelfde te bereiken via pgAdmin, doet u het volgende:

Stap 1) Log in op uw pgAdmin-account.

Stap 2)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. Klik op Demo.

BESTAAT Verklaring in PostgreSQL met behulp van pgAdmin

Stap 3) Typ de query in de query-editor:

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

Stap 4) Klik op de knop Uitvoeren.

BESTAAT Verklaring in PostgreSQL met behulp van pgAdmin

De prijstabel zou er nu als volgt uit moeten zien:

BESTAAT Verklaring in PostgreSQL met behulp van pgAdmin

Met UPDATE-verklaring

Om hetzelfde te bereiken via pgAdmin, doet u het volgende:

Stap 1) Log in op uw pgAdmin-account.

Stap 2)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. Klik op Demo.

BESTAAT Verklaring in PostgreSQL met behulp van pgAdmin

Stap 3) Typ de query in de query-editor:

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

Stap 4) Klik op de knop Uitvoeren.

PostgreSQL EXISTS-instructie met pgAdmin

De prijstabel zou er nu als volgt uit moeten zien:

PostgreSQL EXISTS-instructie met pgAdmin

Met DELETE-verklaring

Om hetzelfde te bereiken via pgAdmin, doet u het volgende:

Stap 1) Log in op uw pgAdmin-account.

Stap 2)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. Klik op Demo.

PostgreSQL EXISTS-instructie met pgAdmin

Stap 3) Typ de query in de query-editor:

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

Stap 4) Klik op de knop Uitvoeren.

PostgreSQL EXISTS-instructie met pgAdmin

De prijstabel zou er nu als volgt uit moeten zien:

PostgreSQL EXISTS-instructie met pgAdmin

Download de database die in deze zelfstudie wordt gebruikt

Veelgestelde vragen

EXISTS test of een gecorreleerde subquery een rij retourneert en stopt bij de eerste overeenkomst, waardoor het geschikt is voor grote subqueries. IN vergelijkt een waarde met een lijst en is geschikt voor kleine, constante sets.

NOT IN kan nul rijen retourneren wanneer de subquery een NULL-waarde bevat, omdat de vergelijking dan onbekend wordt. NOT EXISTS negeert NULL-waarden en evalueert elke rij correct, waardoor het de betrouwbare keuze is voor anti-joins.

Een gecorreleerde subquery verwijst naar een kolom uit de buitenste query, bijvoorbeeld WHERE Book.id = Price.id. EXISTS controleert dit opnieuw voor elke rij in de buitenste query en retourneert true zodra een overeenkomst is gevonden.

Ja. EXISTS retourneert true zodra de subquery รฉรฉn rij oplevert, waardoor de rest niet wordt gescand. Dit 'short-circuit'-gedrag maakt het efficiรซnt bij grote, gecorreleerde subqueries.

Nee. EXISTS controleert alleen of de subquery een rij retourneert, dus SELECT *, SELECT 1 of SELECT id gedragen zich hetzelfde. De kolomlijst binnen de subquery heeft geen invloed op het resultaat.

Indexeer de kolommen die in de subquery zijn samengevoegd, houd de correlatievoorwaarde sargable en voer EXPLAIN ANALYZE uit. PostgreSQL EXISTS wordt vaak herschreven als een efficiรซnte semi-join wanneer indexen dit ondersteunen.

AI-assistenten zetten regels in gewone taal om in EXISTS-clausules, bouwen de bijbehorende subquery op en waarschuwen voor NOT IN NULL-fouten. Ze suggereren ook indexen en EXPLAIN-hints voor optimalisatie.

Ja. Een AI Copilot detecteert subquerypatronen en herschrijft IN naar EXISTS of NOT IN naar NOT EXISTS, waardoor de NULL-veiligheid en de prestaties op grote tabellen worden verbeterd.

Vat dit bericht samen met: