Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server Delete-Anweisung:So entfernen Sie eine oder mehrere Zeilen aus der Tabelle

Die richtige Anwendung der DELETE-Anweisung zum Entfernen von Daten ist entscheidend und bringt viele Probleme mit sich. Dennoch gibt es Standardpraktiken für die Verwendung der DELETE-Anweisung, die all diese Aufgaben vereinfachen.

In diesem Artikel werden einige der Szenarien des Berufslebens untersucht, um Sie mit den hilfreichsten Tipps zur korrekten Verwendung der DELETE-Anweisung auszustatten. Sie können Daten auf verschiedene Weise aus einer Tabelle entfernen. Erkunden Sie den Unterschied zwischen DELETE und TRUNCATE in SQL Server, der mit praktischen Beispielen behandelt wurde.

T-SQL Löschen Befehl Grundlagen

Zunächst sollten wir uns auf möglichst einfache Weise mit der T-SQL-Anweisung Delete vertraut machen.

Die Delete-Anweisung ist, wie der Name schon sagt, eine Anweisung, die uns hilft, Daten aus der Datenbanktabelle zu löschen.

Ein Tisch ist eine Struktur, die Sie in einer Datenbank erstellen, um Ihre Daten zu speichern. Beispielsweise können wir eine Tabelle mit Büchern haben, um Aufzeichnungen zu diesen Büchern zu speichern.

Eine Datenbank ist eine organisierte Sammlung von Daten und den Datenstrukturen, um diese Daten zu speichern. Mit anderen Worten, Daten können innerhalb der Datenbank in Form von Tabellen gespeichert werden.

So löschen Sie eine Zeile oder mehrere Zeilen

Wir können einen oder mehrere Datensätze (allgemein bekannt als Zeilen) aus einer Tabelle löschen, indem wir die delete-Anweisung verwenden.

Die Delete-Anweisung entfernt einige oder alle Daten (Zeilen) aus einer Tabelle.

Laut Microsoft-Dokumentation entfernt die Delete-Anweisung eine oder mehrere Zeilen aus einer Tabelle oder Ansicht in SQL Server.

Man könnte sich fragen, wie die Anweisung definiert, ob einige oder alle Daten (Zeilen) aus einer Tabelle entfernt werden sollen. Die Antwort liegt in den Kriterien oder Bedingungen, die angeben, was entfernt werden muss.

Löschbefehl in SQL Server

Die einfachste Syntax der Anweisung lautet wie folgt:

Delete FROM <TableName> WHERE <Condition>

Sie müssen den Tabellennamen und die Kriterien/Bedingungen für das Löschen von Daten (Zeilen) aus der Tabelle angeben.

Hinweis:Es ist wichtig, die DELETE-Anweisung mit einer Bedingung (WHERE-Klausel) zu verwenden, obwohl die Bedingungsanforderung kein Muss ist.

Wenn Sie den Befehl DELETE table ohne die WHERE-Bedingung ausführen, werden Sie am Ende alle Zeilen (Daten) aus der Tabelle löschen. Machen Sie es sich daher zur Gewohnheit, die WHERE-Bedingung zu verwenden, es sei denn, Sie möchten alle Zeilen entfernen.

Kompatibilität

Diese Anweisung ist mit vielen Versionen von SQL Server kompatibel, einschließlich der folgenden:

  1. Versionen von SQL Server 2012 und höher.
  2. Cloudbasierte SQL Server-Datenbank (Azure SQL Database).
  3. Cloudbasiertes SQL Data Warehouse (Azure Synapse Analytics).

Schritt-für-Schritt-Checkliste zum Entfernen von Zeilen aus der Tabelle

Jetzt werden wir die Verwendung der Delete-Anweisung anhand mehrerer praktischer Szenarien untersuchen.

Die Zusammenfassung der Schritte

  1. Eine Beispieldatenbank einrichten.
  2. Daten anzeigen.
  3. Löschen Sie die Daten.
  4. Fügen Sie weitere Daten wieder in die Tabelle ein.
  5. Daten vor dem Löschen anzeigen.
  6. So löschen Sie Daten in einer Spalte basierend auf einer Bedingung.
  7. Daten nach dem Löschen anzeigen.
  8. Fügen Sie weitere Daten wieder in die Tabelle ein.
  9. Daten vor dem Löschen anzeigen.
  10. Löschen Sie die Daten basierend auf einer anderen Bedingung.
  11. Daten nach dem Löschen anzeigen.
  12. Fügen Sie die Daten wieder in die Tabelle ein.
  13. Löschen Sie die Daten dieses Mal basierend auf zwei Bedingungen.
  14. Daten nach dem Löschen anzeigen.

Beispieldatenbank einrichten (BooksSample)

Wir benötigen eine Beispieldatenbank, um die Skripte zu testen und auszuführen. Zuerst müssen wir diese Beispieldatenbank einrichten und dabei die folgenden Schritte abdecken:

  1. Erstellen Sie eine Beispieldatenbank.
  2. Erstellen Sie eine Tabelle in der Beispieldatenbank.
  3. Fügen Sie die Daten (zwei Zeilen) in die Datenbanktabelle ein.

Öffnen Sie SQL Server Management Studio oder dbForge Studio für SQL Server und führen Sie das folgende Skript aus, um die Beispieldatenbank einzurichten:

-- Connect to the 'master' database to run this snippet
USE master
GO
-- Create a new database if it does not already exist
IF NOT EXISTS (
    SELECT [name]
FROM sys.databases
WHERE [name] = N'BooksSample'
)
CREATE DATABASE BooksSample
GO

USE BooksSample

-- Create the table book
CREATE TABLE [dbo].[Book]
(
    [BookNumber] INT NOT NULL PRIMARY KEY,-- Primary Key column
    [Title] VARCHAR(150) NOT NULL,
    [Stock] SMALLINT NOT NULL
    
);
GO

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        1, 'Learn SQL in 7 Days', 50
),
    ( -- Second row: values for the columns in the list above
        2, 'Creating Databases in Minutes', 50
);

GO

Daten anzeigen (Buchtabelle)

Lassen Sie uns die kürzlich erstellte und gefüllte Tabelle in der Datenbank anzeigen. Führen Sie das folgende Skript aus:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Die Ausgabe ist:

Wir können die beiden Zeilen der Tabelle (Buch) sehen. Im Moment sind dies alle Daten, die in dieser Tabelle vorhanden sind.

Löschen Sie die Daten

Wie wir uns erinnern, besteht die Gefahr, dass alle Zeilen in einer Tabelle gelöscht werden, wenn wir vergessen, die Bedingung/Kriterien für die korrekte Löschung zu erwähnen.

Verwenden Sie immer die WHERE-Klausel mit der Delete-Anweisung, um versehentlichen Datenverlust zu vermeiden. Die einzige Ausnahme sollte der Fall sein, wenn Sie alle Daten absichtlich löschen müssen.

Um alle Daten (Zeilen) aus der Beispieldatenbanktabelle zu entfernen, führen Sie das folgende Skript aus:

-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book

Die Ausgabe ist:

Daten nach dem Löschen ansehen

Jetzt müssen wir prüfen, ob alle Zeilen gelöscht wurden:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Die Ergebnisse sind:

Auf diese Weise haben wir erfolgreich alle Zeilen aus dem Buch gelöscht Tisch. Dafür haben wir die DELETE-Anweisung ohne Löschkriterien/-bedingungen angewendet.

Daten wieder in die Tabelle einfügen (mit demselben Titel)

Wir können die Daten (Zeilen) wieder in die Tabelle einfügen und dann die DELETE-Anweisung basierend auf einigen Bedingungen/Kriterien anwenden.

Dieses Mal haben wir uns dafür entschieden, mehr Zeilen einzufügen, aber absichtlich denselben Titel zu haben:

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        1, 'Learn SQL in 7 Days', 50
),
    ( -- Second row: values for the columns in the list above
        2, 'Creating Databases in Minutes', 50
),
	( -- Third row: values for the columns in the list above
        3, 'Creating Databases in Minutes', 50
),
    ( -- Fourth row: values for the columns in the list above
        4, 'Creating Databases in Minutes', 50
);

GO

Die Ausgabe sieht wie folgt aus:

Hinweis :Um die gelöschten oder geänderten Daten wiederherzustellen, können Sie die speziellen Softwarelösungen verwenden. Mit der dbForge Transaction Log-Lösung können Sie diese Daten wiederherstellen und anzeigen, wer und wann sie gelöscht oder geändert hat.

Daten vor dem Löschen anzeigen

Um die Daten anzuzeigen, führen Sie das folgende Skript aus:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Die Ausgabe ist:

Die Ausgabe zeigt, dass wir versehentlich drei Zeilen mit demselben Buchtitel eingefügt haben. Es ist ein Problem. Die einfache Lösung besteht darin, die unnötigen Zeilen zu entfernen, indem die spezifische Bedingung zum Entfernen von Zeilen mit doppelten Titeln angewendet wird.

So löschen Sie Daten in einer SQL-Spalte basierend auf einer Bedingung (BookNumber)

Wichtig:Wir können eine der folgenden Möglichkeiten zur Lösung dieses Problems in Betracht ziehen:

  1. Nach Buchnummer löschen
  2. Nach Titel löschen

In meinem Szenario entscheide ich mich, nicht nach Titel zu löschen. Wenn wir nach Titel löschen, löschen wir am Ende alle Zeilen, die diesen Titel enthalten, einschließlich der Zeilen, die wir behalten müssen. Daher ist der empfohlene Ansatz, die Tabelle basierend auf der BookNumber zu entfernen Spalte.

Wenn wir uns die Ergebnismenge ansehen, können wir leicht verstehen, dass BookNumber:3 und Buchnummer:4 sind doppelte Zeilen. Zuvor wurde ausführlich erklärt, wie Duplikate in SQL entfernt werden. Wir müssen sie löschen, um die Datenbank konsistent zu halten.

Auch hier ergeben sich folgende Möglichkeiten:

  1. Löschen, wo die Buchnummer (BookNumber) größer als 2 ist.
  2. Löschen, wo BookNumber 3 und 4 ist.

Lassen Sie uns die erste Option wählen. Denken Sie jedoch daran, dass es nur gültig ist, wenn es keine Zeilen nach den uns bekannten doppelten Zeilen gibt.

Führen Sie das folgende Skript aus:

-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2

Daten nach dem Löschen ansehen

Lassen Sie uns die Tabelle nach dem Löschen der Daten überprüfen:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Die Ausgabe ist:

Fügen Sie mehr Daten in die Tabelle ein (mehr Bestand)

Um weitere Daten (Zeile) in Bezug auf die Aktie einzufügen, verwenden wir das folgende Skript:

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        3, 'Basic Data Structures', 60
),
    ( -- Second row: values for the columns in the list above
        4, 'Advanced Data Structures', 0
)
GO

Daten vor dem Löschen anzeigen

Schauen Sie sich die Tabelle an:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Die Ausgabe ist:

Löschen Sie die Daten basierend auf einer anderen Bedingung

Angenommen, wir müssen vergriffene Bücher entfernen, um genauere Informationen in der Datenbank zu behalten. Dazu sollten wir nach den Zeilen suchen, in denen der Bestand 0 ist.

Wir können die DELETE-Anweisung mit der Bedingung verwenden, die auf dem Stock basiert Spaltenwert 0:

-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book 
DELETE FROM dbo.Book
WHERE Stock=0

Daten nach dem Löschen ansehen

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Fügen Sie weitere Daten in die Tabelle ein (mehr Titel und Bestand)

Wir fügen der Tabelle zwei weitere Zeilen hinzu:

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        4, 'Learn Azure SQL Database in 10 Days', 0
),
    ( -- Second row: values for the columns in the list above
        5, 'Azure SQL Database Concepts', 1
)
GO

Daten vor dem Löschen anzeigen

Überprüfen Sie die Zeilen, bevor Sie weitere Elemente löschen, basierend auf der Anforderung:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Die Tabellenausgabe ist:

Löschen Sie die Daten basierend auf zwei Bedingungen

Dieses Mal müssen wir alle Bücher löschen (Zeilen), in denen Titel das Wort SQL enthalten und sie sind ausverkauft (ihr Bestandswert ist 0).

Mit anderen Worten, wir löschen alle SQL-bezogenen Out-of-Stock-Bücher.

In diesem Fall müssen wir mehr als eine Bedingung mit der DELETE-Anweisung angeben. Wir müssen sicherstellen, dass wir nur die vergriffenen Bücher löschen und nur die Bücher, die das Wort SQL im Titel haben.

Sehen Sie sich das folgende Skript an:

-- Delete all the out of stock (Where Stock is 0) SQL related (Title contains SQL) books (rows) from the table Book 
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Daten nach dem Löschen ansehen

Wir sehen uns die Daten zum letzten Mal an:

Wichtiger Tipp :Bevor Sie die Daten löschen, führen Sie die SELECT-Anweisung basierend auf derselben Bedingung aus, die Sie zum Löschen verwenden werden. Auf diese Weise stellen Sie sicher, dass sich Ihre Löschaktivitäten auf die richtigen Daten beziehen.

Führen Sie zum Beispiel zuerst die SELECT-Abfrage aus, um sicherzustellen, dass Sie nur die Zeilen erhalten, die gelöscht werden sollen:

SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Sobald Sie sich sicher sind, können Sie Ihre SELECT-Anweisung in die DELETE-Anweisung umwandeln:

DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Herzlichen Glückwunsch!

Sie haben die Aufgabe erfolgreich gemeistert, eine oder mehrere Zeilen aus einer Tabelle gemäß den Anforderungen zu entfernen (löschen).

Bleiben Sie in Kontakt, um erweiterte Löschszenarien und andere professionelle Tipps zur Verwendung der DELETE-Anweisung zu erhalten.

Dinge zu tun

Nachdem Sie nun erfolgreich Zeilen aus einer Tabelle entfernen können, können Sie Ihre Fähigkeiten weiter trainieren und verbessern:

  1. Versuchen Sie, Zeilen zu entfernen, in denen sich nur ein Artikel im Bestand befindet.
  2. Löschen Sie alle Bücher, deren Titel das Wort Struktur. enthält
  3. Löschen Sie alle Bücher (Zeilen) außer Buchnummer (BookNumber) 1.

Entdecken Sie erweiterte Szenarien zur SQL DELETE-Anweisung.