De juiste toepassing van de DELETE-instructie voor het verwijderen van gegevens is cruciaal en brengt veel problemen met zich mee. Toch zijn er standaardpraktijken voor het gebruik van de DELETE-instructie die al dergelijke taken vereenvoudigen.
In dit artikel worden enkele van de professionele levensscenario's onderzocht om u de nuttigste tips te geven om de DELETE-instructie correct te gebruiken. U kunt op verschillende manieren gegevens uit een tabel verwijderen. Ontdek het verschil tussen VERWIJDEREN en TRUNCATE in SQL Server dat is behandeld met praktische voorbeelden.
T-SQL Verwijderen Opdracht Basis
Allereerst moeten we zo eenvoudig mogelijk vertrouwd raken met de T-SQL Delete-instructie.
De Delete-instructie, zoals de naam al aangeeft, is een instructie die ons helpt om gegevens uit de databasetabel te verwijderen.
Een tafel is een structuur die u in een database maakt om uw gegevens op te slaan. We kunnen bijvoorbeeld een tabel met boeken hebben om records met betrekking tot die boeken op te slaan.
Een database is een georganiseerde verzameling van gegevens en de gegevensstructuren om die gegevens te bewaren. Met andere woorden, gegevens kunnen in de database worden opgeslagen in de vorm van tabellen.
Een rij of meerdere rijen verwijderen
We kunnen een of meer records (algemeen bekend als rijen) uit een tabel verwijderen met behulp van de delete-opdracht.
De Delete-opdracht verwijdert enkele of alle gegevens (rijen) uit een tabel.
Volgens Microsoft-documentatie verwijdert de Delete-instructie een of meer rijen uit een tabel of weergave in SQL Server.
Je kunt je afvragen hoe de instructie bepaalt of sommige of alle gegevens (rijen) uit een tabel moeten worden verwijderd. Het antwoord ligt in de criteria of voorwaarden die specificeren wat er moet worden verwijderd.
Opdracht verwijderen in SQL Server
De eenvoudigste syntaxis van de instructie is als volgt:
Delete FROM <TableName> WHERE <Condition>
U moet de tabelnaam en de criteria/voorwaarde opgeven voor het verwijderen van gegevens (rijen) uit de tabel.
Opmerking:het is van cruciaal belang om de DELETE-instructie te gebruiken met een voorwaarde (WHERE-clausule), hoewel de voorwaardevereiste geen vereiste is.
Als u het DELETE-tabelcommando uitvoert zonder de WHERE-voorwaarde, verwijdert u uiteindelijk alle rijen (gegevens) uit de tabel. Maak er daarom een gewoonte van om de WHERE-voorwaarde te gebruiken, tenzij u alle rijen wilt verwijderen.
Compatibiliteit
Deze verklaring is compatibel met vele versies van SQL Server, waaronder de volgende:
- SQL Server 2012 en hogere versies.
- Cloudgebaseerde SQL Server-database (Azure SQL-database).
- Cloudgebaseerd SQL Data Warehouse (Azure Synapse Analytics).
Stapsgewijze checklist om rijen uit de tabel te verwijderen
Nu gaan we het gebruik van de Delete-instructie onderzoeken met verschillende praktische scenario's.
De samenvatting van de stappen
- Een voorbeelddatabase instellen.
- Bekijk de gegevens.
- Verwijder de gegevens.
- Voeg meer gegevens in de tabel in.
- Bekijk de gegevens voor verwijdering.
- Hoe gegevens in een kolom te verwijderen op basis van een voorwaarde.
- Bekijk de gegevens na verwijdering.
- Voeg meer gegevens in de tabel in.
- Bekijk de gegevens voor verwijdering.
- Verwijder de gegevens op basis van een andere voorwaarde.
- Bekijk de gegevens na verwijdering.
- Voeg de gegevens weer in de tabel in.
- Verwijder deze keer de gegevens op basis van twee voorwaarden.
- Bekijk de gegevens na verwijdering.
Voorbeelddatabase instellen (BooksSample)
We hebben een voorbeelddatabase nodig om de scripts te testen en uit te voeren. Eerst moeten we die voorbeelddatabase instellen, waarbij de volgende stappen worden doorlopen:
- Maak een voorbeelddatabase.
- Maak een tabel in de voorbeelddatabase.
- Voeg de gegevens (twee rijen) in de databasetabel in.
Open SQL Server Management Studio of dbForge Studio voor SQL Server en voer het volgende script uit om de voorbeelddatabase in te stellen:
-- 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
Bekijk de gegevens (Boektabel)
Laten we de recent gemaakte en ingevulde tabel in de database bekijken. Voer het onderstaande script uit:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
De uitvoer is:
We kunnen de twee rijen van de tafel (Boek) zien. Op dit moment zijn dit alle gegevens in deze tabel.
De gegevens verwijderen
Zoals we ons herinneren, bestaat het risico dat alle rijen in een tabel worden verwijderd als we vergeten de voorwaarde/criteria voor de juiste verwijdering te vermelden.
Gebruik altijd de WHERE-clausule met de Delete-instructie om onbedoeld gegevensverlies te voorkomen. De enige uitzondering zou het geval moeten zijn wanneer u alle gegevens opzettelijk moet verwijderen.
Voer het volgende script uit om alle gegevens (rijen) uit de voorbeelddatabasetabel te verwijderen:
-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book
De uitvoer is:
Bekijk de gegevens na de verwijdering
Nu moeten we controleren of alle rijen zijn verwijderd:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
De resultaten zijn:
Op deze manier hebben we met succes alle rijen verwijderd uit het boek tafel. Daarvoor hebben we de DELETE-instructie toegepast zonder enige verwijderingscriteria/voorwaarden.
Gegevens weer in de tabel invoegen (met dezelfde titel)
We kunnen de gegevens (rijen) terug in de tabel invoegen en vervolgens de DELETE-instructie toepassen op basis van enkele voorwaarden/criteria.
Deze keer kiezen we ervoor om meer rijen in te voegen, maar bewust met dezelfde titel:
-- 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
De uitvoer is als volgt:
Opmerking :Om de verwijderde of gewijzigde gegevens te herstellen, kunt u de speciale softwareoplossingen gebruiken. Met de dbForge Transaction Log-oplossing kunt u zowel die gegevens herstellen als bekijken wie en wanneer ze zijn verwijderd of gewijzigd.
Bekijk de gegevens vóór verwijdering
Voer het volgende script uit om de gegevens te bekijken:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
De uitvoer is:
De uitvoer laat zien dat we per ongeluk drie rijen met dezelfde boektitel hebben ingevoegd. Het is een probleem. De eenvoudige oplossing is om de onnodige rijen te verwijderen, waarbij de specifieke voorwaarde wordt toegepast voor het verwijderen van rijen met dubbele titels.
Hoe u gegevens in een SQL-kolom kunt verwijderen op basis van een voorwaarde (boeknummer)
Belangrijk:we kunnen een van de volgende manieren overwegen om dit probleem op te lossen:
- Verwijderen op Boeknummer
- Verwijderen op titel
In mijn scenario kies ik ervoor om niet op titel te verwijderen. Als we op titel verwijderen, verwijderen we uiteindelijk alle rijen die die titel bevatten, inclusief de rijen die we moeten behouden. Daarom is de aanbevolen aanpak om de tabel te verwijderen op basis van het Boeknummer kolom.
Als we naar de resultatenset kijken, kunnen we gemakkelijk begrijpen dat Boeknummer:3 en Boeknummer:4 zijn dubbele rijen. Eerder werd in detail uitgelegd hoe u duplicaten in SQL verwijdert. We moeten ze verwijderen om de database consistent te houden.
Nogmaals, de volgende opties doen zich voor:
- Verwijderen waar boeknummer (BookNumber) groter is dan 2.
- Verwijderen waar BookNumber 3 en 4 is.
Laten we de eerste optie kiezen. Onthoud echter dat het alleen geldig is als er geen rijen zijn na de dubbele rijen waarvan we op de hoogte zijn.
Voer het volgende script uit:
-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2
Bekijk de gegevens na de verwijdering
Laten we de tabel controleren na het verwijderen van de gegevens:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
De uitvoer is:
Voeg meer gegevens in de tabel in (meer voorraad)
Om meer gegevens (rij) gerelateerd aan het aandeel te plaatsen, gebruiken we het onderstaande script:
-- 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
Gegevens bekijken vóór verwijdering
Bekijk de tabel:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
De uitvoer is:
De gegevens verwijderen op basis van een andere voorwaarde
Stel dat we uitverkochte boeken moeten verwijderen om nauwkeurigere informatie in de database te behouden. Om dit te doen, moeten we zoeken naar die rijen met de Voorraad is 0.
We kunnen de DELETE-instructie gebruiken met de voorwaarde op basis van de Voorraad kolomwaarde 0:
-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book
DELETE FROM dbo.Book
WHERE Stock=0
Bekijk de gegevens na de verwijdering
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Voeg meer gegevens in de tabel in (meer titels en voorraad)
We voegen nog twee rijen toe aan de tabel:
-- 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
Bekijk de gegevens vóór verwijdering
Controleer de rijen voordat u iets verder verwijdert, op basis van de vereiste:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
De tabeluitvoer is:
De gegevens verwijderen op basis van twee voorwaarden
Deze keer moeten we alle boeken verwijderen (rijen) waar titels het woord SQL bevatten en ze zijn niet op voorraad (hun voorraadwaarde is 0).
Met andere woorden, we verwijderen alle SQL-gerelateerde uitverkochte boeken.
In dit geval moeten we meer dan één voorwaarde specificeren met de DELETE-instructie. We moeten ervoor zorgen dat we alleen boeken verwijderen die niet op voorraad zijn en alleen die boeken met het woord SQL in hun titel.
Bekijk het volgende script:
-- 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
Bekijk de gegevens na de verwijdering
We bekijken de gegevens voor de laatste keer:
Belangrijke tip :Voordat u de gegevens verwijdert, voert u de SELECT-instructie uit op basis van dezelfde voorwaarde die u voor verwijdering gaat gebruiken. Op deze manier zorgt u ervoor dat uw verwijderingsactiviteiten van toepassing zijn op de juiste gegevens.
Voer bijvoorbeeld eerst de SELECT-query uit om ervoor te zorgen dat u alleen die rijen krijgt die bedoeld zijn om te worden verwijderd:
SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Als u eenmaal zeker bent, kunt u uw SELECT-instructie omzetten in de DELETE-instructie:
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Gefeliciteerd!
Je hebt met succes de taak onder de knie om een of meer rijen uit een tabel te verwijderen (verwijderen) volgens de vereisten.
Blijf op de hoogte voor geavanceerde verwijderingsscenario's en andere professionele tips met betrekking tot het gebruik van de DELETE-instructie.
Dingen om te doen
Nu u met succes rijen van een tafel kunt verwijderen, kunt u uw vaardigheden verder trainen en verbeteren:
- Probeer rijen te verwijderen waar er maar één artikel in de voorraad is.
- Verwijder alle boeken waarvan de titel het woord Structuur bevat.
- Verwijder alle boeken (rijen) behalve boeknummer (BookNumber) 1.
Ontdek meer geavanceerde scenario's over de SQL DELETE-instructie.