Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja usuwania SQL Server:jak usunąć jeden lub wiele wierszy z tabeli

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:

  1. SQL Server 2012 i nowsze wersje.
  2. Baza danych SQL Server oparta na chmurze (baza danych Azure SQL).
  3. 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

  1. Ustaw przykładową bazę danych.
  2. Wyświetl dane.
  3. Usuń dane.
  4. Wstaw więcej danych z powrotem do tabeli.
  5. Wyświetl dane przed usunięciem.
  6. Jak usunąć dane w kolumnie na podstawie warunku.
  7. Wyświetl dane po usunięciu.
  8. Wstaw więcej danych z powrotem do tabeli.
  9. Wyświetl dane przed usunięciem.
  10. Usuń dane na podstawie innego warunku.
  11. Wyświetl dane po usunięciu.
  12. Wstaw dane z powrotem do tabeli.
  13. Tym razem usuń dane na podstawie dwóch warunków.
  14. 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:

  1. Utwórz przykładową bazę danych.
  2. Utwórz tabelę w przykładowej bazie danych.
  3. 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:

  1. Usuń według numeru książki
  2. 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:

  1. Usuń, gdy numer książki (numer książki) jest większy niż 2.
  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:

  1. Spróbuj usunąć wiersze, w których jest tylko jeden produkt w magazynie.
  2. Usuń wszystkie książki, których tytuł zawiera słowo Struktura
  3. Usuń wszystkie książki (wiersze) z wyjątkiem numeru książki (BookNumber) 1.

Odkryj bardziej zaawansowane scenariusze dotyczące instrukcji SQL DELETE.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 sposoby na zwrócenie ciągu wielu spacji w SQL Server

  2. Wyślij e-mail z wyzwalacza w SQL Server (T-SQL)

  3. Importuj „xml” do serwera SQL

  4. Jak włączyć/wyłączyć dostęp do danych w SQL Server (przykład T-SQL)

  5. Jak poprawnie wstawić znak nowej linii w nvarchar