Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione di eliminazione di SQL Server:come rimuovere una o più righe dalla tabella

La corretta applicazione dell'istruzione DELETE per la rimozione dei dati è fondamentale e comporta molti problemi. Tuttavia, esistono pratiche standard per l'utilizzo dell'istruzione DELETE che semplificano tutte queste attività.

Questo articolo esplorerà alcuni degli scenari di vita professionale per fornirti i suggerimenti più utili per utilizzare correttamente l'istruzione DELETE. Puoi rimuovere i dati da una tabella in diversi modi. Esplora la differenza tra DELETE e TRUNCATE in SQL Server che è stata trattata con esempi pratici.

T-SQL Elimina Comando Nozioni di base

Prima di tutto, dovremmo familiarizzare con l'istruzione T-SQL Delete nel modo più semplice possibile.

L'istruzione Delete, come indica il nome, è un'istruzione che ci aiuta a eliminare i dati dalla tabella del database.

Un tavolo è una struttura che crei in un database per memorizzare i tuoi dati. Ad esempio, possiamo avere una tabella di libri per memorizzare i record relativi a quei libri.

Un database è una raccolta organizzata di dati e le strutture di dati per contenere tali dati. In altre parole, i dati possono essere archiviati all'interno del database sotto forma di tabelle.

Come eliminare una o più righe

Possiamo eliminare uno o più record (comunemente noti come righe) da una tabella utilizzando l'istruzione delete.

L'istruzione Delete rimuove alcuni o tutti i dati (righe) da una tabella.

In base alla documentazione Microsoft, l'istruzione Delete rimuove una o più righe da una tabella o da una vista in SQL Server.

Ci si potrebbe chiedere come l'istruzione definisca se rimuovere alcuni o tutti i dati (righe) da una tabella. La risposta sta nei criteri o nelle condizioni che specificano cosa deve essere rimosso.

Elimina comando in SQL Server

La sintassi più semplice dell'istruzione è la seguente:

Delete FROM <TableName> WHERE <Condition>

È necessario fornire il nome della tabella e i criteri/condizione per l'eliminazione dei dati (righe) dalla tabella.

Nota:è fondamentale utilizzare l'istruzione DELETE con una condizione (clausola WHERE), sebbene il requisito della condizione non sia obbligatorio.

Se esegui il comando DELETE table senza la condizione WHERE, finirai per eliminare tutte le righe (dati) dalla tabella. Quindi, prendi l'abitudine di usare la condizione WHERE a meno che tu non voglia rimuovere tutte le righe.

Compatibilità

Questa istruzione è compatibile con molte versioni di SQL Server, incluse le seguenti:

  1. SQL Server 2012 e versioni successive.
  2. Database SQL Server basato su cloud (database SQL di Azure).
  3. SQL Data Warehouse basato su cloud (Azure Synapse Analytics).

Elenco di controllo passo passo per rimuovere le righe dalla tabella

Ora esploreremo l'utilizzo dell'istruzione Delete con diversi scenari pratici.

Il riepilogo dei passaggi

  1. Imposta un database di esempio.
  2. Visualizza i dati.
  3. Elimina i dati.
  4. Inserisci più dati nella tabella.
  5. Visualizza i dati prima dell'eliminazione.
  6. Come eliminare i dati in una colonna in base a una condizione.
  7. Visualizza i dati dopo l'eliminazione.
  8. Inserisci più dati nella tabella.
  9. Visualizza i dati prima dell'eliminazione.
  10. Elimina i dati in base a un'altra condizione.
  11. Visualizza i dati dopo l'eliminazione.
  12. Inserisci nuovamente i dati nella tabella.
  13. Elimina i dati in base a due condizioni questa volta.
  14. Visualizza i dati dopo l'eliminazione.

Impostazione del database di esempio (BooksSample)

Abbiamo bisogno di un database di esempio per testare ed eseguire gli script. Per prima cosa, dobbiamo impostare quel database di esempio, coprendo i seguenti passaggi:

  1. Crea un database di esempio.
  2. Crea una tabella nel database di esempio.
  3. Inserisci i dati (due righe) nella tabella del database.

Aprire SQL Server Management Studio o dbForge Studio per SQL Server ed eseguire lo script seguente per configurare il database di esempio:

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

Visualizza i dati (Tabella Prenota)

Esaminiamo la tabella creata e popolata di recente nel database. Esegui lo script seguente:

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

L'output è:

Possiamo vedere le due righe della tabella (Book). Al momento, questi sono tutti i dati presenti in questa tabella.

Elimina i dati

Come ricordiamo, esiste il rischio di eliminare tutte le righe di una tabella se dimentichiamo di menzionare la condizione/criteri per la corretta eliminazione.

Utilizzare sempre la clausola WHERE con l'istruzione Delete per evitare la perdita accidentale di dati. L'unica eccezione dovrebbe essere il caso in cui devi eliminare tutti i dati intenzionalmente.

Per rimuovere tutti i dati (righe) dalla tabella del database di esempio, eseguire il seguente script:

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

L'output è:

Visualizza i dati dopo l'eliminazione

Ora, dobbiamo verificare se tutte le righe sono state eliminate:

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

I risultati sono:

In questo modo, abbiamo eliminato con successo tutte le righe dal Libro tavolo. Per questo, abbiamo applicato l'istruzione DELETE senza alcun criterio/condizione di eliminazione.

Inserisci nuovamente i dati nella tabella (con lo stesso titolo)

Possiamo reinserire i dati (righe) nella tabella e quindi applicare l'istruzione DELETE in base ad alcune condizioni/criteri.

Questa volta scegliamo di inserire più righe, ma aventi volutamente lo stesso titolo:

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

L'output è il seguente:

Nota :Per ripristinare i dati cancellati o modificati, è possibile utilizzare le soluzioni software dedicate. La soluzione dbForge Transaction Log ti consente sia di ripristinare quei dati che di visualizzare chi e quando li ha eliminati o modificati.

Visualizza i dati prima dell'eliminazione

Per visualizzare i dati, eseguire il seguente script:

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

L'output è:

L'output dimostra che abbiamo inserito per errore tre righe con lo stesso titolo del libro. È un problema. La semplice soluzione è rimuovere le righe non necessarie, applicando la condizione specifica per rimuovere le righe con titoli duplicati.

Come eliminare i dati nella colonna SQL in base a una condizione (BookNumber)

Importante:potremmo considerare uno dei seguenti modi per risolvere questo problema:

  1. Elimina per numero libro
  2. Elimina per titolo

Nel mio scenario, scelgo di non eliminare per titolo. Se eliminiamo per titolo, finiamo per eliminare tutte le righe contenenti quel titolo, comprese quelle che dobbiamo conservare. Pertanto, l'approccio consigliato consiste nel rimuovere la tabella in base al BookNumber colonna.

Se osserviamo il set di risultati, possiamo facilmente capire che BookNumber:3 e Numero Libro:4 sono righe duplicate. In precedenza, è stato spiegato in dettaglio come rimuovere i duplicati in SQL. Dobbiamo eliminarli per mantenere il database coerente.

Anche in questo caso, sorgono le seguenti opzioni:

  1. Elimina dove il numero del libro (BookNumber) è maggiore di 2.
  2. Elimina dove BookNumber è 3 e 4.

Scegliamo la prima opzione. Tuttavia, ricorda che è valido solo se non ci sono righe dopo le righe duplicate di cui siamo a conoscenza.

Esegui il seguente script:

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

Visualizza i dati dopo l'eliminazione

Controlliamo la tabella dopo aver cancellato i dati:

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

L'output è:

Inserisci più dati nella tabella (più Stock)

Per inserire più dati (riga) relativi allo stock, utilizziamo lo script seguente:

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

Visualizza i dati prima dell'eliminazione

Dai un'occhiata alla tabella:

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

L'output è:

Elimina i dati in base a una condizione diversa

Si supponga di dover rimuovere i libri di magazzino per mantenere informazioni più accurate nel database. Per fare ciò, dovremmo cercare quelle righe con Stock è 0.

Possiamo utilizzare l'istruzione DELETE con la condizione basata su Stock valore della colonna 0:

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

Visualizza i dati dopo l'eliminazione

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

Inserisci più dati nella tabella (più titoli e stock)

Stiamo aggiungendo altre due righe nella tabella:

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

Visualizza i dati prima dell'eliminazione

Controlla le righe prima di eliminare qualsiasi altra cosa, in base al requisito:

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

L'output della tabella è:

Elimina i dati in base a due condizioni

Questa volta, dobbiamo eliminare tutti i libri (righe) dove i titoli contengono la parola SQL e sono esauriti (il loro valore azionario è 0).

In altre parole, eliminiamo tutti i libri contabili esauriti relativi a SQL.

In questo caso, dobbiamo specificare più di una condizione con l'istruzione DELETE. Dobbiamo assicurarci di eliminare solo i libri esauriti e solo i libri che hanno la parola SQL nel titolo.

Visualizza il seguente 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

Visualizza i dati dopo l'eliminazione

Vediamo i dati per l'ultima volta:

Suggerimento importante :prima di eliminare i dati, eseguire l'istruzione SELECT in base alla stessa condizione che utilizzerai per l'eliminazione. In questo modo, ti assicuri che le tue attività di eliminazione si applicheranno ai dati corretti.

Ad esempio, esegui prima la query SELECT per assicurarti di ottenere solo le righe destinate all'eliminazione:

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

Una volta che sei sicuro, puoi trasformare il tuo SELECT nell'istruzione DELETE:

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

Congratulazioni!

Hai completato con successo il compito di rimuovere (eliminare) una o più righe da una tabella in base ai requisiti.

Rimani in contatto per scenari di eliminazione avanzati e altri suggerimenti professionali sull'utilizzo dell'istruzione DELETE.

Cose da fare

Ora che puoi rimuovere correttamente le righe da una tabella, puoi allenarti e migliorare ulteriormente le tue abilità:

  1. Cerca di rimuovere le righe in cui è presente un solo articolo nel magazzino.
  2. Elimina tutti i libri in cui il titolo contiene la parola Struttura.
  3. Elimina tutti i libri (righe) tranne il numero del libro (BookNumber) 1.

Scopri scenari più avanzati sull'istruzione SQL DELETE.