PostgreSQL Zeilen aus der Auswahl löschen

⚡ Intelligente Zusammenfassung

PostgreSQL Mit DELETE werden eine oder mehrere Zeilen aus einer Tabelle entfernt. In Kombination mit einer WHERE-Klausel werden nur die Datensätze ausgewählt, die einer bestimmten Bedingung entsprechen. Wird die WHERE-Klausel weggelassen, werden alle Zeilen in der Tabelle gelöscht.

  • đź“‹ Syntax: DELETE FROM Tabelle WHERE Bedingung entfernt ĂĽbereinstimmende Zeilen, und RETURNING kann die gelöschten Daten ausgeben.
  • 🎯 Eine Bedingung: Eine einzelne WHERE-Klausel löscht nur die Zeilen, die eine der Bedingungen erfĂĽllen.
  • âž• Zwei Bedingungen: Durch die VerknĂĽpfung zweier Tests mit UND wird die zu löschende Zeile auf bestimmte Zeilen beschränkt.
  • đź”— EXISTS-Klausel: EXISTS löscht Zeilen in einer Tabelle basierend auf ĂĽbereinstimmenden Datensätzen in einer anderen Tabelle.
  • ️ pgAdmin: Die gleichen Löschabfragen werden visuell ĂĽber den pgAdmin-Abfrageeditor ausgefĂĽhrt.
  • 🤖 KI-Sicherheit: KI-Assistenten fĂĽgen die korrekte WHERE-Klausel hinzu und warnen vor vollständigen Tabellenlöschungen.

PostgreSQL Zeilen aus Auswahl löschen

Abfrage löschen in PostgreSQL

Das DELETE-Anweisung in PostgreSQL Wird verwendet, um einen oder mehrere Datensätze aus einer Tabelle zu löschen. Um nur ausgewählte Zeilen aus einer Tabelle zu löschen, PostgreSQL Ermöglicht es Ihnen, die DELETE-Anweisung mit der WHERE-Klausel zu kombinieren; andernfalls werden alle Datensätze in der Tabelle gelöscht.

PostgreSQL Syntax für Löschabfragen

Die DELETE-Anweisung kann mit der folgenden Syntax definiert werden:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

Kenngrößen

Folgende Parameter stehen zur VerfĂĽgung:

  • mit-AbfrageMit der WITH-Klausel können Sie innerhalb der DELETE-Abfrage auf eine oder mehrere Unterabfragen anhand ihres Namens verweisen.
  • Tabellenname: der Name der Tabelle, aus der Datensätze gelöscht werden sollen.
  • alias: ein Ersatz fĂĽr den Namen der Zieltabelle.
  • using-list: TabellenausdrĂĽcke, die es ermöglichen, Spalten aus anderen Tabellen in der WHERE-Klausel zu verwenden.
  • Bedingungen)Optional. Dies sind die Bedingungen, die fĂĽr das Löschen von Datensätzen erfĂĽllt sein mĂĽssen. Wird dieser Abschnitt nicht angegeben, werden alle Datensätze mit dem Tabellennamen gelöscht.
  • CursornameDer Cursor, der in der WHERE CURRENT OF-Bedingung verwendet werden soll. Die letzte von diesem Cursor abgerufene Zeile wird gelöscht.
  • Ausgabeausdruck: der Ausdruck, der von der DELETE-Anweisung nach dem Löschen jeder Zeile verarbeitet und zurĂĽckgegeben wird.
  • Ausgabename: der Name, der fĂĽr die zurĂĽckgegebene Spalte verwendet werden soll.

Beachten Sie, dass die DELETE-Anweisung die gesamte Zeile löscht, daher müssen Sie die Spaltennamen nicht angeben.

PostgreSQL Abfrage mit einer Bedingung löschen

Die DELETE-Anweisung kann mit einer einzigen Bedingung verwendet werden, die mithilfe der WHERE-Klausel festgelegt wird. Betrachten Sie die Tabelle „Preis“ mit den folgenden Daten:

Preis:

PostgreSQL Abfrage mit einer Bedingung löschen

Löschen wir den Datensatz mit der ID 4:

DELETE FROM Price
WHERE id = 4;

Der obige Befehl löscht die Datensätze mit der ID 4. Lassen Sie uns überprüfen, ob das Löschen erfolgreich war:

PostgreSQL Abfrage mit einer Bedingung löschen

Die Zeile mit der ID 4 wurde gelöscht.

Abfrage mit zwei Bedingungen löschen

Das PostgreSQL Die DELETE-Anweisung kann auch zwei Bedingungen enthalten. Die beiden Bedingungen mĂĽssen mit dem AND-Operator verknĂĽpft werden. Wir verwenden dazu die folgende Tabelle:

Preis:

PostgreSQL Abfrage mit zwei Bedingungen löschen

Betrachten Sie das folgende Beispiel:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Im obigen Befehl löschen wir die Zeile mit der ID 3 und dem Preis 300. Wir können nun die Tabelle abfragen:

SELECT * FROM Price;

Dies gibt Folgendes zurĂĽck:

PostgreSQL Abfrage mit zwei Bedingungen löschen

Der Datensatz mit der ID 3 und dem Preis 300 wurde gelöscht.

PostgreSQL Löschabfrage mit EXISTS-Bedingung

Mit der VORHANDEN Unter bestimmten Bedingungen können Sie den DELETE-Vorgang komplexer gestalten. Manchmal kann es erforderlich sein, Datensätze in einer Tabelle basierend auf Datensätzen in einer anderen Tabelle zu löschen.

Da die FROM-Klausel beim Löschen keine Datensätze aus mehr als einer Tabelle auflistet, ist die EXISTS-Klausel sehr nützlich. Wir haben die folgenden zwei Tabellen:

Buch:

PostgreSQL Löschabfrage mit EXISTS-Bedingung

Preis:

PostgreSQL Löschabfrage mit EXISTS-Bedingung

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

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Der Befehl löscht Zeilen aus der Tabelle „Buch“, die eine übereinstimmende ID in der Tabelle „Preis“ mit einem Preis unter 250 haben.

Die Buchtabelle sieht nun wie folgt aus:

PostgreSQL Löschabfrage mit EXISTS-Bedingung

Der Datensatz mit der ID 1 wurde gelöscht.

Wie man eine Zeile löscht PostgreSQL mit pgAdmin

Die gleichen Löschabfragen können auch visuell über die pgAdmin-Oberfläche ausgeführt werden. Gehen Sie dazu wie folgt vor:

Mit einer Bedingung

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.

Zeile löschen in PostgreSQL mit pgAdmin

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

DELETE FROM Price
WHERE id = 4;

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

Zeile löschen in PostgreSQL mit pgAdmin

Schritt 5) Lassen Sie uns prüfen, ob die Zeile gelöscht wurde:

Zeile löschen in PostgreSQL mit pgAdmin

Mit zwei Bedingungen

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.

Zeile löschen in PostgreSQL mit pgAdmin

Schritt 3) Geben Sie die Abfrage im Abfrageeditor ein:

DELETE FROM Price
WHERE id = 3
AND price = 300;

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

Zeile löschen in PostgreSQL mit pgAdmin

Schritt 5) Lassen Sie uns prüfen, ob die Löschung erfolgreich war:

Zeile löschen in PostgreSQL mit pgAdmin

Verwendung der EXISTS-Bedingung

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.

Zeile mit der EXISTS-Bedingung in pgAdmin löschen

Schritt 3) Geben Sie die Abfrage im Abfrageeditor ein:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

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

Zeile mit der EXISTS-Bedingung in pgAdmin löschen

Schritt 5) Lassen Sie uns prüfen, ob die Löschung erfolgreich war:

Zeile mit der EXISTS-Bedingung in pgAdmin löschen

Laden Sie die in diesem Tutorial verwendete Datenbank herunter

Häufig gestellte Fragen

TRUNCATE entfernt sofort alle Zeilen und setzt den Speicher zurück, ignoriert dabei aber WHERE-Klauseln und zeilenbezogene Trigger. DELETE entfernt ausgewählte Zeilen mithilfe einer WHERE-Klausel, löst zeilenbezogene Trigger aus und kann innerhalb einer Transaktion rückgängig gemacht werden.

Fügen Sie eine USING-Klausel hinzu: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Dadurch wird die zweite Tabelle verknüpft und übereinstimmende Zeilen werden gelöscht. Das Ergebnis ist dasselbe wie bei EXISTS, jedoch mit einer übersichtlicheren Join-Syntax.

RETURNING gibt die Spalten der gerade gelöschten Zeilen in derselben Anweisung zurück. Schreiben Sie DELETE FROM Price WHERE id = 4 RETURNING *, und PostgreSQL Gibt die entfernten Daten zurück, damit Anwendungen die Änderung protokollieren oder bestätigen können.

Ja. Schließen Sie den DELETE-Befehl in eine Transaktion mit BEGIN ein und führen Sie anschließend ROLLBACK aus, um die Änderung rückgängig zu machen, oder COMMIT, um sie beizubehalten. Bis zum Commit können die gelöschten Zeilen wiederhergestellt werden, wodurch versehentliche Löschungen verhindert werden.

Behalten Sie pro Gruppe eine Kopie bei, indem Sie die ausgeblendete Spalte „ctid“ verwenden: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Dadurch werden doppelte Zeilen entfernt, während jeweils ein einzelner Datensatz erhalten bleibt.

Führen Sie zuerst denselben Filter als SELECT aus oder öffnen Sie eine Transaktion mit BEGIN und verwenden Sie RETURNING, um die betroffenen Zeilen zu untersuchen. RevDas Überprüfen des WHERE-Ergebnisses vor dem COMMIT verhindert, dass mehr Zeilen gelöscht werden als beabsichtigt.

KI-Assistenten übersetzen Regeln in einfacher Sprache in eine DELETE-Anweisung mit der korrekten WHERE-Klausel, schlagen EXISTS oder USING für tabellenübergreifende Löschvorgänge vor und kennzeichnen Anweisungen, denen eine Bedingung fehlt, die die gesamte Tabelle löschen würde.

Ja. Ein KI-Copilot prüft jeden DELETE-Vorgang, warnt, wenn keine WHERE-Klausel vorhanden ist, und empfiehlt eine Transaktion oder eine RETURNING-Vorschau, wodurch das Risiko eines versehentlichen vollständigen Tabellenlöschens verringert wird.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: