Sql-und-Xml - Home

Sql-Tutorial

Zeilen löschen mit DELETE

Syntax

  • DELETE FROM <Tabelle>
    Dies löscht den Inhalt der gesamten angegebenen Tabelle. Die Tabelle selbst wird nicht gelöscht, das Ergebnis ist eine leere Tabelle.
  • DELETE FROM <Tabelle>
    	WHERE <Bedingung>	
    Dies löscht alle Zeilen der Tabelle, für welche die Bedingung zutrifft.
  • DELETE FROM <Tabelle>
    	FROM <Tabelle> [[INNER | LEFT | RIGHT] JOIN] <Tabelle>
    		ON <JOIN-Bedingung> [weitere JOIN-Klauseln]
    	WHERE <Bedingung>	
    Diese ANSI- bzw. Ms-SqlServer-Syntax ermöglicht, analog zur UPDATE-Klausel, das Festlegen weiterer Kriterien zur Auswahl der zu löschenden Zeilen. Nur jene Zeilen, welche den Verknüpfungsbedingungen der JOIN-Klausel entsprechen, werden gelöscht.

Beispiele

Vorbemerkung: Wenn Sie die folgenden Beispiele mit dem Sql-interaktiv-lernen testen wollen, dann erstellen Sie sich am besten mit Select * Into <neue-Tabelle> From Artikel einige neue Tabellen, welche Sie zum Löschen verwenden. Dies erspart Ihnen das ständige Neueingeben der Daten bzw. das Zurückkopieren der gesicherten Access-Datenbank.
  • DELETE FROM ARTIKEL
    Dies löscht alle Zeilen der Tabelle Artikel.
  • DELETE FROM ARTIKEL
    	WHERE A_NR = 11
    	
    Dies löscht nur die Zeile mit der Artikel-Nummer 11.
  • DELETE FROM UMSATZ
    	FROM UMSATZ As U INNER JOIN ARTIKEL As A
    	On U.A_NR = A.A_NR
    	WHERE A_NR = 11
    	
    Dies löscht in der Tabelle UMSATZ alle Zeilen, welche sich auf den Artikel 11 beziehen.
  • DELETE FROM UMSATZ
    FROM ARTIKELAs A INNER JOIN UMSATZ As U
    	ON A.A_NR = U.A_NR INNER JOIN
    		(SELECT B.A_NR,
    			MAX(B.A_PREIS * C.A_STUECK) As Maximum
    		FROM Artikel As B Inner Join Umsatz As C
    		On B.A_Nr = C.A_Nr
    		Group By B.A_NR) As D
    	On U.A_NR = D.A_NR And A.A_PREIS * U.A_STUECK < D.Maximum
    Diese nur noch auf ANSI-kompatiblen DBMS funktionierende Beispiel bestimmt zunächst über die Unterabfrage zu jeder Artikelnummer den höchsten Einzelumsatz. Die JOIN-Anweisung verknüpft diese aus zwei Spalten und vier Zeilen bestehende Tabelle mit den beiden anderen Tabellen, so daß zunächst die Artikelnummern einander zugeordnet sind und zusätzlich alle Zeilen ausgewählt werden, deren Produkt aus A_Preis und A_Stueck kleiner dem Maximum für diesen Artikel ist. Diese Zeilen werden gelöscht.
  • Für das folgende Beispiel fügen Sie zunächst in die Tabelle ARTIKEL einen neuen Artikel ein. Da eine JOIN-Klausel genutzt wird, gelingt dies nicht mit Ms-Access bzw. dem Sql-interaktiv. Dort müssen Sie sich mit der korrespondierenden SELECT-Klausel begnügen.
    INSERT INTO ARTIKEL (A_NR, A_NAME, A_PREIS)
    	VALUES(55, 'Jeans', 99.90)
    Mit diesem Artikel ist kein Umsatz gemacht worden, er soll deshalb gelöscht werden.
    DELETE FROM ARTIKEL
    	FROM ARTIKEL As A LEFT JOIN UMSATZ As U
    	On A.A_NR = U.A_NR
    	WHERE U.UMSATZ_NR IS NULL

Bemerkungen

  • Ersetzen Sie bei komplexen Anweisungen mit eigenständigem FROM-Abschnitt zunächst die erste Zeile 'DELETE FROM <Tabelle>' durch 'SELECT *'. Damit werden Ihnen alle Zeilen ausgegeben, die als Kandidaten zum Löschen ausgewählt werden.
  • Wird eine interaktive Umgebung genutzt, die Transaktionen unterstützt, dann läßt sich das Testen von DELETE-Befehlen vereinfachen. Vor dessen Ausführung wird eine Transaktion gestartet, dann der Löschbefehl ausgeführt und das Ergebnis anschließend mit einer SELECT-Abfrage überprüft. Am Ende wird die Transaktion per RollBack wieder zurückgesetzt, so daß keine Änderungen an den Tabellen gespeichert werden.

    Wenn Sie mit dem OSql.exe interaktiv eine DosBox geöffnet haben, so können Sie schrittweise die folgenden Zeilen aus dem linken Fenster eingeben und jeweils anschließend mit Return bestätigen.

    Begin Transaction
    go
    
    Select * From Umsatz
    go
    
    Delete From Umsatz Where A_Nr < 13
    go
    
    Select * From Umsatz
    go
    
    RollBack Transaction
    go
    
    Select * From Umsatz
    
    Transaktion starten
    
    
    Ausgabe von 9 Zeilen
    
    
    Löschen aller Zeilen mit A_Nr < 13
    
    
    Ausgabe 4 Zeilen
    
    
    Transaktion zurücksetzen
    
    
    Ausgabe von wieder 9 Zeilen
    
    

© 2003-2016 Jürgen Auer, Berlin.