Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

DELETE-Anweisung

Mit dieser Anweisung löschen Sie Zeilen in der Datenbank.

Syntax
DELETE [ Zeilenbeschränkung ] 
[ FROM ] [ Eigentümer.]Tabellenausdruck
[ FROM Tabellenliste [,...] ]
[ WHERE Suchbedingung ]
[ ORDER BY { Ausdruck | Ganzzahl } [ ASC | DESC ], ... ]
[ OPTION( Abfrage-Hint, ... ) ]
Tabellenliste : 
Tabellenname [,...]  
Tabellenname : 
[ Eigentümer.]Basistabellenname [ [ AS ] Korrelationsname ]
| [ Eigentümer:.]Ansichtsname [ [ AS ] Korrelationsname ]
| Abgeleitete_Tabelle
Abgeleitete_Tabelle : 
( Select-Anweisung ) 
[ AS ] Korrelationsname [ ( Spaltenname [,... ] ) ]
Zeilenbeschränkung :
  FIRST | TOP n [ START AT m ]
Abfrage-Hint :
MATERIALIZED VIEW OPTIMIZATION Optionswert
| FORCE OPTIMIZATION
| FORCE NO OPTIMIZATION
| Optionsname = Optionswert
Tabellenausdruck: Ein vollständiger Tabellenausdruck, der Joins enthalten kann. Weitere Hinweise finden Sie unter FROM-Klausel.
Optionsname : Bezeichner
Optionswert : Hostvariable (Bezeichner zulässig), Zeichenfolge, Bezeichner oder Zahl
Parameter
  • Zeilenbeschränkungsklausel   Die Zeilenbeschränkungsklausel ermöglicht es Ihnen, eine Teilmenge der Zeilen zurückzugeben, die von der WHERE-Klausel erfasst werden. Die TOP- und START AT-Werte können eine Hostvariable, eine Ganzzahlkonstante oder eine Ganzzahlvariable sein. Der TOP-Wert muss mindestens 0 sein. Der START AT-Wert muss größer als 0 sein. Wenn diese Klauseln angegeben werden, wird normalerweise auch eine ORDER BY-Klausel angegeben, um die Zeilen sinnvoll zu ordnen. Weitere Hinweise finden Sie unter Die Anzahl der Zeilen, die von einer Abfrage zurückgegeben werden, explizit beschränken.

  • FROM-Klausel   Die FROM-Klausel gibt die Tabelle an, aus der Zeilen gelöscht werden sollen. Die zweite FROM-Klausel in der DELETE-Anweisung gibt die Zeilen an, die aus der angegebenen Tabelle basierend auf Joins gelöscht werden sollen. Wenn die zweite FROM-Klausel vorliegt, qualifiziert die WHERE-Klausel die Zeilen dieser zweiten FROM-Klausel.

    Die Klausel FROM Tabellenausdruck ermöglicht Löschungen auf der Basis von Joins. Der Tabellenausdruck kann beliebig komplexe Tabellenausdrücke wie KEY- und NATURAL-Joins enthalten. Eine ausführliche Beschreibung zur FROM-Klausel und zu Joins finden Sie unter FROM-Klausel.

    Die folgende Anweisung veranschaulicht eine potenzielle Mehrdeutigkeit bei Tabellennamen in DELETE-Anweisungen mit zwei FROM-Klauseln, die Korrelationsnamen verwenden:
    DELETE
    FROM table_1
    FROM table_1 AS alias_1, table_2 AS alias_2
    WHERE ...

    Die Tabelle table_1 hat keinen Korrelationsnamen in der ersten FROM-Klausel, wohl aber in der zweiten FROM-Klausel. In diesem Fall wird Tabelle_1 in der ersten Klausel mit Alias_1 in der zweiten Klausel identifiziert: es gibt nur eine Instanz von Tabelle_1 in dieser Anweisung. Hierbei handelt es sich um eine zulässige Ausnahme der allgemeinen Regel, dass dort, wo eine Tabelle mit einem Korrelationsnamen in derselben Anweisung identifiziert wird, zwei Instanzen der Tabelle berücksichtigt werden.

    Im folgenden Beispiel gibt es aber zwei Instanzen von table_1 in der zweiten FROM-Klausel. Die Anweisung schlägt mit einem Syntaxfehler fehl, da es unklar ist, welche Instanz von table_1 in der zweiten FROM-KLausel mit der ersten Instanz von table_1 in der ersten FROM-Klausel übereinstimmt.

    DELETE
    FROM table_1
    FROM table_1 AS alias_1, table_1 AS alias_2
    WHERE ...

  • WHERE-Klausel   Die DELETE-Anweisung löscht alle Zeilen, welche die Bedingungen in der WHERE-Klausel erfüllen. Wenn keine WHERE-Klausel angegeben ist, werden alle Zeilen der benannten Tabelle gelöscht. Wenn eine zweite FROM-Klausel vorliegt, qualifiziert die WHERE-Klausel die Zeilen dieser zweiten FROM-Klausel.

  • ORDER BY-Klausel   Gibt die Sortierreihenfolge für die Zeilen an. Normalerweise spielt die Reihenfolge, in der Zeilen aktualisiert werden, keine Rolle. In Verbindung mit der FIRST- oder TOP-Klausel kann die Reihenfolge jedoch wichtig sein.

    Sie können Spalten-Ordinalnummern in der ORDER BY-Klausel nicht verwenden.

    Jedes Element in der ORDER BY-Liste kann als ASC für aufsteigende Sortierfolge (der Standardwert) oder DESC für absteigende Sortierfolge benannt werden.

  • OPTION-Klausel   Verwenden Sie diese Klausel, um Hints für das Ausführen der Anweisung anzugeben. Die folgenden Hints werden unterstützt:

    • MATERIALIZED VIEW OPTIMIZATION Optionswert
    • FORCE OPTIMIZATION
    • FORCE NO OPTIMIZATION
    • Optionsname = Optionswert

    Eine Beschreibung dieser Optionen finden Sie bei der OPTIONS-Klausel unter SELECT-Anweisung.

Bemerkungen

Durch das Löschen großer Datenmengen mit der DELETE-Anweisung werden die Spaltenstatistiken aktualisiert.

Die DELETE-Anweisung kann für Ansichten verwendet werden, vorausgesetzt die SELECT-Anweisung, die die Ansicht definiert, hat nur eine Tabelle in der FROM-Klausel und enthält weder eine GROUP BY-Klausel noch eine Aggregatfunktion und erfordert auch keine UNION-Klausel.

DELETE-Anweisungen können in Ansichten ausgeführt werden, wenn die Abfragespezifikation, die die Ansicht definiert, aktualisierbar ist. Weitere Hinweise zur Erkennung von Ansichten, die inhärent nicht aktualisierbar sind, finden Sie unter Mit regulären Ansichten arbeiten.

Berechtigungen

DELETE-Berechtigung ist für die Tabelle erforderlich.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Kernfunktion. Die Verwendung von mehr als einer Tabelle in der FROM-Klausel ist eine Erweiterung des Herstellers.

Beispiel

Alle Daten vor 2000 werden aus der Tabelle FinancialData entfernt.

DELETE
FROM FinancialData
WHERE Year < 2000;

Die ersten 10 Aufträge werden aus der Tabelle SalesOrderItems entfernt, wenn das Lieferdatum älter als 2001-01-01 ist und sie aus dem Gebiet "Central" stammen.

DELETE TOP 10
FROM SalesOrderItems
FROM SalesOrders
WHERE SalesOrderItems.ID = SalesOrders.ID
  and ShipDate < '2001-01-01' and Region ='Central'
ORDER BY ShipDate ASC;

Abteilung 600 wird aus der Datenbank entfernt, wobei die Anweisung auf Isolationsstufe 3 ausgeführt wird.

DELETE FROM Departments
WHERE DepartmentID = 600
OPTION( isolation_level = 3 );