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

Operaciones CRUD de SQL Server

En la programación de bases de datos existen cuatro operaciones fundamentales:crear , leer , actualizar y eliminar CRUD operaciones. Son el primer paso en la programación de bases de datos.

El término CRUD apareció por primera vez en el libro de James Martin "Administración del entorno de la base de datos". Desde entonces, este término se ha vuelto popular. En este artículo, vamos a explorar la operación CRUD en términos de SQL Server porque la sintaxis de la operación puede diferir de otras bases de datos relacionales y NoSQL.

Preparativos

La idea principal de las bases de datos relacionales es almacenar datos en tablas. Los datos de la tabla se pueden leer, insertar, borrar. De esta forma, las operaciones CRUD manipulan los datos de la tabla.

C C REATE Insertar fila/filas en una tabla
D R EAD Leer (seleccionar) fila/filas de una tabla
T T FECHA Editar fila/filas en la tabla
D D ELIMINAR Eliminar fila/filas de la tabla

Para ilustrar las operaciones CRUD, necesitamos una tabla de datos. Vamos a crear uno. Contendrá sólo tres columnas. La primera columna almacenará los nombres de los países, la segunda almacenará el continente de estos países y la última columna almacenará la población de estos países. Podemos crear esta tabla con la ayuda de la instrucción T-SQL y titularla como TblCountry .

CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

Ahora, revisemos las operaciones CRUD realizadas en TblCountry mesa.

C – CREAR

Para agregar nuevas filas a una tabla, usamos INSERTAR EN dominio. En este comando, debemos especificar el nombre de la tabla de destino y enumeraremos los nombres de las columnas entre paréntesis. La estructura de la declaración debe terminar con VALORES:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   ('Germany','Europe',8279000 )

Para agregar varias filas a la tabla, podemos usar el siguiente tipo de instrucción INSERT:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Tenga en cuenta que INTO La palabra clave es opcional y no necesita usarla en las declaraciones de inserción.

INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Además, puede usar el siguiente formato para insertar varias filas en la tabla:

INSERT INTO TblCountry
SELECT 'Germany','Europe',8279000 
UNION ALL
SELECT 'Japan','Asia',126800000 
UNION ALL
SELECT 'Moroco','Africa',35740000

Ahora, copiaremos los datos directamente de la tabla de origen a la tabla de destino. Este método se conoce como INSERTAR EN... SELECCIONAR declaración.

INSERTAR EN... SELECCIONAR requiere hacer coincidir los tipos de datos de las tablas de origen y destino. En la siguiente sentencia INSERT INTO… SELECT, insertaremos los datos de la SourceCountryTbl tabla en el TblCountry mesa.

Al principio, insertamos algunos datos sintéticos en el SourceCountryTbl mesa para esta demostración.

DROP TABLE IF EXISTS [SourceCountryTbl]
CREATE TABLE [dbo].[SourceCountryTbl]
(
	[SourceCountryName]		VARCHAR(50), 
    [SourceContinentNames]	VARCHAR(50) NULL, 
    [SourceCountryPopulation]		BIGINT NULL 
	
)


INSERT INTO [SourceCountryTbl] 
VALUES 
('Ukraine','Europe',44009214  ) ,
('UK','Europe',66573504) ,
('France','Europe',65233271)

Ahora realizaremos la instrucción INSERT INTO... SELECT.

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl

La declaración de inserción anterior agregó todos los SourceCountryTbl datos al TblCountry mesa. También podemos agregar el DONDE cláusula para filtrar la instrucción select.

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl WHERE TargetCountryName='UK'

SQL Server nos permite usar variables de tabla (objetos que ayudan a almacenar datos de tablas temporales en el ámbito local) con las declaraciones INSERT INTO... SELECT. En la siguiente demostración, usaremos la variable de tabla como tabla de origen:

  DECLARE @SourceVarTable AS TABLE
  ([TargetCountryName]		VARCHAR(50), 
    [TargetContinentNames]	VARCHAR(50) NULL, 
    [TargetCountryPopulation]		BIGINT NULL 
   )


    INSERT INTO @SourceVarTable 
     VALUES 
     ('Ukraine','Europe',44009214  ) ,
     ('UK','Europe',66573504) ,
     ('France','Europe',65233271)


INSERT INTO TblCountry
SELECT * FROM @SourceVarTable

Consejo :Microsoft anunció una función en SQL Server 2016 que es inserción paralela . Esta función nos permite realizar operaciones INSERT en subprocesos paralelos.

Si agrega el TABLOCK sugerencia al final de su declaración de inserción, SQL Server puede elegir un paralelo con el plan de ejecución de procesamiento de acuerdo con el grado máximo de paralelismo de su servidor o el umbral de costo para los parámetros de paralelismo.

El procesamiento de inserción en paralelo también reducirá el tiempo de ejecución de la declaración de inserción. Sin embargo, el TABLOCK La sugerencia adquirirá el bloqueo de la tabla insertada durante la operación de inserción. Para obtener más información sobre la inserción paralela, puede consultar la INSERCIÓN paralela del mundo real... SELECCIONAR.

Otra declaración útil es SELECT INTO. Este método nos permite copiar datos de una tabla en una tabla recién creada. En la siguiente declaración, NewCountryTable no existía antes de la ejecución de la consulta. La consulta crea la tabla e inserta todos los datos de TblCountry mesa.

SELECT * INTO NewCountryTable 
FROM TblCountry

Al mismo tiempo, podemos crear una nueva tabla para columnas particulares de la tabla de origen.

En algunos casos, necesitamos devolver y usar valores insertados de la instrucción INSERT. Desde SQL Server 2005, la declaración INSERT nos permite recuperar los valores en cuestión de la declaración INSERT.

Ahora, soltaremos y crearemos nuestra tabla de prueba y agregaremos una nueva columna de identidad. Además, agregaremos una restricción predeterminada a esta columna. Por lo tanto, si no insertamos ningún valor explícito en esta columna, automáticamente creará un nuevo valor.

En el siguiente ejemplo, declararemos una tabla con una columna e insertaremos la salida de SeqID valor de columna a esta tabla con la ayuda de la columna OUTPUT:

DROP TABLE IF EXISTS TblCountry
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL ,
	SeqID uniqueidentifier  default(newid())
)	



DECLARE @OutputID AS TABLE(LogID uniqueidentifier) 
 
INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
OUTPUT INSERTED.SeqId INTO @OutputID
VALUES   
('Germany','Europe',8279000 )

SELECT * FROM @OutPutId

R – Leer

El Leer La operación recupera datos de una tabla y devuelve un conjunto de resultados con los registros de la tabla. En caso de que queramos recuperar datos de más de una tabla, podemos usar el operador JOIN y crear una relación lógica entre tablas.

La sentencia SELECT juega un único papel principal en la lectura operación. Se basa en tres componentes:

  • Columna – definimos las columnas de las que queremos recuperar datos
  • Mesa – nosotros especificar la tabla de la que queremos obtener datos
  • Filtro:nosotros podemos filtrar los datos que queremos leer. Esta parte es opcional.

La forma más simple de la sentencia select es la siguiente:

SELECT column1, column2,...,columnN
FROM table_name

Ahora, vamos a ir a través de los ejemplos. Al principio, necesitamos una tabla de muestra para leer. Vamos a crearlo:

DROP TABLE  IF EXISTS TblCountry
 GO
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

GO
INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Leer todas las columnas de la tabla

El operador de asterisco (*) se usa en las instrucciones SELECT porque devuelve todas las columnas de la tabla:

SELECT * FROM TblCountry

Consejo :El operador de asterisco (*) puede influir negativamente en el rendimiento porque provoca más tráfico de red y consume más recursos. Por lo tanto, si no necesita obtener todos los datos de todas las columnas devueltas, evite usar el asterisco (*) en la instrucción SELECT.

Leer columnas particulares de la tabla

También podemos leer columnas particulares de la tabla. Revisemos el ejemplo que devolverá solo el CountryName y PaísPoblación columnas:

SELECT CountryName,CountryPopulation FROM TblCountry

Uso de alias en las sentencias SELECT

En las declaraciones SELECT, podemos dar nombres temporales a la tabla o columnas. Estos nombres temporales son alias. Reescribamos las dos consultas anteriores con alias de tabla y columna.

En la siguiente consulta, el TblC alias especificará el nombre de la tabla:

SELECT TblC.* FROM TblCountry TblC

En el siguiente ejemplo, proporcionaremos alias para los nombres de las columnas. Cambiaremos CountryName a CNombre y Población del país – a CPop .

SELECT TblC.CountryName AS [CName], CountryPopulation AS [CPop] FROM TblCountry TblC

Los propósitos del alias son:

  • Haga que la consulta sea más legible si los nombres de las tablas o columnas son complejos.
  • Asegúrese de usar una consulta para la tabla más de una vez.
  • Simplifique la redacción de consultas si el nombre de la tabla o columna es largo.

Filtrado de sentencias SELECT

Las declaraciones SELECT nos permiten filtrar los conjuntos de resultados a través de la cláusula WHERE. Por ejemplo, queremos filtrar la declaración SELECT según el CountryName columna y solo devolver los datos de Alemania al conjunto de resultados. La siguiente consulta realizará la operación de lectura con un filtro:

SELECT TblC.* FROM TblCountry TblC
WHERE TblC.CountryName='Germany'

Ordenar los resultados de las sentencias SELECT

La cláusula ORDER BY nos ayuda a ordenar el conjunto de resultados de la declaración SELECT por la columna o columnas especificadas. Podemos realizar una ordenación ascendente o descendente con la ayuda de la cláusula ORDER BY.

Ordenaremos el TblCountry tabla según la población de los países en orden ascendente:

SELECT TblC.* FROM TblCountry TblC
ORDER BY TblC.CountryPopulation ASC

Consejo :puede usar el índice de columna en la cláusula ORDER BY, y los números de índice de columna comienzan por 1.

También podemos escribir la consulta anterior. El número tres (3) indica la población del país columna:

SELECT TblC.* FROM TblCountry TblC
ORDER BY 3 ASC

U – Actualizar

La instrucción UPDATE modifica los datos existentes en la tabla. Esta declaración debe incluir la cláusula SET para que podamos definir la columna de destino para modificar los datos.

La siguiente consulta cambiará todas las filas de CountryPopulation valor de columna a 1.

UPDATE TblCountry SET CountryPopulation=1
GO
SELECT TblC.* FROM TblCountry TblC

En las declaraciones UPDATE, podemos usar la cláusula WHERE para modificar una fila o filas en particular en la tabla.

Cambiemos el Japón fila de CountryPopulation a 245000:

UPDATE TblCountry SET CountryPopulation=245000
WHERE CountryName = 'Japan'
GO
SELECT TblC.* FROM TblCountry TblC

La sentencia UPDATE es una unión de las sentencias delete e insert. Entonces, podemos devolver los valores insertados y eliminados a través de la cláusula OUTPUT.

Pongamos un ejemplo:

UPDATE TblCountry SET CountryPopulation=22
OUTPUT inserted.CountryPopulation AS [Insertedvalue],
deleted.CountryPopulation AS [Deletedvalue]
WHERE CountryName = 'Germany'

Como puede ver, hemos modificado la CountryPopulation valor de 1 a 22. Luego podemos averiguar los valores insertados y eliminados. Además, podemos insertar estos valores en una variable de tabla (un tipo de variable especial que se puede usar como tabla).

Vamos a insertar los valores insertados y eliminados en la variable de la tabla:

DECLARE @LogTable TABLE(InsertValLog INT , DelValLog INT) 


UPDATE TblCountry SET CountryPopulation=45
OUTPUT inserted.CountryPopulation ,
deleted.CountryPopulation INTO @LogTable
WHERE CountryName = 'Germany'


SELECT * FROM @LogTable

@@ROWCOUNT es una variable del sistema que devuelve el número de filas afectadas en la última declaración. Por lo tanto, podemos usar esta variable para exponer algunas filas modificadas en la declaración de actualización.

En el siguiente ejemplo, la consulta de actualización cambiará 3 filas y la variable del sistema @@ROWCOUNT devolverá 3.

UPDATE TblCountry SET CountryPopulation=1
SELECT @@ROWCOUNT AS [AffectedRowNumber]

D – Eliminar

La instrucción Eliminar elimina filas existentes de la tabla.

Primero, veamos cómo usar la cláusula WHERE en las declaraciones DELETE. La mayoría de las veces queremos filtrar las filas eliminadas.

El siguiente ejemplo ilustra cómo eliminar una fila en particular:

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry WHERE CountryName='Japan'
SELECT TblC.* FROM TblCountry TblC

Aunque con la declaración DELETE, podemos eliminar todos los registros de la tabla. Sin embargo, la declaración DELETE es muy básica y no usamos la condición WHERE.

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry
SELECT TblC.* FROM TblCountry TblC

Aún así, bajo algunas circunstancias de los diseños de la base de datos, la instrucción DELETE no elimina la fila o las filas si viola las claves foráneas u otras restricciones.

Por ejemplo, en el AdventureWorks base de datos, no podemos eliminar filas de ProductCategory tabla porque ProductCategoryID se especifica como clave externa en esa tabla.

Intentemos eliminar una fila de ProductCategory table – sin duda, nos enfrentaremos al siguiente error:

DELETE FROM [Production].[ProductCategory]
WHERE ProductCategoryID=1

Conclusión

Por lo tanto, hemos explorado las operaciones CRUD en SQL. Las instrucciones INSERT, SELECT, UPDATE y DELETE son las funciones básicas de la base de datos SQL y debe dominarlas si desea aprender a programar bases de datos SQL. La teoría CRUD podría ser un buen punto de partida y mucha práctica te ayudará a convertirte en un experto.