PostgreSQL EXISTS mit SELECT Operator (Beispiel)

⚡ Intelligente Zusammenfassung

PostgreSQL EXISTS ist ein boolescher Operator, der prüft, ob eine korrelierte Unterabfrage eine Zeile zurückgibt, wodurch SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen Daten effizient nach dem Vorhandensein oder Fehlen übereinstimmender Datensätze filtern können.

  • 📋 Syntax: WHERE EXISTS (Unterabfrage) gibt true zurück, wenn die Unterabfrage mindestens eine Zeile liefert.
  • 🔗 Korrelierte Unterabfrage: EXISTS verknüpft innere und äußere Abfragen und gleicht Zeilen anhand eines gemeinsamen Schlüssels ab.
  • ⚡ Kurzschluss: EXISTS stoppt bei der ersten übereinstimmenden Zeile und eignet sich daher gut für große Tabellen.
  • 🔁 Vier Aussagen: Der Operator funktioniert innerhalb von SELECT-, INSERT-, UPDATE- und DELETE-Abfragen.
  • 🛡️ EXISTIERT NICHT: Schließt Zeilen sicher aus und vermeidet die NULL-Falle, die zu einem Fehler in NOT IN führt.
  • 🤖 KI-Anfragen: Assistenten generieren EXISTS-Klauseln und kennzeichnen Leistungsrisiken durch korrelierte Unterabfragen.

PostgreSQL EXISTIERT mit Select OperaDo.

Was ist EXISTS in PostgreSQL?

Das PostgreSQL VORHANDEN Der Operator EXISTS prüft, ob eine oder mehrere Zeilen in einer Unterabfrage vorhanden sind. Er wird also immer zusammen mit einer Unterabfrage verwendet. Die Bedingung des Operators EXISTS ist erfüllt, wenn mindestens eine Zeile in der Unterabfrage gefunden wird. Diese Operation kann zusammen mit SELECT-, UPDATE-, INSERT- und DELETE-Anweisungen verwendet werden.

PostgreSQL EXISTS-Abfragesyntax

Hier ist die Syntax für PostgreSQL EXISTS-Anweisung:

WHERE EXISTS (subquery);

Die obige Syntax zeigt, dass der EXISTS-Operator ein Argument annimmt, das eine Unterabfrage ist. Die Unterabfrage ist einfach eine SELECT-Anweisung das sollte mit einem SELECT * statt einer Liste von Spaltennamen oder Ausdrücken beginnen.

PostgreSQL EXISTS mit SELECT-Anweisung

Schauen wir uns an, wie man eine SELECT-Anweisung mit dem EXISTS-Operator verwendet. Wir haben die folgenden Tabellen:

Buch:

PostgreSQL EXISTS mit SELECT-Anweisung

Preis:

PostgreSQL EXISTS mit SELECT-Anweisung

Führen Sie die folgende Anweisung aus:

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

Dies gibt Folgendes zurück:

PostgreSQL EXISTS mit SELECT-Anweisungsergebnis

Der obige Befehl sollte alle Datensätze in der Buchtabelle zurückgeben, deren ID mit der ID aller Datensätze der Unterabfrage übereinstimmt. Es wurde nur eine ID gefunden. Daher wurde nur ein Datensatz zurückgegeben.

PostgreSQL EXISTS mit INSERT-Anweisung

Wir können den EXISTS-Operator in einem INSERT-Anweisung. Wir haben die folgenden 3 Tabellen:

Buch:

PostgreSQL EXISTS mit INSERT-Anweisung

Preis:

PostgreSQL EXISTS mit INSERT-Anweisung

Preis2:

PostgreSQL EXISTS mit INSERT-Anweisung

Wir können dann die folgende Anweisung ausführen:

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

Die Preistabelle sieht nun wie folgt aus:

PostgreSQL EXISTS mit Ergebnis der INSERT-Anweisung

Die Zeile mit der ID 5 in der Tabelle „Price2“ wurde abgeglichen. Dieser Datensatz wurde dann in die Preistabelle eingefügt.

PostgreSQL EXISTS mit UPDATE-Anweisung

Wir können den EXISTS-Operator in einer UPDATE-Anweisung verwenden.

Führen Sie die folgende Abfrage aus:

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 mit UPDATE-Anweisung

Wir aktualisieren die Preisspalte der Preistabelle. Unser Ziel ist es, dass die Preise von Artikeln mit einer gemeinsamen ID gleich sind. Nur eine Zeile stimmte überein, nämlich 5.

Da die Preise jedoch gleich sind, also 205, wurde keine Aktualisierung vorgenommen. Wenn es einen Unterschied gäbe, wäre ein Update erfolgt.

PostgreSQL EXISTS mit DELETE-Anweisung

A PostgreSQL Die DELETE-Anweisung kann den EXISTS-Operator verwenden. Hier ist ein Beispiel:

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

Die Preistabelle sieht nun wie folgt aus:

PostgreSQL EXISTS mit DELETE-Anweisung

Die Zeile mit der ID 5 wurde gelöscht.

PostgreSQL EXISTS-Anweisung mit pgAdmin

Neben der SQL-Shell lassen sich dieselben EXISTS-Abfragen auch visuell über die pgAdmin-Oberfläche ausführen. Sehen wir uns nun an, wie diese Aktionen mit pgAdmin durchgeführt werden können:

Mit SELECT-Anweisung

Nachfolgend sind die Schritte zur Verwendung einer EXISTS-Abfrage aufgeführt. PostgreSQL mit einer SELECT-Anweisung unter Verwendung von pgAdmin:

Schritt 1) Melden Sie sich bei Ihrem pgAdmin-Konto an. Öffnen Sie pgAdmin und melden Sie sich mit Ihren Zugangsdaten an.

Schritt 2) Erstellen Sie eine Demo-Datenbank.

  1. Klicken Sie in der Navigationsleiste links auf Datenbanken.
  2. Klicken Sie auf Demo.

PostgreSQL EXISTS-Anweisung mit pgAdmin

Schritt 3) Geben Sie die folgende Abfrage in den Abfrageeditor ein:

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

Schritt 4) Klicken Sie auf die Schaltfläche „Ausführen“.

PostgreSQL EXISTS-Anweisung mit pgAdmin

Es sollte Folgendes zurückgeben:

PostgreSQL EXISTS-Anweisung mit pgAdmin

Mit INSERT-Anweisung

Um dasselbe über pgAdmin zu erreichen, gehen Sie wie folgt vor:

Schritt 1) Melden Sie sich bei Ihrem pgAdmin-Konto an.

Schritt 2)

  1. Klicken Sie in der Navigationsleiste links auf Datenbanken.
  2. Klicken Sie auf Demo.

EXISTS-Aussage in PostgreSQL mit pgAdmin

Schritt 3) Geben Sie die Abfrage im Abfrageeditor ein:

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

Schritt 4) Klicken Sie auf die Schaltfläche „Ausführen“.

EXISTS-Aussage in PostgreSQL mit pgAdmin

Die Preistabelle sollte nun wie folgt aussehen:

EXISTS-Aussage in PostgreSQL mit pgAdmin

Mit UPDATE-Anweisung

Um dasselbe über pgAdmin zu erreichen, gehen Sie wie folgt vor:

Schritt 1) Melden Sie sich bei Ihrem pgAdmin-Konto an.

Schritt 2)

  1. Klicken Sie in der Navigationsleiste links auf Datenbanken.
  2. Klicken Sie auf Demo.

EXISTS-Aussage in PostgreSQL mit pgAdmin

Schritt 3) Geben Sie die Abfrage im Abfrageeditor ein:

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

Schritt 4) Klicken Sie auf die Schaltfläche „Ausführen“.

PostgreSQL EXISTS-Anweisung mit pgAdmin

Die Preistabelle sollte nun wie folgt aussehen:

PostgreSQL EXISTS-Anweisung mit pgAdmin

Mit DELETE-Anweisung

Um dasselbe über pgAdmin zu erreichen, gehen Sie wie folgt vor:

Schritt 1) Melden Sie sich bei Ihrem pgAdmin-Konto an.

Schritt 2)

  1. Klicken Sie in der Navigationsleiste links auf Datenbanken.
  2. Klicken Sie auf Demo.

PostgreSQL EXISTS-Anweisung mit pgAdmin

Schritt 3) Geben Sie die Abfrage im Abfrageeditor ein:

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

Schritt 4) Klicken Sie auf die Schaltfläche „Ausführen“.

PostgreSQL EXISTS-Anweisung mit pgAdmin

Die Preistabelle sollte nun wie folgt aussehen:

PostgreSQL EXISTS-Anweisung mit pgAdmin

Laden Sie die in diesem Tutorial verwendete Datenbank herunter

Häufig gestellte Fragen

EXISTS prüft, ob eine korrelierte Unterabfrage eine Zeile zurückgibt und stoppt beim ersten Treffer; daher eignet sie sich für große Unterabfragen. IN vergleicht einen Wert mit einer Liste und ist für kleine, konstante Mengen geeignet.

NOT IN kann null Zeilen zurückgeben, wenn die Unterabfrage einen NULL-Wert enthält, da der Vergleich dann undefiniert ist. NOT EXISTS ignoriert NULL-Werte und wertet jede Zeile korrekt aus, wodurch es die zuverlässige Wahl für Anti-Joins ist.

Eine korrelierte Unterabfrage referenziert eine Spalte aus der äußeren Abfrage, z. B. WHERE Book.id = Price.id. EXISTS prüft dies für jede Zeile der äußeren Abfrage erneut und gibt true zurück, sobald eine Übereinstimmung gefunden wird.

Ja. EXISTS gibt „true“ zurück, sobald die Unterabfrage eine Zeile liefert, sodass die restlichen Zeilen nicht durchsucht werden. Dieses Kurzschlussverhalten macht die Abfrage bei großen, korrelierten Unterabfragen effizient.

Nein. EXISTS prüft lediglich, ob die Unterabfrage eine Zeile zurückgibt. Daher verhalten sich SELECT *, SELECT 1 und SELECT id gleich. Die Spaltenliste innerhalb der Unterabfrage hat keinen Einfluss auf das Ergebnis.

Indizieren Sie die innerhalb der Unterabfrage verknüpften Spalten, halten Sie die Korrelationsbedingung auf suchbar und führen Sie EXPLAIN ANALYZE aus. PostgreSQL EXISTS wird häufig als effizienter Semi-Join umgeschrieben, wenn die Indizes dies unterstützen.

KI-Assistenten wandeln Regeln in einfacher Sprache in EXISTS-Klauseln um, erstellen die zugehörige Unterabfrage und warnen vor NOT IN NULL-Fallen. Sie schlagen außerdem Indizes und EXPLAIN-Hinweise zur Optimierung vor.

Ja. Ein KI-Copilot erkennt Unterabfragemuster und schreibt IN als EXISTS oder NOT IN als NOT EXISTS um, wodurch die NULL-Sicherheit und die Leistung bei großen Tabellen verbessert werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: