Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction de suppression SQL Server :Comment supprimer une ligne ou multiplier les lignes de la table

La bonne application de l'instruction DELETE pour la suppression des données est cruciale et implique de nombreux problèmes. Pourtant, il existe des pratiques standard d'utilisation de l'instruction DELETE qui simplifient toutes ces tâches.

Cet article explorera certains des scénarios de la vie professionnelle pour vous fournir les conseils les plus utiles pour utiliser correctement l'instruction DELETE. Vous pouvez supprimer des données d'une table de différentes manières. Explorez la différence entre DELETE et TRUNCATE dans SQL Server qui a été couverte par des exemples pratiques.

T-SQL Supprimer Commande Bases

Tout d'abord, nous devons nous familiariser avec l'instruction T-SQL Delete de la manière la plus simple possible.

L'instruction Delete, comme son nom l'indique, est une instruction qui nous aide à supprimer des données de la table de la base de données.

Un tableau est une structure que vous créez dans une base de données pour stocker vos données. Par exemple, nous pouvons avoir une table de livres pour stocker les enregistrements liés à ces livres.

Une base de données est une collection organisée de données et les structures de données pour contenir ces données. En d'autres termes, les données peuvent être stockées dans la base de données sous forme de tables.

Comment supprimer une ligne ou plusieurs lignes

Nous pouvons supprimer un ou plusieurs enregistrements (communément appelés lignes) d'une table à l'aide de l'instruction delete.

L'instruction Delete supprime certaines ou toutes les données (lignes) d'une table.

Selon la documentation Microsoft, l'instruction Delete supprime une ou plusieurs lignes d'une table ou d'une vue dans SQL Server.

On peut se demander comment l'instruction définit s'il faut supprimer certaines ou toutes les données (lignes) d'une table. La réponse réside dans les critères ou les conditions précisant ce qui doit être supprimé.

Supprimer la commande dans SQL Server

La syntaxe la plus simple de l'instruction est la suivante :

Delete FROM <TableName> WHERE <Condition>

Vous devez fournir le nom de la table et les critères/conditions pour la suppression des données (lignes) de la table.

Remarque :Il est crucial d'utiliser l'instruction DELETE avec une condition (clause WHERE) bien que l'exigence de condition ne soit pas obligatoire.

Si vous exécutez la commande de table DELETE sans la condition WHERE, vous finirez par supprimer toutes les lignes (données) de la table. Par conséquent, prenez l'habitude d'utiliser la condition WHERE, sauf si vous souhaitez supprimer toutes les lignes.

Compatibilité

Cette instruction est compatible avec de nombreuses versions de SQL Server, notamment :

  1. SQL Server 2012 et versions supérieures.
  2. Base de données SQL Server basée sur le cloud (base de données SQL Azure).
  3. Entrepôt de données SQL basé sur le cloud (Azure Synapse Analytics).

Liste de contrôle étape par étape pour supprimer des lignes du tableau

Nous allons maintenant explorer l'utilisation de l'instruction Delete avec plusieurs scénarios pratiques.

Le résumé des étapes

  1. Configurer un exemple de base de données.
  2. Afficher les données.
  3. Supprimez les données.
  4. Insérez plus de données dans le tableau.
  5. Afficher les données avant suppression.
  6. Comment supprimer des données dans une colonne en fonction d'une condition.
  7. Afficher les données après suppression.
  8. Insérez plus de données dans le tableau.
  9. Afficher les données avant suppression.
  10. Supprimez les données en fonction d'une autre condition.
  11. Afficher les données après suppression.
  12. Insérez à nouveau les données dans le tableau.
  13. Supprimez les données en fonction de deux conditions cette fois.
  14. Afficher les données après suppression.

Configurer une base de données exemple (BooksSample)

Nous avons besoin d'un exemple de base de données pour tester et exécuter les scripts. Tout d'abord, nous devons configurer cet exemple de base de données, en suivant les étapes suivantes :

  1. Créer un exemple de base de données.
  2. Créez une table dans l'exemple de base de données.
  3. Insérez les données (deux lignes) dans la table de la base de données.

Ouvrez SQL Server Management Studio ou dbForge Studio pour SQL Server et exécutez le script suivant pour configurer l'exemple de base de données :

-- 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

Afficher les données (tableau Livre)

Voyons la table récemment créée et peuplée dans la base de données. Exécutez le script ci-dessous :

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

La sortie est :

On peut voir les deux rangées du tableau (Livre). Pour le moment, ce sont toutes les données présentes dans ce tableau.

Supprimer les données

Rappelons qu'il y a un risque de supprimer toutes les lignes d'un tableau si l'on oublie de mentionner les conditions/critères pour la bonne suppression.

Utilisez toujours la clause WHERE avec l'instruction Delete pour éviter toute perte accidentelle de données. La seule exception devrait être le cas où vous devez supprimer intentionnellement toutes les données.

Pour supprimer toutes les données (lignes) de l'exemple de table de base de données, exécutez le script suivant :

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

La sortie est :

Afficher les données après la suppression

Maintenant, nous devons vérifier si toutes les lignes ont été supprimées :

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

Les résultats sont :

De cette façon, nous avons supprimé avec succès toutes les lignes de le livre table. Pour cela, nous avons appliqué l'instruction DELETE sans aucun critère/condition de suppression.

Réinsérer les données dans le tableau (avec le même titre)

Nous pouvons réinsérer les données (lignes) dans la table, puis appliquer l'instruction DELETE en fonction de certaines conditions/critères.

Cette fois, nous choisissons d'insérer plus de lignes, mais en ayant délibérément le même titre :

-- 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

Le résultat est le suivant :

Remarque :Pour restaurer les données supprimées ou modifiées, vous pouvez utiliser les solutions logicielles dédiées. La solution dbForge Transaction Log vous permet à la fois de restaurer ces données et de voir qui et quand les a supprimées ou modifiées.

Afficher les données avant suppression

Pour afficher les données, exécutez le script suivant :

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

La sortie est :

La sortie montre que nous avons inséré par erreur trois lignes avec le même titre de livre. C'est un problème. La solution simple consiste à supprimer les lignes inutiles, en appliquant la condition spécifique de suppression des lignes avec des titres en double.

Comment supprimer des données dans une colonne SQL en fonction d'une condition (BookNumber)

Important :Nous pouvons envisager l'une des méthodes suivantes pour résoudre ce problème :

  1. Supprimer par BookNumber
  2. Supprimer par titre

Dans mon scénario, je choisis de ne pas supprimer par titre. Si nous supprimons par titre, nous finissons par supprimer toutes les lignes contenant ce titre, y compris celles que nous devons conserver. Par conséquent, l'approche recommandée consiste à supprimer la table en fonction du BookNumber colonne.

Si nous regardons le jeu de résultats, nous pouvons facilement comprendre que BookNumber :3 et BookNumber :4 sont des lignes en double. Auparavant, il a été expliqué en détail comment supprimer les doublons dans SQL. Nous devons les supprimer pour garder la base de données cohérente.

Là encore, les options suivantes se présentent :

  1. Supprimez où le numéro de livre (BookNumber) est supérieur à 2.
  2. Supprimez où BookNumber est 3 et 4.

Choisissons la première option. Cependant, rappelez-vous qu'il n'est valide que s'il n'y a pas de lignes après les lignes en double dont nous avons connaissance.

Exécutez le script suivant :

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

Afficher les données après la suppression

Vérifions le tableau après avoir supprimé les données :

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

La sortie est :

Insérer plus de données dans le tableau (plus de stock)

Pour mettre plus de données (ligne) liées au stock, nous utilisons le script ci-dessous :

-- 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

Afficher les données avant suppression

Jetez un œil au tableau :

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

La sortie est :

Supprimer les données en fonction d'une condition différente

Supposons que nous devions supprimer les livres en rupture de stock pour conserver des informations plus précises dans la base de données. Pour ce faire, nous devons rechercher les lignes dont le stock est égal à 0.

Nous pouvons utiliser l'instruction DELETE avec la condition basée sur le Stock valeur de colonne 0 :

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

Afficher les données après la suppression

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

Insérer plus de données dans le tableau (plus de titres et de stock)

Nous ajoutons deux lignes supplémentaires dans le tableau :

-- 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

Afficher les données avant suppression

Vérifiez les lignes avant de supprimer quoi que ce soit d'autre, en fonction de l'exigence :

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

La sortie du tableau est :

Supprimer les données en fonction de deux conditions

Cette fois, nous devons supprimer tous les livres (lignes) où les titres contiennent le mot SQL et ils sont en rupture de stock (leur valeur de stock est 0).

En d'autres termes, nous supprimons tous les livres en rupture de stock liés à SQL.

Dans ce cas, nous devons spécifier plus d'une condition avec l'instruction DELETE. Nous devons nous assurer que nous supprimons uniquement les livres en rupture de stock et uniquement les livres contenant le mot SQL dans leur titre.

Affichez le script suivant :

-- 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

Afficher les données après la suppression

Nous visualisons les données pour la dernière fois :

Conseil important :Avant de supprimer les données, exécutez l'instruction SELECT basée sur la même condition que vous allez utiliser pour la suppression. De cette façon, vous vous assurez que vos activités de suppression s'appliqueront aux données correctes.

Par exemple, exécutez d'abord la requête SELECT pour vous assurer que vous n'obtenez que les lignes destinées à être supprimées :

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

Une fois que vous êtes confiant, vous pouvez transformer votre SELECT en instruction DELETE :

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

Félicitations !

Vous avez maîtrisé avec succès la tâche de supprimer (supprimer) une ou plusieurs lignes d'une table en fonction des besoins.

Restez en contact pour des scénarios de suppression avancés et d'autres conseils professionnels concernant l'utilisation de l'instruction DELETE.

Choses à faire

Maintenant que vous pouvez supprimer des lignes d'un tableau avec succès, vous pouvez vous entraîner et améliorer vos compétences :

  1. Essayez de supprimer les lignes où il n'y a qu'un seul article en stock.
  2. Supprimez tous les livres dont le titre contient le mot Structure.
  3. Supprimez tous les livres (lignes) à l'exception du numéro de livre (BookNumber) 1.

Découvrez des scénarios plus avancés sur l'instruction SQL DELETE.