sql >> Base de Datos >  >> RDS >> Sqlserver

Declaración de eliminación de SQL Server:cómo eliminar una o varias filas de la tabla

La aplicación correcta de la declaración DELETE para la eliminación de datos es crucial e implica muchos problemas. Aún así, existen prácticas estándar del uso de la declaración DELETE que simplifican todas esas tareas.

Este artículo explorará algunos de los escenarios de la vida profesional para brindarle los consejos más útiles para usar la instrucción DELETE correctamente. Puede eliminar datos de una tabla de diferentes maneras. Explore la diferencia entre DELETE y TRUNCATE en SQL Server que se ha cubierto con ejemplos prácticos.

T-SQL Eliminar Comando Conceptos básicos

En primer lugar, debemos familiarizarnos con la declaración T-SQL Delete de la manera más sencilla posible.

La sentencia Delete, como su nombre lo indica, es una sentencia que nos ayuda a eliminar datos de la tabla de la base de datos.

Una mesa es una estructura que crea en una base de datos para almacenar sus datos. Por ejemplo, podemos tener una tabla de libros para almacenar registros relacionados con esos libros.

Una base de datos es una colección organizada de datos y las estructuras de datos para contener esos datos. En otras palabras, los datos se pueden almacenar dentro de la base de datos en forma de tablas.

Cómo eliminar una o varias filas

Podemos eliminar uno o más registros (comúnmente conocidos como filas) de una tabla usando la declaración de eliminación.

La instrucción Eliminar elimina algunos o todos los datos (filas) de una tabla.

De acuerdo con la documentación de Microsoft, la instrucción Delete elimina una o más filas de una tabla o vista en SQL Server.

Uno podría preguntarse cómo define la declaración si eliminar algunos o todos los datos (filas) de una tabla. La respuesta está en los criterios o condiciones que especifican lo que debe eliminarse.

Eliminar comando en SQL Server

La sintaxis más simple de la sentencia es la siguiente:

Delete FROM <TableName> WHERE <Condition>

Debe proporcionar el nombre de la tabla y los criterios/condiciones para la eliminación de datos (filas) de la tabla.

Nota:es fundamental utilizar la declaración DELETE con una condición (cláusula WHERE), aunque el requisito de la condición no es obligatorio.

Si ejecuta el comando DELETE table sin la condición WHERE, terminará eliminando todas las filas (datos) de la tabla. Por lo tanto, acostúmbrese a usar la condición WHERE a menos que desee eliminar todas las filas.

Compatibilidad

Esta declaración es compatible con muchas versiones de SQL Server, incluidas las siguientes:

  1. SQL Server 2012 y versiones posteriores.
  2. Base de datos de SQL Server basada en la nube (Base de datos Azure SQL).
  3. Almacén de datos SQL basado en la nube (Azure Synapse Analytics).

Lista de verificación paso a paso para eliminar filas de la tabla

Ahora vamos a explorar el uso de la instrucción Delete con varios escenarios prácticos.

El resumen de los pasos

  1. Configure una base de datos de muestra.
  2. Ver los datos.
  3. Eliminar los datos.
  4. Vuelva a insertar más datos en la tabla.
  5. Ver los datos antes de eliminarlos.
  6. Cómo eliminar datos en una columna según una condición.
  7. Ver los datos después de la eliminación.
  8. Vuelva a insertar más datos en la tabla.
  9. Ver los datos antes de eliminarlos.
  10. Eliminar los datos en función de otra condición.
  11. Ver los datos después de la eliminación.
  12. Inserte los datos nuevamente en la tabla.
  13. Elimine los datos en función de dos condiciones esta vez.
  14. Ver los datos después de la eliminación.

Configurar base de datos de muestra (BooksSample)

Necesitamos una base de datos de muestra para probar y ejecutar los scripts. Primero, necesitamos configurar esa base de datos de muestra, cubriendo los siguientes pasos:

  1. Cree una base de datos de muestra.
  2. Cree una tabla en la base de datos de ejemplo.
  3. Inserte los datos (dos filas) en la tabla de la base de datos.

Abra SQL Server Management Studio o dbForge Studio para SQL Server y ejecute el siguiente script para configurar la base de datos de muestra:

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

Ver los datos (Tabla de libros)

Veamos la tabla recientemente creada y poblada en la base de datos. Ejecute el siguiente script:

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

La salida es:

Podemos ver las dos filas de la tabla (Libro). Por el momento, estos son todos los datos presentes en esta tabla.

Eliminar los datos

Como recordamos, existe el riesgo de eliminar todas las filas de una tabla si olvidamos mencionar la condición/criterios para la eliminación correcta.

Utilice siempre la cláusula WHERE con la instrucción Eliminar para evitar la pérdida accidental de datos. La única excepción debería ser el caso cuando necesite eliminar todos los datos intencionalmente.

Para eliminar todos los datos (filas) de la tabla de la base de datos de muestra, ejecute el siguiente script:

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

La salida es:

Ver los datos después de la eliminación

Ahora, debemos verificar si se han eliminado todas las filas:

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

Los resultados son:

De esta forma, hemos eliminado con éxito todas las filas del Libro mesa. Para eso, aplicamos la declaración DELETE sin ningún criterio/condiciones de eliminación.

Insertar datos nuevamente en la tabla (con el mismo título)

Podemos volver a insertar los datos (filas) en la tabla y luego aplicar la declaración DELETE según algunas condiciones/criterios.

Esta vez, elegimos insertar más filas, pero teniendo deliberadamente el mismo 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

La salida es la siguiente:

Nota :para restaurar los datos eliminados o modificados, puede utilizar las soluciones de software dedicadas. La solución de registro de transacciones de dbForge le permite restaurar esos datos y ver quién los eliminó o modificó y cuándo los eliminó.

Ver los datos antes de eliminarlos

Para ver los datos, ejecute el siguiente script:

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

La salida es:

El resultado demuestra que hemos insertado tres filas con el mismo título de libro por error. Es un problema. La solución simple es eliminar las filas innecesarias, aplicando la condición específica para eliminar filas con títulos duplicados.

Cómo eliminar datos en una columna SQL en función de una condición (número de libro)

Importante:Podemos considerar una de las siguientes formas de resolver este problema:

  1. Eliminar por número de libro
  2. Eliminar por título

En mi escenario, elijo no eliminar por Título. Si eliminamos por Título, terminamos eliminando todas las filas que contienen ese título, incluidas las que debemos conservar. Por lo tanto, el enfoque recomendado es eliminar la tabla según el BookNumber columna.

Si observamos el conjunto de resultados, podemos entender fácilmente que BookNumber:3 y Número de libro:4 son filas duplicadas. Anteriormente, se explicó en detalle cómo eliminar duplicados en SQL. Debemos eliminarlos para mantener la base de datos consistente.

Nuevamente, surgen las siguientes opciones:

  1. Eliminar cuando el número de libro (BookNumber) sea mayor que 2.
  2. Eliminar donde BookNumber es 3 y 4.

Elijamos la primera opción. Sin embargo, recuerde que solo es válido si no hay filas después de las filas duplicadas que conocemos.

Ejecute el siguiente script:

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

Ver los datos después de la eliminación

Revisemos la tabla después de eliminar los datos:

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

La salida es:

Insertar más Datos en la Tabla (más Stock)

Para poner más datos (fila) relacionados con el stock, usamos el siguiente 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

Ver datos antes de eliminarlos

Echa un vistazo a la tabla:

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

La salida es:

Eliminar los datos en función de una condición diferente

Supongamos que necesitamos eliminar libros agotados para mantener información más precisa en la base de datos. Para hacer esto, debemos buscar aquellas filas con Stock es 0.

Podemos usar la declaración DELETE con la condición basada en el Stock valor de columna 0:

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

Ver los datos después de la eliminación

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

Insertar más datos en la tabla (más títulos y existencias)

Estamos agregando dos filas más a la tabla:

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

Ver los datos antes de eliminarlos

Verifique las filas antes de eliminar algo más, según el requisito:

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

La salida de la tabla es:

Eliminar los datos en función de dos condiciones

Esta vez, debemos eliminar todos los libros (filas) donde los títulos contienen la palabra SQL y están agotados (su valor de stock es 0).

En otras palabras, eliminamos todos los libros agotados relacionados con SQL.

En este caso, debemos especificar más de una condición con la sentencia DELETE. Tenemos que asegurarnos de que solo estamos eliminando los libros agotados y solo aquellos libros que tienen la palabra SQL en su título.

Ver el siguiente 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

Ver los datos después de la eliminación

Vemos los datos por última vez:

Consejo importante :antes de eliminar los datos, ejecute la instrucción SELECT en función de la misma condición que utilizará para la eliminación. De esta manera, te aseguras de que tus actividades de eliminación se aplicarán a los datos correctos.

Por ejemplo, ejecute primero la consulta SELECT para asegurarse de que solo obtiene las filas que están destinadas a ser eliminadas:

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

Una vez que esté seguro, puede convertir su SELECT en la instrucción DELETE:

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

¡Felicitaciones!

Ha dominado con éxito la tarea de eliminar (eliminar) una o más filas de una tabla de acuerdo con los requisitos.

Manténgase en contacto para escenarios de eliminación avanzados y otros consejos profesionales sobre el uso de la instrucción DELETE.

Cosas que hacer

Ahora que puede eliminar filas de una tabla con éxito, puede entrenar y mejorar aún más sus habilidades:

  1. Intente eliminar las filas donde solo hay un artículo en stock.
  2. Elimine todos los libros cuyo título contenga la palabra Estructura.
  3. Elimine todos los libros (filas) excepto el número de libro (BookNumber) 1.

Descubra escenarios más avanzados sobre la instrucción SQL DELETE.