Firebird Documentation IndexFirebird 2.5 SprachreferenzStatements der Data Manipulation Language (DML) → DELETE
Firebird Home Firebird Home Zurück: UPDATE OR INSERTFirebird Documentation IndexNach oben: Statements der Data Manipulation Language (DML)Weiter: MERGE

DELETE

Inhaltsverzeichnis

Aliases
WHERE
PLAN
ORDER BY und ROWS
RETURNING

Verwendet für:  Löschen von Zeilen aus einer Tabelle oder Ansicht

Verfügbar in: DSQL, ESQL, PSQL

Syntax: 

DELETE
   FROM {target} [[AS] alias]
   [WHERE {search-conditions | CURRENT OF cursorname}]
   [PLAN plan_items]
   [ORDER BY sort_items]
   [ROWS <m> [TO <n>]]
   [RETURNING <returning_list> [INTO <variables>]]

<m>, <n>     ::=  Any expression evaluating to an integer.
<returning_list>     ::=  ret_value [, ret_value ...]
<variables>  ::=  :varname [, :varname ...]
          

Tabelle 6.14. Argumente der DELETE-Statement-Parameter

Argument Beschreibung
target Der Name der Tabelle oder Sicht, aus der die Datensätze gelöscht werden sollen
alias Alias für die Zieltabelle oder -ansicht
search-conditions Suchbedingung, die den Satz von Zeilen begrenzt, die zum Löschen vorgesehen sind
cursorname Der Name des Cursors, in dem der aktuelle Datensatz zum Löschen positioniert ist
plan_items Abfrageplanklausel
sort_items ORDER BY-Klausel
m, n Integer-Ausdrücke zum Begrenzen der Anzahl der gelöschten Zeilen
ret_value Ein Ausdruck, der in der RETURNING-Klausel zurückgegeben werden soll
varname Name einer PSQL-Variablen


Beschreibung: DELETE entfernt Zeilen aus einer Datenbanktabelle oder aus einer oder mehreren Tabellen, die einer Sicht zugrunde liegen. WHERE und ROWS-Klauseln können die Anzahl der gelöschten Zeilen begrenzen. Wenn weder WHERE noch ROWS vorhanden ist, löscht DELETE alle Zeilen in der Beziehung.

Aliases

Wenn für die Zieltabelle oder -sicht ein Alias angegeben ist, muss dieser verwendet werden, um alle Feldnamenreferenzen in der Anweisung DELETE zu qualifizieren.

Beispiele: 

Unterstützte Verwendung:

delete from Cities where name starting 'Alex'
delete from Cities where Cities.name starting 'Alex'
delete from Cities C where name starting 'Alex'
delete from Cities C where C.name starting 'Alex'

Nicht möglich:

delete from Cities C where Cities.name starting 'Alex'

WHERE

Die WHERE-Klausel legt die Bedingungen fest, die den Satz von Datensätzen für ein searched delete begrenzen.

Wenn in PSQL ein benannter Cursor zum Löschen eines Satzes verwendet wird und die Klausel WHERE CURRENT OF verwendet wird, ist die Aktion auf die Zeile beschränkt, in der sich der Cursor gerade befindet. Dies ist ein positioniertes Update.

Anmerkung

Die Klausel WHERE CURRENT OF ist nur in PSQL und ESQL verfügbar, da es keine Anweisung zum Erstellen und Bearbeiten eines expliziten Cursors in DSQL gibt. Gesuchte Löschungen sind natürlich auch in PSQL verfügbar.

Beispiele: 

DELETE FROM People
  WHERE firstname <> 'Boris' AND lastname <> 'Johnson'
         
DELETE FROM employee e
  WHERE NOT EXISTS(
    SELECT *
    FROM employee_project ep
     WHERE e.emp_no = ep.emp_no);
         
DELETE FROM Cities
  WHERE CURRENT OF Cur_Cities;  -- ESQL and PSQL only
         

PLAN

Eine PLAN-Klausel erlaubt dem Benutzer die Operation manuell zu optimieren.

Beispiel: 

DELETE FROM Submissions
  WHERE date_entered < '1-Jan-2002'
  PLAN (Submissions INDEX ix_subm_date);
          

ORDER BY und ROWS

Die Klausel ORDER BY sortiert die Menge vor dem eigentlichen Löschen. Es ist nur in Kombination mit ROWS sinnvoll, aber auch ohne gültig.

Die Klausel ROWS begrenzt die Anzahl der gelöschten Zeilen. Integer-Literale oder beliebige Integer-Ausdrücke können für die Argumente m und n verwendet werden.

Wenn ROWS ein Argument m hat, sind die zu löschenden Zeilen auf die ersten m Zeilen beschränkt.

Wichtige Punkte: 

  • Wenn m > der Anzahl zu verarbeitender Zeilen, wird der gesamte Zeilensatz gelöscht
  • Wenn m = 0, werden keine Zeilen gelöscht
  • Wenn m < 0, tritt ein Fehler auf und die Löschung schlägt fehl

Werden die zwei Argumente m und n verwendet, begrenzt ROWSdie Anzahl der zu löschenden Zeilen, inklusive m bis n. Beide Argumente sind Ganzzahlen und beginnen bei 1.

Wichtige Punkte: 

  • Wenn m > der Anzahl der zu verarbeitenden Zeilen, wird keine Zeile gelöscht
  • Wenn m > 0 und <= der Anzahl der Zeilen im Satz und n außerhalb dieser Werte liegt, werden die Zeilen von m bis zum Ende des Satzes gelöscht
  • Wenn m < 1 oder n < 1, wird ein Fehler ausgegeben und das Löschen schlägt fehl
  • Wenn n = m - 1, werden keine Zeilen gelöscht
  • Wenn n < m -1, wird ein Fehler ausgegeben und das Löschen schlägt fehl

Beispiele: 

Löschen des ältesten Kaufs:

DELETE FROM Purchases
  ORDER BY date ROWS 1
            

Löschen der höchsten Kundennummer(n):

DELETE FROM Sales
  ORDER BY custno DESC ROWS 1 to 10
            

Löschen aller Verkäufe, ORDER BY-Klausel ist sinnlos:

DELETE FROM Sales
  ORDER BY custno DESC
            

Löschen eines Datensatzes beginnend vom Ende, z.B. von Z…:

DELETE FROM popgroups
  ORDER BY name DESC ROWS 1
            

Löschen der fünf ältesten Gruppen:

DELETE FROM popgroups
  ORDER BY formed ROWS 5
            

Es wird keine Sortierung (ORDER BY) angegeben, so dass 8 gefundene Datensätze, beginnend mit dem fünften, gelöscht werden:

DELETE FROM popgroups
  ROWS 5 TO 12
            

RETURNING

Eine Anweisung DELETE, die in höchstens einer Zeile löscht, kann optional eine Klausel RETURNING enthalten, um Werte aus der gelöschten Zeile zurückzugeben. Die Klausel muss, falls vorhanden, nicht alle Spalten der Beziehung enthalten und kann auch andere Spalten oder Ausdrücke enthalten.

Hinweise

  • In DSQL gibt eine Anweisung mit RETURNING immer einen Singleton zurück, niemals einen Satz mit mehreren Zeilen. Wenn keine Datensätze gelöscht werden, enthalten die zurückgegebenen Spalten NULL. Dieses Verhalten kann sich in zukünftigen Firebird-Versionen ändern
  • Die INTO-Klausel ist nur in PSQL verfügbar
    • Wenn die Zeile nicht gelöscht wird, wird nichts zurückgegeben und die Zielvariablen behalten ihre Werte bei

Beispiele: 

DELETE FROM Scholars
  WHERE firstname = 'Henry' and lastname = 'Higgins'
  RETURNING lastname, fullname, id
            
DELETE FROM Dumbbells
  ORDER BY iq DESC
  ROWS 1
  RETURNING lastname, iq into :lname, :iq;
            

Das Problem mit dem „instabilen Cursor

Aufgrund der Art und Weise, in der die Ausführung der datenverändernden DML in Firebird bis einschließlich dieser Version implementiert wird, führen die zum Löschen bestimmten Sätze manchmal zu unerwarteten Ergebnissen. Weitere Informationen finden Sie unter Das Problem mit dem „instabilen Cursor“ Problem im Abschnitt UPDATE.

Zurück: UPDATE OR INSERTFirebird Documentation IndexNach oben: Statements der Data Manipulation Language (DML)Weiter: MERGE
Firebird Documentation IndexFirebird 2.5 SprachreferenzStatements der Data Manipulation Language (DML) → DELETE