Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Instrução de exclusão do SQL Server:como remover uma ou multiplicar linhas da tabela


A aplicação correta da instrução DELETE para remoção de dados é crucial e envolve muitos problemas. Ainda assim, existem práticas padrão de uso da instrução DELETE que simplificam todas essas tarefas.

Este artigo explorará alguns dos cenários da vida profissional para equipá-lo com as dicas mais úteis para usar a instrução DELETE corretamente. Você pode remover dados de uma tabela de diferentes maneiras. Explore a diferença entre DELETE e TRUNCATE no SQL Server que foi abordada com exemplos práticos.

T-SQL Excluir Comando Noções básicas


Antes de tudo, devemos nos familiarizar com a instrução T-SQL Delete da maneira mais simples possível.

A instrução Delete, como o nome indica, é uma instrução que nos ajuda a excluir dados da tabela do banco de dados.

Uma tabela é uma estrutura que você cria em um banco de dados para armazenar seus dados. Por exemplo, podemos ter uma tabela de livros para armazenar registros relacionados a esses livros.

Um banco de dados é uma coleção organizada de dados e as estruturas de dados para armazenar esses dados. Em outras palavras, os dados podem ser armazenados dentro do banco de dados na forma de tabelas.

Como excluir uma ou várias linhas


Podemos excluir um ou mais registros (comumente conhecidos como linhas) de uma tabela usando a instrução delete.

A instrução Delete remove alguns ou todos os dados (linhas) de uma tabela.

De acordo com a documentação da Microsoft, a instrução Delete remove uma ou mais linhas de uma tabela ou exibição no SQL Server.

Alguém pode se perguntar como a instrução define se deve remover alguns ou todos os dados (linhas) de uma tabela. A resposta está nos critérios ou condições que especificam o que precisa ser removido.

Excluir comando no SQL Server


A sintaxe mais simples da instrução é a seguinte:
Delete FROM <TableName> WHERE <Condition>

Você precisa fornecer o nome da tabela e os critérios/condições para a exclusão de dados (linhas) da tabela.

Observação:é crucial usar a instrução DELETE com uma condição (cláusula WHERE), embora o requisito de condição não seja obrigatório.

Se você executar o comando DELETE table sem a condição WHERE, acabará deletando todas as linhas (dados) da tabela. Portanto, crie o hábito de usar a condição WHERE, a menos que queira remover todas as linhas.

Compatibilidade


Essa instrução é compatível com muitas versões do SQL Server, incluindo as seguintes:
  1. SQL Server 2012 e versões posteriores.
  2. Banco de dados SQL Server baseado em nuvem (Banco de dados SQL do Azure).
  3. SQL Data Warehouse baseado em nuvem (Azure Synapse Analytics).

Lista de verificação passo a passo para remover linhas da tabela


Agora vamos explorar o uso da instrução Delete com vários cenários práticos.

O resumo das etapas

  1. Configure um banco de dados de amostra.
  2. Visualize os dados.
  3. Exclua os dados.
  4. Insira mais dados de volta na tabela.
  5. Visualize os dados antes da exclusão.
  6. Como excluir dados em uma coluna com base em uma condição.
  7. Visualize os dados após a exclusão.
  8. Insira mais dados de volta na tabela.
  9. Visualize os dados antes da exclusão.
  10. Exclua os dados com base em outra condição.
  11. Visualize os dados após a exclusão.
  12. Insira os dados de volta na tabela.
  13. Desta vez, exclua os dados com base em duas condições.
  14. Visualize os dados após a exclusão.

Configurar banco de dados de amostra (BooksSample)


Precisamos de um banco de dados de amostra para testar e executar os scripts. Primeiro, precisamos configurar esse banco de dados de amostra, cobrindo as seguintes etapas:
  1. Crie um banco de dados de amostra.
  2. Crie uma tabela no banco de dados de amostra.
  3. Insira os dados (duas linhas) na tabela do banco de dados.

Abra o SQL Server Management Studio ou dbForge Studio for SQL Server e execute o seguinte script para configurar o banco de dados de exemplo:
-- 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

Visualizar os dados (tabela de livros)

Vamos visualizar a tabela recentemente criada e preenchida no banco de dados. Execute o script abaixo:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

A saída é:

Podemos ver as duas linhas da tabela (Book). No momento, esses são todos os dados presentes nesta tabela.

Excluir os dados


Como lembramos, existe o risco de excluir todas as linhas de uma tabela se esquecermos de mencionar a condição/critérios para a exclusão correta.

Sempre use a cláusula WHERE com a instrução Delete para evitar perda acidental de dados. A única exceção deve ser o caso quando você precisa excluir todos os dados intencionalmente.

Para remover todos os dados (linhas) da tabela de banco de dados de amostra, execute o seguinte script:
-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book

A saída é:

Visualizar os dados após a exclusão

Agora, precisamos verificar se todas as linhas foram excluídas:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Os resultados são:

Dessa forma, excluímos com sucesso todas as linhas do Livro tabela. Para isso, aplicamos a instrução DELETE sem nenhum critério/condição de exclusão.

Inserir dados de volta na tabela (com o mesmo título)


Podemos inserir os dados (linhas) de volta na tabela e aplicar a instrução DELETE com base em algumas condições/critérios.

Desta vez, optamos por inserir mais linhas, mas deliberadamente com o mesmo título:
-- 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

A saída é a seguinte:

Observação :Para restaurar os dados excluídos ou alterados, você pode usar as soluções de software dedicadas. A solução dbForge Transaction Log permite restaurar esses dados e visualizar quem e quando os excluiu ou alterou.

Visualizar os dados antes da exclusão

Para visualizar os dados, execute o seguinte script:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

A saída é:

A saída demonstra que inserimos três linhas com o mesmo título de livro por engano. Isso é um problema. A solução simples é remover as linhas desnecessárias, aplicando a condição específica para remover linhas com títulos duplicados.

Como excluir dados na coluna SQL com base em uma condição (BookNumber)


Importante:Podemos considerar uma das seguintes maneiras de resolver este problema:
  1. Excluir por BookNumber
  2. Excluir por título

No meu cenário, escolho não excluir por Título. Se excluirmos por Título, acabamos excluindo todas as linhas que contêm esse título, incluindo aquelas que precisamos manter. Portanto, a abordagem recomendada é remover a tabela com base no BookNumber coluna.

Se observarmos o conjunto de resultados, podemos entender facilmente que BookNumber:3 e Número do livro:4 são linhas duplicadas. Anteriormente, foi explicado em detalhes como remover duplicatas no SQL. Devemos excluí-los para manter o banco de dados consistente.

Novamente, surgem as seguintes opções:
  1. Excluir onde o número do livro (BookNumber) for maior que 2.
  2. Excluir onde BookNumber é 3 e 4.

Vamos escolher a primeira opção. No entanto, lembre-se de que só é válido se não houver linhas após as linhas duplicadas que conhecemos.

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

Visualizar os dados após a exclusão

Vamos verificar a tabela depois de excluir os dados:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

A saída é:

Inserir mais dados na tabela (mais estoque)


Para colocar mais dados (linha) relacionados ao estoque, usamos o script abaixo:
-- 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

Visualizar dados antes da exclusão

Dê uma olhada na tabela:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

A saída é:

Excluir os dados com base em uma condição diferente


Suponha que precisamos remover livros de estoque para manter informações mais precisas no banco de dados. Para fazer isso, devemos procurar essas linhas com o estoque é 0.

Podemos usar a instrução DELETE com a condição baseada no Stock valor da coluna 0:
-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book 
DELETE FROM dbo.Book
WHERE Stock=0

Visualizar os dados após a exclusão
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Inserir mais dados na tabela (mais títulos e ações)


Estamos adicionando mais duas linhas à tabela:
-- 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

Visualizar os dados antes da exclusão

Verifique as linhas antes de excluir qualquer outra coisa, com base no requisito:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

A saída da tabela é:

Excluir os dados com base em duas condições


Desta vez, precisamos excluir todos os livros (linhas) onde os títulos contêm a palavra SQL e eles estão fora de estoque (seu valor de estoque é 0).

Em outras palavras, excluímos todos os livros fora de estoque relacionados a SQL.

Nesse caso, devemos especificar mais de uma condição com a instrução DELETE. Temos que garantir que estamos excluindo apenas os livros fora de estoque e apenas os livros com a palavra SQL em seu título.

Visualize o seguinte 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

Visualizar os dados após a exclusão

Vemos os dados pela última vez:

Dica importante Observação:antes de excluir os dados, execute a instrução SELECT com base na mesma condição que você usará para exclusão. Dessa forma, você garante que suas atividades de exclusão serão aplicadas aos dados corretos.

Por exemplo, execute a consulta SELECT primeiro para garantir que você esteja obtendo apenas as linhas destinadas à exclusão:
SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Quando estiver confiante, você pode transformar seu SELECT na instrução DELETE:
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Parabéns!

Você dominou com sucesso a tarefa de remover (excluir) uma ou mais linhas de uma tabela de acordo com os requisitos.

Fique em contato para cenários avançados de exclusão e outras dicas profissionais sobre o uso da instrução DELETE.

Coisas para fazer


Agora que você pode remover linhas de uma tabela com sucesso, você pode treinar e melhorar ainda mais suas habilidades:
  1. Tente remover linhas onde há apenas um item no estoque.
  2. Exclua todos os livros cujo título contenha a palavra Estrutura.
  3. Excluir todos os livros (linhas), exceto o número do livro (BookNumber) 1.

Descubra cenários mais avançados sobre a instrução SQL DELETE.