Kategorien:

DML-Befehle – Allgemeines

DELETE

Entfernt Daten aus einer Tabelle mit einer optionalen WHERE-Klausel und/oder zusätzlichen Tabellen.

Wichtig

Im Gegensatz zu TRUNCATE TABLE löscht dieser Befehl nicht den Ladevorgang der externen Datei. Wenn Sie Zeilen löschen, die aus einer bereitgestellten Datei in die Tabelle geladen wurden, können Sie die Daten aus dieser Datei nur dann erneut laden, wenn Sie die Datei ändern und erneut bereitstellen.

Syntax

DELETE FROM <table_name>
            [ USING <additional_tables> ]
            [ WHERE <condition_query> ]

Erforderliche Parameter

Tabellenname

Gibt die Tabelle an, aus der die Zeilen entfernt werden.

Optionale Parameter

USING zusätzliche_Tabellen

Gibt eine oder mehrere Tabellen an, die zur Auswahl der zu entfernenden Zeilen verwendet werden sollen. Beachten Sie, dass die Wiederholung der Zieltabelle zu einer Selbstverknüpfung in der Tabelle, die verarbeitet werden soll, führt.

WHERE Abfragebedingung

Gibt eine Abfrage an, mit der die zu entfernenden Zeilen ausgewählt werden sollen. Wenn dieser Parameter weggelassen wird, werden alle Zeilen in der Tabelle entfernt (d. h. leere Tabelle), aber die Tabelle bleibt erhalten.

Nutzungshinweise

  • Beim Löschen auf der Grundlage von JOIN (durch Angabe einer USING-Klausel) ist es möglich, dass eine Zeile in der Zieltabelle mit mehreren Zeilen in der/den USING-Tabelle(n) verbunden wird. Wenn die DELETE-Bedingung für eine der verknüpften Kombinationen erfüllt ist, wird die Zielzeile gelöscht.

    Zum Beispiel, gegebene Tabellen tab1 und tab2 mit Spalten (k number, v number):

    select * from tab1;
    
    -------+-------+
       k   |   v   |
    -------+-------+
       0   |   10  |
    -------+-------+
    
    Select * from tab2;
    
    -------+-------+
       k   |   v   |
    -------+-------+
       0   |   20  |
       0   |   30  |
    -------+-------+
    

Wenn Sie die folgende Abfrage ausführen, wird die Zeile in tab1 mit beiden Zeilen von tab2 verbunden:

DELETE FROM tab1 USING tab2 WHERE tab1.k = tab2.k

Da mindestens ein verknüpftes Paar die Bedingung erfüllt, wird die Zeile gelöscht. Daher ist tab1 nach Abschluss der Anweisung leer.

Beispiele

DELETE FROM tab1
  USING tab2
  WHERE tab1.key_column = tab2.tab1_key AND tab2.number_column < 10;