Microsoft SQL Server INSERTAR / SELECCIONAR / ACTUALIZAR / BORRAR: los conceptos básicos del lenguaje de manipulación de datos


Ejemplo

La función de lenguaje de L a D M aip (DML para abreviar) incluye operaciones como INSERT , UPDATE y DELETE :

-- Create a table HelloWorld

CREATE TABLE HelloWorld (
    Id INT IDENTITY,
    Description VARCHAR(1000)
)


-- DML Operation INSERT, inserting a row into the table
INSERT INTO HelloWorld (Description) VALUES ('Hello World')


-- DML Operation SELECT, displaying the table 
SELECT * FROM HelloWorld  


-- Select a specific column from table
SELECT Description FROM HelloWorld


-- Display number of records in the table
SELECT Count(*) FROM HelloWorld


-- DML Operation UPDATE, updating a specific row in the table
UPDATE HelloWorld SET Description = 'Hello, World!' WHERE Id = 1


-- Selecting rows from the table (see how the Description has changed after the update?)
SELECT * FROM HelloWorld


-- DML Operation - DELETE, deleting a row from the table
DELETE FROM HelloWorld WHERE Id = 1


-- Selecting the table. See table content after DELETE operation 
SELECT * FROM HelloWorld

En este script estamos creando una tabla para demostrar algunas consultas básicas.

Los siguientes ejemplos muestran cómo consultar las tablas:

USE Northwind;
GO
SELECT TOP 10 * FROM Customers 
ORDER BY CompanyName

seleccionará los primeros 10 registros de la tabla de Customer , ordenados por la columna CompanyName de la base de datos Northwind (que es una de las bases de datos de muestra de Microsoft, se puede descargar desde aquí ):

Consulta de base de datos de Northwind

Tenga en cuenta que Use Northwind; cambia la base de datos predeterminada para todas las consultas posteriores. Aún puede hacer referencia a la base de datos utilizando la sintaxis completa en forma de [Base de datos]. [Esquema]. [Tabla]:

SELECT TOP 10 * FROM Northwind.dbo.Customers 
ORDER BY CompanyName

SELECT TOP 10 * FROM Pubs.dbo.Authors
ORDER BY City

Esto es útil si está consultando datos de diferentes bases de datos. Tenga en cuenta que dbo , especificado "en medio" se denomina esquema y debe especificarse mientras se usa la sintaxis completamente calificada. Puedes considerarlo como una carpeta dentro de tu base de datos. dbo es el esquema predeterminado. El esquema predeterminado puede omitirse. Todos los otros esquemas definidos por el usuario deben ser especificados.

Si la tabla de la base de datos contiene columnas que se denominan como palabras reservadas, por ejemplo, Date , debe incluir el nombre de la columna entre paréntesis, como este:

-- descending order
SELECT TOP 10 [Date] FROM dbo.MyLogTable
ORDER BY [Date] DESC

Lo mismo se aplica si el nombre de la columna contiene espacios en su nombre (lo cual no se recomienda). Una sintaxis alternativa es utilizar comillas dobles en lugar de corchetes, por ejemplo:

-- descending order
SELECT top 10 "Date" from dbo.MyLogTable
order by "Date" desc 

Es equivalente pero no tan comúnmente usado. Observe la diferencia entre comillas dobles y comillas simples: las comillas simples se usan para cadenas, es decir,

-- descending order
SELECT top 10 "Date" from dbo.MyLogTable
where UserId='johndoe'
order by "Date" desc 

Es una sintaxis válida. Tenga en cuenta que T-SQL tiene un prefijo N para los tipos de datos NChar y NVarchar, por ejemplo,

SELECT TOP 10 * FROM Northwind.dbo.Customers 
WHERE CompanyName LIKE N'AL%'
ORDER BY CompanyName

devuelve todas las compañías que tienen un nombre de compañía que comienza con AL ( % es un comodín, úselo como usaría el asterisco en una línea de comando de DOS, por ejemplo, DIR AL* ). Para LIKE , hay un par de comodines disponibles, mira aquí para conocer más detalles.

Se une

Las combinaciones son útiles si desea consultar campos que no existen en una sola tabla, sino en varias tablas. Por ejemplo: desea consultar todas las columnas de la tabla de Region en la base de datos de Northwind . Pero observa que también necesita la RegionDescription , que se almacena en una tabla diferente, Region . Sin embargo, hay una clave común, RgionID que puede usar para combinar esta información en una sola consulta de la siguiente manera (las Top 5 solo devuelven las primeras 5 filas, omítala para obtener todas las filas):

SELECT TOP 5 Territories.*, 
    Regions.RegionDescription 
FROM Territories 
INNER JOIN Region 
    ON Territories.RegionID=Region.RegionID
ORDER BY TerritoryDescription

mostrará todas las columnas de Territories más la columna Region RegionDescription de Region . El resultado está ordenado por TerritoryDescription .

Alias ​​de tabla

Cuando su consulta requiere una referencia a dos o más tablas, puede que le resulte útil usar un Alias ​​de tabla. Los alias de tabla son referencias abreviadas de tablas que se pueden usar en lugar de un nombre completo de tabla y pueden reducir la escritura y la edición. La sintaxis para usar un alias es:

<TableName> [as] <alias>

Donde as es una palabra clave opcional. Por ejemplo, la consulta anterior se puede reescribir como:

SELECT TOP 5 t.*, 
    r.RegionDescription 
FROM Territories t
INNER JOIN Region r 
    ON t.RegionID = r.RegionID
ORDER BY TerritoryDescription

Los alias deben ser únicos para todas las tablas en una consulta, incluso si usa la misma tabla dos veces. Por ejemplo, si su tabla de Empleado incluyó un campo SupervisorId, puede usar esta consulta para devolver el nombre de un empleado y su supervisor:

SELECT e.*, 
    s.Name as SupervisorName -- Rename the field for output
FROM Employee e
INNER JOIN Employee s
    ON e.SupervisorId = s.EmployeeId
WHERE e.EmployeeId = 111

Uniones

Como hemos visto antes, una unión agrega columnas de diferentes orígenes de tabla. ¿Pero qué pasa si quieres combinar filas de diferentes fuentes? En este caso puedes usar un UNION. Supongamos que está planeando una fiesta y desea invitar no solo a los empleados, sino también a los clientes. Entonces podrías ejecutar esta consulta para hacerlo:

SELECT FirstName+' '+LastName as ContactName, Address, City FROM Employees
UNION
SELECT ContactName, Address, City FROM Customers

Devolverá nombres, direcciones y ciudades de los empleados y clientes en una sola tabla. Tenga en cuenta que las filas duplicadas (si las hubiera) se eliminan automáticamente (si no desea esto, use UNION ALL lugar). El número de columna, los nombres de columna, el orden y el tipo de datos deben coincidir en todas las declaraciones de selección que forman parte de la unión: esta es la razón por la que SELECT combina el FirstName y el LastName del Empleado en el FirstName del ContactName .

Variables de tabla

Puede ser útil, si necesita lidiar con datos temporales (especialmente en un procedimiento almacenado), para usar las variables de la tabla: la diferencia entre una tabla "real" y una variable de la tabla es que solo existe en la memoria para el procesamiento temporal.

Ejemplo:

DECLARE @Region TABLE
(
  RegionID int, 
  RegionDescription NChar(50)
)

crea una tabla en la memoria. En este caso, el prefijo @ es obligatorio porque es una variable. Puede realizar todas las operaciones DML mencionadas anteriormente para insertar, eliminar y seleccionar filas, por ejemplo,

INSERT INTO @Region values(3,'Northern')
INSERT INTO @Region values(4,'Southern')

Pero normalmente, lo rellenarías en base a una tabla real como

INSERT INTO @Region
SELECT * FROM dbo.Region WHERE RegionID>2;

que leería los valores filtrados de la tabla real dbo.Region e insertarlo en la tabla de memoria @Region , donde se puede utilizar para un procesamiento posterior. Por ejemplo, podrías usarlo en una unión como

SELECT * FROM Territories t
JOIN @Region r on t.RegionID=r.RegionID

Lo que en este caso devolvería todos Southern territorios del Northern y Southern . Más información detallada se puede encontrar aquí . Las tablas temporales se discuten aquí , si está interesado en leer más sobre ese tema.

NOTA: Microsoft solo recomienda el uso de variables de tabla si el número de filas de datos en la variable de tabla es inferior a 100. Si trabajará con grandes cantidades de datos, use una tabla temporal o tabla temporal, en su lugar.