Właściwe zastosowanie instrukcji DELETE do usuwania danych ma kluczowe znaczenie i wiąże się z wieloma problemami. Mimo to istnieją standardowe praktyki użycia instrukcji DELETE, które upraszczają wszystkie takie zadania.
W tym artykule omówimy niektóre scenariusze życia zawodowego, aby wyposażyć Cię w najbardziej przydatne wskazówki dotyczące prawidłowego korzystania z instrukcji DELETE. Możesz usunąć dane z tabeli na różne sposoby. Poznaj różnicę między DELETE i TRUNCATE w SQL Server, którą omówiono na praktycznych przykładach.
T-SQL Usuń Polecenie Podstawy
Przede wszystkim powinniśmy zapoznać się z instrukcją T-SQL Delete w możliwie najprostszy sposób.
Instrukcja Delete, jak sama nazwa wskazuje, jest instrukcją, która pomaga nam usunąć dane z tabeli bazy danych.
Stół to struktura, którą tworzysz w bazie danych w celu przechowywania danych. Na przykład możemy mieć tabelę książek do przechowywania rekordów związanych z tymi książkami.
Baza danych to zorganizowany zbiór danych i struktur danych do przechowywania tych danych. Innymi słowy, dane mogą być przechowywane w bazie danych w postaci tabel.
Jak usunąć jeden lub wiele wierszy
Możemy usunąć jeden lub więcej rekordów (powszechnie znanych jako wiersze) z tabeli za pomocą instrukcji delete.
Instrukcja Delete usuwa niektóre lub wszystkie dane (wiersze) z tabeli.
Zgodnie z dokumentacją Microsoft, instrukcja Delete usuwa jeden lub więcej wierszy z tabeli lub widoku w SQL Server.
Można się zastanawiać, w jaki sposób instrukcja definiuje, czy usunąć niektóre, czy wszystkie dane (wiersze) z tabeli. Odpowiedź leży w kryteriach lub warunkach określających, co należy usunąć.
Usuń polecenie w SQL Server
Najprostsza składnia instrukcji jest następująca:
Delete FROM <TableName> WHERE <Condition>
Musisz podać nazwę tabeli i kryteria/warunek usunięcia danych (wierszy) z tabeli.
Uwaga:Bardzo ważne jest użycie instrukcji DELETE z warunkiem (klauzula WHERE), chociaż warunek warunku nie jest konieczny.
Wykonanie polecenia DELETE table bez warunku WHERE spowoduje usunięcie wszystkich wierszy (danych) z tabeli. Dlatego wyrób sobie nawyk używania warunku WHERE, chyba że chcesz usunąć wszystkie wiersze.
Kompatybilność
Ta instrukcja jest zgodna z wieloma wersjami SQL Server, w tym z następującymi:
- SQL Server 2012 i nowsze wersje.
- Baza danych SQL Server oparta na chmurze (baza danych Azure SQL).
- Oparta na chmurze hurtownia danych SQL (Azure Synapse Analytics).
Lista kontrolna krok po kroku do usuwania wierszy z tabeli
Teraz zbadamy użycie instrukcji Delete w kilku praktycznych scenariuszach.
Podsumowanie kroków
- Ustaw przykładową bazę danych.
- Wyświetl dane.
- Usuń dane.
- Wstaw więcej danych z powrotem do tabeli.
- Wyświetl dane przed usunięciem.
- Jak usunąć dane w kolumnie na podstawie warunku.
- Wyświetl dane po usunięciu.
- Wstaw więcej danych z powrotem do tabeli.
- Wyświetl dane przed usunięciem.
- Usuń dane na podstawie innego warunku.
- Wyświetl dane po usunięciu.
- Wstaw dane z powrotem do tabeli.
- Tym razem usuń dane na podstawie dwóch warunków.
- Wyświetl dane po usunięciu.
Skonfiguruj przykładową bazę danych (BooksSample)
Potrzebujemy przykładowej bazy danych do testowania i uruchamiania skryptów. Najpierw musimy ustawić tę przykładową bazę danych, obejmując następujące kroki:
- Utwórz przykładową bazę danych.
- Utwórz tabelę w przykładowej bazie danych.
- Wstaw dane (dwa wiersze) do tabeli bazy danych.
Otwórz SQL Server Management Studio lub dbForge Studio dla SQL Server i wykonaj następujący skrypt, aby skonfigurować przykładową bazę danych:
-- 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
Wyświetl dane (tabela Książka)
Zobaczmy ostatnio utworzoną i wypełnioną tabelę w bazie danych. Uruchom poniższy skrypt:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Dane wyjściowe to:
Widzimy dwa rzędy stołu (Książka). W tej chwili są to wszystkie dane znajdujące się w tej tabeli.
Usuń dane
Jak pamiętamy, istnieje ryzyko usunięcia wszystkich wierszy w tabeli, jeśli zapomnimy wspomnieć o warunku/kryteriach prawidłowego usunięcia.
Zawsze używaj klauzuli WHERE z instrukcją Delete, aby uniknąć przypadkowej utraty danych. Jedynym wyjątkiem powinien być przypadek, gdy musisz celowo usunąć wszystkie dane.
Aby usunąć wszystkie dane (wiersze) z przykładowej tabeli bazy danych, uruchom następujący skrypt:
-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book
Dane wyjściowe to:
Wyświetl dane po usunięciu
Teraz musimy sprawdzić, czy wszystkie wiersze zostały usunięte:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Wyniki to:
W ten sposób pomyślnie usunęliśmy wszystkie wiersze z książki stół. W tym celu zastosowaliśmy instrukcję DELETE bez żadnych kryteriów/warunków usuwania.
Wstaw dane z powrotem do tabeli (z tym samym tytułem)
Możemy wstawić dane (wiersze) z powrotem do tabeli, a następnie zastosować instrukcję DELETE w oparciu o pewne warunki/kryteria.
Tym razem postanawiamy wstawić więcej wierszy, ale celowo o tym samym tytule:
-- 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
Dane wyjściowe są następujące:
Uwaga :Aby przywrócić usunięte lub zmienione dane, możesz skorzystać z dedykowanego oprogramowania. Rozwiązanie dziennika transakcji dbForge pozwala zarówno przywrócić te dane, jak i zobaczyć, kto i kiedy je usunął lub zmienił.
Wyświetl dane przed usunięciem
Aby wyświetlić dane, wykonaj następujący skrypt:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Dane wyjściowe to:
Wynik pokazuje, że przez pomyłkę wstawiliśmy trzy wiersze z tym samym tytułem książki. To jest problem. Prostym rozwiązaniem jest usunięcie niepotrzebnych wierszy, stosując określony warunek usuwania wierszy ze zduplikowanymi tytułami.
Jak usunąć dane w kolumnie SQL na podstawie warunku (numer księgi)
Ważne:możemy rozważyć jeden z następujących sposobów rozwiązania tego problemu:
- Usuń według numeru książki
- Usuń według tytułu
W moim scenariuszu postanawiam nie usuwać według tytułu. Jeśli usuniemy według tytułu, w końcu usuniemy wszystkie wiersze zawierające ten tytuł, w tym te, które musimy zachować. Dlatego zalecanym podejściem jest usunięcie tabeli na podstawie BookNumber kolumna.
Jeśli spojrzymy na zestaw wyników, możemy łatwo zrozumieć, że BookNumber:3 i Książka nr:4 to zduplikowane wiersze. Wcześniej wyjaśniono szczegółowo, jak usunąć duplikaty w SQL. Musimy je usunąć, aby baza danych była spójna.
Ponownie pojawiają się następujące opcje:
- Usuń, gdy numer książki (numer książki) jest większy niż 2.
- Usuń, gdy Numer Książki to 3 i 4.
Wybierzmy pierwszą opcję. Pamiętaj jednak, że jest to ważne tylko wtedy, gdy po zduplikowanych wierszach, o których wiemy, nie ma żadnych wierszy.
Wykonaj następujący skrypt:
-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2
Wyświetl dane po usunięciu
Sprawdźmy tabelę po usunięciu danych:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Dane wyjściowe to:
Wstaw więcej danych do tabeli (więcej zapasów)
Aby umieścić więcej danych (wiersz) związanych ze stanem magazynowym, używamy poniższego skryptu:
-- 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
Wyświetl dane przed usunięciem
Spójrz na tabelę:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Dane wyjściowe to:
Usuń dane na podstawie innego warunku
Załóżmy, że musimy usunąć księgi magazynowe, aby zachować dokładniejsze informacje w bazie danych. Aby to zrobić, powinniśmy poszukać tych wierszy, w których giełda wynosi 0.
Możemy użyć instrukcji DELETE z warunkiem opartym na Zapasie wartość kolumny 0:
-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book
DELETE FROM dbo.Book
WHERE Stock=0
Wyświetl dane po usunięciu
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Wstaw więcej danych do tabeli (więcej tytułów i zasobów)
Dodajemy dwa kolejne wiersze do tabeli:
-- 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
Wyświetl dane przed usunięciem
Sprawdź wiersze przed dalszym usunięciem, zgodnie z wymaganiami:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Dane wyjściowe tabeli to:
Usuń dane na podstawie dwóch warunków
Tym razem musimy usunąć wszystkie książki (wiersze), w których tytuły zawierają słowo SQL i są niedostępne (ich wartość zapasów wynosi 0).
Innymi słowy, usuwamy wszystkie brakujące księgi związane z SQL.
W takim przypadku za pomocą instrukcji DELETE musimy określić więcej niż jeden warunek. Musimy upewnić się, że usuwamy tylko książki, których nie ma w magazynie i tylko te, które mają w tytule słowo SQL.
Wyświetl następujący skrypt:
-- 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
Wyświetl dane po usunięciu
Dane przeglądamy po raz ostatni:
Ważna wskazówka :Przed usunięciem danych uruchom instrukcję SELECT w oparciu o ten sam warunek, którego zamierzasz użyć do usunięcia. W ten sposób upewnisz się, że Twoje działania związane z usuwaniem będą dotyczyć poprawnych danych.
Na przykład najpierw uruchom zapytanie SELECT, aby upewnić się, że otrzymujesz tylko te wiersze, które są przeznaczone do usunięcia:
SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Gdy będziesz mieć pewność, możesz zmienić SELECT w instrukcję DELETE:
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Gratulacje!
Pomyślnie opanowałeś zadanie usuwania (usuwania) jednego lub więcej wierszy z tabeli zgodnie z wymaganiami.
Pozostań w kontakcie, aby uzyskać zaawansowane scenariusze usuwania i inne profesjonalne wskazówki dotyczące korzystania z wyciągu DELETE.
Rzeczy do zrobienia
Teraz, gdy możesz skutecznie usuwać rzędy ze stołu, możesz dalej trenować i doskonalić swoje umiejętności:
- Spróbuj usunąć wiersze, w których jest tylko jeden produkt w magazynie.
- Usuń wszystkie książki, których tytuł zawiera słowo Struktura
- Usuń wszystkie książki (wiersze) z wyjątkiem numeru książki (BookNumber) 1.
Odkryj bardziej zaawansowane scenariusze dotyczące instrukcji SQL DELETE.