Taller de Base de Datos - Unidad 3 lenguage DML

42
Ingeniería en Sistemas Computacionales Taller de Base de Datos Unidad III: Lenguaje de Manipulación de Datos DML Este material está desarrollado para la asignatura Taller de Base de Datos, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224 TALLER DE BASE DE DATOS

Transcript of Taller de Base de Datos - Unidad 3 lenguage DML

Page 1: Taller de Base de Datos - Unidad 3 lenguage DML

Ingeniería en Sistemas Computacionales

Taller de Base de DatosUnidad III: Lenguaje de Manipulación de

Datos DML

Este material está desarrollado para la asignatura Taller de Base de Datos, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224

TALLER DE BASE DE DATOS

Page 2: Taller de Base de Datos - Unidad 3 lenguage DML

Competencia: Manipular bases de datos a través de un SGBD.

TALLER DE BASE DE DATOS

Page 3: Taller de Base de Datos - Unidad 3 lenguage DML

Antes de continuar con el trabajo de esta unidad debemos descargar la DB ejemplo de Microsoft SQL Server 2012, la cual nos servirá para realizar las prácticas correspondientes tanto de esta unidad como de unidades posteriores.

• Acceder a la siguiente URL: (o buscar el archivo en Microsoft.com)https://drive.google.com/drive/folders/0B6oB4Y5y2s76fjdUcjEtVnVEX21xUnJfRktEazd0Wl9yQ0QxUy1GVmRxUkdMa0gtWW5FQms • Descargar archivo de DB AdventuresWorks2012BK.bkp• Restaurar el Back Up en SQL server• Una vez restaurado encontraras en tu instancia de SQL server la DB

AdventuresWordks2012 con la cual trabajaremos.

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 4: Taller de Base de Datos - Unidad 3 lenguage DML

Inserción, Eliminación y Modificación de RegistrosSQL Server proporciona varios métodos para modificar la información contenida en las DBs, iniciaremos esta unidad con la inserción de registros en una tabla.• La instrucción más común para ello es el comando INSERT que puede ser

dividido en dos formas: INSERT INTO SELECT INTO

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 5: Taller de Base de Datos - Unidad 3 lenguage DML

INSERT INTO• El primer método utiliza el comando INSERT INTO y sirve para insertar uno

o muchos registros en una tabla, pudiendo afectar todas las columnas, columnas específicas, columnas ‘identity’, entre otras opciones.

Sintaxis de INSERT INTOUSE <<database>>; INSERT INTO <<table>>(campo1, campo2,….,campoN) VALUES(valor1, valor2,….,valorN);

• El ejemplo anterior sirve para insertar un único registro.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 6: Taller de Base de Datos - Unidad 3 lenguage DML

• Los valores proporcionados deben estar en el mismo orden que los campos que se van a modificar, ya que de no coincidir los tipos de datos SQL Server marcará un error de ejecución y cancelará la inserción de registros.

Ejemplo USE AdventureWorks2012; INSERT INTO HumanResources.Department (Name, GroupName, ModifiedDate) VALUES ('Payroll', 'Executive General and Administration', '6/12/2012');

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 7: Taller de Base de Datos - Unidad 3 lenguage DML

• Los campos tipo Identity no deben ser incluidos en la lista de campos ni se les asigna valor por medio de query ya que SQL Server asigna el valor correspondiente de acuerdo a las reglas del propio campo.• En caso de requerir insertar valores en campos identity se debe hacer uso de la

instrucción SET IDENTITY_INSERT [ON/OFF]Ejemplo:

USE AdventureWorks2012; SET IDENTITY_INSERT HumanResources.Department ON INSERT INTO HumanResources.Department (DepartmentID, Name, GroupName, ModifiedDate) VALUES (18, 'International Marketing', 'Sales and Marketing', '5/26/2012'); SET IDENTITY_INSERT HumanResources.Department OFF

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 8: Taller de Base de Datos - Unidad 3 lenguage DML

Insertar Varios Registros con un Solo Query• También es posible insertar varios registros a la vez por medio de un query

de T-SQL, para ello debemos repetir los valores entre paréntesis después de la clausula VALUE tantas veces sean los registros que vamos a insertar y separando los grupos de valores con una coma.

Ejemplo:USE AdventureWorks2012; INSERT INTO HumanResources.Department VALUES (‘International Sales’, ‘Sales and Marketing’, ‘5/26/2012’), (‘Media Control’, ‘Quality Assurance’, ‘5/26/2012’)

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 9: Taller de Base de Datos - Unidad 3 lenguage DML

• También es posible realizar la inserción de múltiples registros por medio de una cláusula SELECT, para ello después de la cláusula INSERT INTO se debe sustituir la palabra VALUE por un SELECT que retraiga los valores a insertar.

Ejemplo:USE AdventureWorks2012; INSERT INTO HumanResources.Department (Name, GroupName, ModifiedDate) SELECT Name+' USA', GroupName, ModifiedDate FROM HumanResources.Department WHERE DepartmentID IN (20, 19);

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 10: Taller de Base de Datos - Unidad 3 lenguage DML

Uso de la Cláusula SELECT INTO para Insertar Registros• Otra forma de insertar registros en una tabla es por medio de la cláusula SELECT

INTO, la cual crea una nueva tabla e inserta en ella todos los registros que resulten de la selección planteada.

Ejemplo:USE AdventureWorks2012; SELECT DepartmentID, Name, GroupName, ModifiedDate INTO dbo.Department FROM HumanResources.Department

• Se debe ser cuidadoso con el uso de esta forma de inserción, ya que si bien, son copiados los registros bajo el mismo esquema de la tabla original, los PK, constraints, e índices no son creados en la nueva tabla. Su uso es generalmente para crear tablas temporales.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 11: Taller de Base de Datos - Unidad 3 lenguage DML

Inserción de Registros por Medio de Archivos de Datos Externos• Uso de la instrucción BULK INSERT: Esta cláusula importa un archivo de datos en una

tabla o vista de base de datos con un formato especificado por el usuario en SQL Server. Sintaxis:

TALLER DE BASE DE DATOS

BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ] FROM 'data_file' [ WITH ( [ [ , ] BATCHSIZE = batch_size ] [ [ , ] CHECK_CONSTRAINTS ] [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] [ [ , ] DATAFILETYPE = { 'char' | 'native'| 'widechar' | 'widenative'

} ] [ [ , ] FIELDTERMINATOR = 'field_terminator' ] [ [ , ] FIRSTROW = first_row ] [ [ , ] FIRE_TRIGGERS ] [ [ , ] FORMATFILE = 'format_file_path' ] [ [ , ] KEEPIDENTITY ] [ [ , ] KEEPNULLS ] [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ] [ [ , ] LASTROW = last_row ] [ [ , ]

MAXERRORS = max_errors ] [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ] [ [ , ] ROWS_PER_BATCH = rows_per_batch ] [ [ , ] ROWTERMINATOR = 'row_terminator' ] [ [ , ] TABLOCK ] [ [ , ] ERRORFILE = 'file_name' ] )]

https://msdn.microsoft.com. 2015

Page 12: Taller de Base de Datos - Unidad 3 lenguage DML

Ejemplo:BULK INSERT [Person].[Address] FROM 'C:\SQLData\scripts\Address.csv'WITH ( CHECK_CONSTRAINTS, CODEPAGE='ACP', DATAFILETYPE = 'widechar', FIELDTERMINATOR= '\t', ROWTERMINATOR = '\n', KEEPIDENTITY, TABLOCK);

TALLER DE BASE DE DATOS

LeBlanc, 2013

En este ejemplo se están insertando registros en la tabla Person.Address, desde el archivo Address.csv, el cual tiene como separador de cada columna un carácter TAB, y el fin de línea es un carácter 10 (salto de línea).

Page 13: Taller de Base de Datos - Unidad 3 lenguage DML

Modificación de la Información de la DBOperación DELETE• Dentro de las operaciones básicas para la manipulación de registros en SQL

Server se encuentra la Eliminación de Registros. • Esto se hace por medio de la operación DELETE, la cual requiere de la

cláusula WHERE para realizar la operación. De no incluirse un WHERE en un DELETE, SQL Server asume que debe eliminar todo el contenido de la tabla en cuestión. • Sumado a esto, SQL Server no tiene una operación ‘undo’, por lo que es el

programador quien debe aportar los mecanismos para la recuperación de la información que haya sido eliminada por accidente.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 14: Taller de Base de Datos - Unidad 3 lenguage DML

• Eliminación de un solo registro: En el siguiente ejemplo se está utilizando el campo llave de la tabla respectiva para eliminar un único registro. Pero si la llave de la tabla está compuesta por varias columnas, es posible que el query elimine varios registros también.

Ejemplo:USE AdventureWorks2012; DELETE FROM HumanResources.Department WHERE DepartmentID = 22

• En este caso se está filtrando la cantidad de registros que serán eliminados por medio de la cláusula WHERE, para que se elimine un solo reistro de la tabla.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 15: Taller de Base de Datos - Unidad 3 lenguage DML

• Eliminación de múltiples registros: También es posible eliminar una cantidad indeterminada de registros de la tabla, teniendo como límite el total de registros contenido en la misma. Para esto podemos utilizar expresiones que van después de la cláusula WHERE, en la misma forma que se hace en la instrucción SELECT.

Ejemplo:USE AdventureWorks2012; DELETE FROM HumanResources.Department FROM HumanResources.Department d LEFT OUTER JOIN HumanResources.EmployeeDepartmentHistory ed ON d.DepartmentID = ed.DepartmentID WHERE ed.DepartmentID IS NULL

• En este ejemplo serán eliminados todos aquellos registros que tengan nulo el campo DepartmenID.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 16: Taller de Base de Datos - Unidad 3 lenguage DML

• Eliminación de todo el contenido de una tabla: como ya comentamos antes eso se hace al no colocar en la instrucción DELETE la cláusula WHERE. • Sin embargo existe otra instrucción en SQL Server que elimina el total de los

registros contenidos en una tabla. La instrucción TRUNCATE TABLE. Es muy importante que antes de usar dicha instrucción se haya hecho el análisis respectivo y concluido que eso es lo que se requiere, ya que una vez ejecutado el query correspondiente toda la información de la tabla en cuestión será eliminada.

Ejemplo: USE AdventureWorks2012; TRUNCATE TABLE dbo.Department

Equivale a:USE AdventureWorks2012; DELETE FROM dbo.Department

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 17: Taller de Base de Datos - Unidad 3 lenguage DML

Modificación de Registros de una Tabla• SQL server incluye una instrucción para modificar el contenido de una

tabla. La instrucción UPDATE puede usarse para modificar un único registro, una cantidad indeterminada o incluso el total de los registros de una tabla.

Ejemplo:USE AdventureWorks2012; UPDATE HumanResources.Department SET Name = Name +' Europe' WHERE DepartmentID = 19

• Al igual que la instrucción DELETE es muy importante incluir un WHERE apropiado o accidentalmente podriamos modificar todo el contenido de la tabla.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 18: Taller de Base de Datos - Unidad 3 lenguage DML

Consulta de Registros• En SQL Server la instrucción para realizar consulta de información y

recuperación de registros es SELECT.Sintaxis:

SELECT select_list/* [ INTO new_table ][ FROM table_source ] [ WHERE search_condition ][ GROUP BY group_by_expression ][ HAVING search_condition ][ ORDER BY order_expression [ ASC | DESC ] ]

• Los operadores UNION, EXCEPT e INTERSECT se pueden utilizar entre consultas para combinar o comparar resultados en un conjunto de resultados.

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 19: Taller de Base de Datos - Unidad 3 lenguage DML

Recuperación de Registros• La forma más simple de recuperar uno o varios registros en SQL Server es

por medio de la instrucción SELECT seguida de una lista de los campos que desean mostrarse, así mismo, es necesario hacer uso del a cláusula WHERE, de lo contrario se le estaría indicando a SQL Server que se desea recuperar todo el contenido de la tabla en cuestión.

Ejemplo: Use AdventureWorks2012; Select * from HumanResources.Employee• En este caso no se esta haciendo ningún tipo de filtro, por lo que el query

regresa todos los registros en la tabla Employee con todos sus campos

TALLER DE BASE DE DATOS

Page 20: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula TOP: esta sirve para seleccionar una cantidad determinada de registros de la tabla correspondiente.

Ejemplo: Use AdventureWorks2012; Select TOP 50 NationalIDNumber, JobTitle, Gender, HireDate, SalariedFlag from HumanResources.Employee

• En este caso se estan filtrando ciertos campos de la tabla, y se indica que solo se traerán los primeros 50 registros en ser encontrados.

TALLER DE BASE DE DATOS

Page 21: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula WHERE: esta cláusula sirve para especificar las condiciones bajo las que se realizará la búsqueda de registros en la tabla o conjunto de tablas.

Ejemplos:

• En estos casos el filtraje se esta realizando por medio de WHERE, el cual regresa tantos registros coincidan con la condición planteada.

TALLER DE BASE DE DATOS

Select * FROM Person.PersonWHERE LastName=‘Miller’

Select * FROM Person.PersonWHERE LastName=‘Miller’ and FirstName=‘Frank’

Select BusinessEntityID, LastName, FirstName FROM Person.Person WHERE BusinessEntityID > 5000

Page 22: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula BETWEEN: Algunas veces es necesario buscar información que se encuentra en un orden secuencial respecto a alguna de las columnas de la tabla, por lo que en estos casos en lugar de hacer varias comparaciones lo mejor es utilizar la cláusula BETWEEN como se muestra a continuación:

USE AdventureWorks2012; SELECT AccountNumber, SalesOrderID, OrderDate FROM Sales.SalesOrderHeader WHERE OrderDate BETWEEN ‘05/01/2007' AND '12/31/2007‘

• En este caso se esta utilizando un campo tipo fecha para realizar el filtraje, pero es posible utilizar cualquier tipo de campo para aplicar esta cláusula. • Es importante considerar que BETWEEN aplica un rango de datos por lo que los

límites que usemos irán incluidos en el resultado del SELECT.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 23: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula IN para búsquedas en listas de valores: muchas veces es necesario buscar registros los cuales están relacionados con una lista específica de valores de una columna, en estos casos SQL Server proporciona la cláusula IN para facilitar las búsquedas.

Ejemplo:USE AdventureWorks2012; SELECT SalesOrderDetailID, OrderQty, ProductID, ModifiedDate FROM Sales.SalesOrderDetail WHERE ProductID IN (776, 778, 747, 809);

• En este ejemplo, la cláusula IN permite obtener los registros relacionados con uno o varios productos que se encuentran en la lista proporcionada.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 24: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula LIKE y comodines: el uso de comodines es muy útil cuando deseamos obtener los registros que cumplen con cierta parte de una condición, la cláusula LIKE permite usar comodines los cuales pueden ser un solo carácter o un conjunto de ellos.

Ejemplo:USE AdventureWorks2012; SELECT * FROM HumanResources.Department WHERE Name LIKE 'Pr%'

• En este caso el query regresa todos aquellos departamentos cuyo nombre comience con las letras "Pr", el símbolo de porcentaje indica que lo que hay después del comodín no será evaluado en el query.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 25: Taller de Base de Datos - Unidad 3 lenguage DML

• Cláusula AS, selección de columnas con alias: en muchas ocasiones es necesario enviar información de las tablas, sin embargo, los nombres de los campos pueden ser incomprensibles para muchos usuarios que no están relacionados con el diseño de la DB. Para solucionar eso se pueden crear alias y generar la información en forma de reporte.

Ejemplo:USE AdventureWorks2012;SELECT DepartmentID, Name AS [Department Name], GroupName AS [Department Group Name] FROM HumanResources.Department

• En este caso las columnas que consideramos con nombres menos comprensibles fueron asignadas con un alias. Es posible poner espacios en blanco en los alias siempre y cuando el alias completo esté delimitado entre corchetes [ ].

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 26: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula ORDER BY: Esta cláusula ordena los resultados de una consulta en base a uno o más campos de la tabla. Adicionalmente puede utilizarse ASC/DESC para mejorar el ordenamiento.

Ejemplo:USE AdventureWorks2012;SELECT DepartmentID, Name AS [Department Name], GroupName AS [Department Group Name] FROM HumanResources.Department ORDER BY Name ASC

• En este caso estamos ordenando por la columna Name, en caso de no ser especificado ASC/DESC se toma como default ASC.

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 27: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula GROUP BY: Sirve para agrupar un conjunto de registros en un nuevo conjunto resumido. Se devuelve una fila para cada grupo.

Ejemplo:USE AdventureWorks2012;SELECT FirstName, LastName, count(*) FROM person.person GROUP BY FirstName, LastName ORDER BY FirstName

• En este caso se esta recuperando el conjunto de nombres de empleados, pero sin repetir nombres, y se agrega un contador para saber cuantos registros cumplen con el mismo nombre y apellido.

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 28: Taller de Base de Datos - Unidad 3 lenguage DML

Visualización de Datos de Varias Tablas• Hasta ahora hemos realzado consultas utilizando una sola tabla, sin

embargo, en la práctica es común que se deba extraer información de varias tablas y presentarla en un solo conjunto de registros. Para esto SQL Server proporciona la cláusula JOIN. Existen varios tipos de JOINs, en esta unidad veremos los 3 más comunes, que son:

•INNER JOIN•LEFT OUTER JOIN•RIGHT OUTER JOIN

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 29: Taller de Base de Datos - Unidad 3 lenguage DML

• INNER JOIN: De los tres tipos de JOINs que mencionamos, este es el más utilizado, regresa todo lo que es común entre las tablas que deseamos comparar, es decir, regresa la intersección de las tablas como lo muestra la siguiente figura:

• En esta figura se muestran las tablas Product y Sales, la intersección entre ambas sería por ende los productos que se han vendido en un momento dado.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 30: Taller de Base de Datos - Unidad 3 lenguage DML

• Sintaxis del INNER JOIN: Es posible extraer columnas de ambas tablas que estamos comparando, por lo que el cuerpo del SELECT no tiene cambios en su estructura, sino al final del mismo al incluir la cláusula INNER JOIN y el operador ON el cual sirve para indicar cuáles campos hacen la intersección entre ambas tablas:USE AdventureWorks2012;SELECT p.FirstName, p.LastName, ea.EmailAddress FROM Person.Person AS p INNER JOIN Person.EmailAddress AS ea ON p.BusinessEntityID = ea.BusinessEntityID

• En este caso se están utilizando alias para las tablas que estamos comparando.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 31: Taller de Base de Datos - Unidad 3 lenguage DML

• Ejemplo: seleccione el nombre del producto, el id del producto y la venta total por línea (tablas Production.Product y sales.SalesOrderDetail.ProductID)

USE AdventureWorks2012;SELECT Production.Product.ProductID, name, linetotalfrom Production.Productinner join sales.SalesOrderDetailon Production.Product.ProductID=sales.SalesOrderDetail.ProductIDorder by Production.Product.ProductID

TALLER DE BASE DE DATOS

Page 32: Taller de Base de Datos - Unidad 3 lenguage DML

• LEFT OUTR JOIN: Es el primero de los dos tipos de OUTER JOINs que existen, existe una diferencia importante en el orden de las tablas al ser colocadas en el query ya que como su nombre lo dice, este JOIN obtiene todo lo que se encuentra a la izquierda incluyendo la intersección de ambas tablas:

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 33: Taller de Base de Datos - Unidad 3 lenguage DML

• Ejemplo de LEFT OUTER JOINUSE AdventureWorks2012;SELECT p.ProductID, p.Name AS ProductName, sd.OrderQty, sd.UnitPrice FROM Production.Product AS p LEFT JOIN Sales.SalesOrderDetail AS sd ON p.ProductID = sd.ProductID

• En este caso la tabla Production.Product se encuentra a la izquierda, por lo que el LEFT OUTER JOIN tomará dicha tabla y la intersección de ambas como resultado.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 34: Taller de Base de Datos - Unidad 3 lenguage DML

• RIGHT OUTR JOIN: Es el segundo de los dos tipos de OUTER JOINs que existen, al igual que en LEFT existe una diferencia importante en el orden de las tablas al ser colocadas en el query ya que como su nombre lo dice, este JOIN obtiene todo lo que se encuentra a la derecha incluyendo la intersección de ambas tablas:

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 35: Taller de Base de Datos - Unidad 3 lenguage DML

• Ejemplo de RIGHT OUTER JOINUSE AdventureWorks2012;SELECT p.ProductID, p.Name AS ProductName, sd.OrderQty, sd.UnitPrice FROM Production.Product AS p RIGHT JOIN Sales.SalesOrderDetail AS sd ON p.ProductID = sd.ProductID

• En este caso la tabla Sales.SalesOrderDetail se encuentra a la derecha, por lo que el RIGHT OUTER JOIN tomará dicha tabla y la intersección de ambas como resultado.

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 36: Taller de Base de Datos - Unidad 3 lenguage DML

• Cláusula UNION: Combina los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión. La operación UNION es distinta de la utilización de combinaciones de columnas de dos tablas.• El número y el orden de las columnas debe ser el mismo en todas las consultas. • Los tipos de datos deben ser compatibles.

Ejemplo:USE AdventureWorks2012;SELECT Name AS ProductName, Color FROM Production.Product WHERE Color = 'Black’UNION SELECT Name AS ProductName, Color FROM Production.Product WHERE Color = 'Silver’;

TALLER DE BASE DE DATOS

LeBlanc, 2013

https://msdn.microsoft.com. 2015

Page 37: Taller de Base de Datos - Unidad 3 lenguage DML

• Uso de la cláusula DISTINCT: Devuelve un conjunto de valores que son distintos entre sí en cada columna especificada en el query.

Ejemplo:USE AdventureWorks2012;SELECT DISTINCT p.Name AS ProductName FROM Production.Product AS p INNER JOIN Sales.SalesOrderDetail sd ON p.ProductID = sd.ProductID

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 38: Taller de Base de Datos - Unidad 3 lenguage DML

Subconsultas en SQL Server• Una subconsulta es una consulta anidada en una instrucción SELECT, INSERT,

UPDATE o DELETE, o bien en otra subconsulta. Las subconsultas se pueden utilizar en cualquier parte en la que se permita una expresión. • La consulta SELECT de una subconsulta se presenta siempre entre paréntesis.• Una subconsulta puede anidarse en la cláusula WHERE o HAVING de una

instrucción externa SELECT, INSERT, UPDATE o DELETE, o bien en otra subconsulta. Se puede disponer de hasta 32 niveles de anidamiento.• Las instrucciones que incluyen una subconsulta normalmente tienen uno de

estos formatos:WHERE expression [NOT] IN (subquery)WHERE expression comparison_operator [ANY | ALL] (subquery)WHERE [NOT] EXISTS (subquery)

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 39: Taller de Base de Datos - Unidad 3 lenguage DML

Ejemplo de una subconsulta:

use AdventureWorks2012;SELECT ProductID, Name, Color FROM Production.Product WHERE ProductID IN ( SELECT ProductID FROM Sales.SalesOrderDetail WHERE ModifiedDate>'07/01/2005' and ModifiedDate<'07/25/2005');

TALLER DE BASE DE DATOS

LeBlanc, 2013

Page 40: Taller de Base de Datos - Unidad 3 lenguage DML

Operaciones SET en SQL Server

• El lenguaje de programación T-SQL ofrece varias instrucciones SET que cambian el tratamiento de información específica por parte de la sesión actual. • Las instrucciones SET se agrupan en

categorías, algunas de ellas figuran en la siguiente tabla. El resto de las operaciones SET puedes encontrarlo en el url: https://msdn.microsoft.com/es-es/library/ms190356(v=sql.120).aspx

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 41: Taller de Base de Datos - Unidad 3 lenguage DML

Ejemplo del uso de SET:SET DATEFORMAT dmy;GODECLARE @datevar datetime2 = '31/12/2008 09:01:01.1234567'; SELECT @datevar; GO-- Resultado: 2008-12-31 09:01:01.123SET DATEFORMAT dmy;GO DECLARE @datevar datetime2 = '12/31/2008 09:01:01.1234567'; SELECT @datevar;GO-- Resultado: Msg 241: Conversion failed when converting date and/or time -- from character string.

TALLER DE BASE DE DATOS

https://msdn.microsoft.com. 2015

Page 42: Taller de Base de Datos - Unidad 3 lenguage DML

Bibliografía Consultada

Patrick LeBlanc, Microsoft SQL Server 2012 Step by Step. O’Reilly Media Inc. Sebastopol, CA, USA. 2013. (Traducción realizada por José A. Sandoval Acosta).

Pratt Philip J., Last Mary Z. SQL, 1ra. Edición. Anaya Multimedia. Madrid, España. 2009.

Adam Jorgersen, Microsoft SQL Server 2012 Bible. John Wiley & Sons, Inc. Indianapolis, Indiana. 2012.

https://msdn.microsoft.com. Página en español. Consultado en agosto de 2015.

TALLER DE BASE DE DATOS