Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Transact-SQL - SQL Server 2016
Objetivos
Uso de sub-consultas
• Sub-consultas auto-contenidas
− La sub-consulta interna no tiene dependencia de la consulta
externa.
− Puede ser ejecutado independientemente.
• Sub-consultas correlacionadas
− La sub-consulta interna tiene dependencia de la consulta externa.
− No puede ser ejecutado independientemente.
− La sub-consulta interna se ejecuta una vez por cada línea de la
consulta externa:
Uso de sub-consultas
• Sub-consultas escalares
− La sub-consulta interna devuelve un único valor a la consulta
externa:
SELECT SalesOrderID, ProductID, UnitPrice, OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID = (SELECT MAX(SalesOrderID) AS
UltimaOrden
FROM Sales.SalesOrderHeader);
• Sub-consultas multi-valor
− La sub-consulta interna retorna una sola columna pero con múltiples
registros:
SELECT SalesOrderID, CustomerID, OrderDate
FROM Sales.SalesOrderHeader
WHERE CustomerID IN (SELECT CustomerID FROM
Sales.Customer
WHERE TerritoryID=1);
Vistas:
• Expresión de tabla definidas por una única consulta SELECT a una tabla
o tablas en una base de datos. Se almacenan en la base de datos.
• Una vez creada, las vistas se utilizan en una consulta SELECT igual que
una tabla.
• Su uso ayuda a simplificar el acceso a los datos, encapsulando consultas
complejas.
• Puede usarse como capa de seguridad, otorgando permisos de lectura a
las vistas y no a las tablas.
Expresiones de tabla
WITH CTE_year AS
(SELECT YEAR(Orderdate) AS OrderYear, CustomerID
FROM Sales.SalesOrderHeader)
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS cust_count
FROM CTE_year
GROUP BY OrderYear;
Operadores de conjuntos
EXCEPT e INTERSECT
• INTERSECT retorna las líneas distintas que son comunes a ambos conjuntos de
datos:
--clientes que compraron en febrero y también en enero
SELECT CustomerID FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '20040201' AND '20040228'
INTERSECT
SELECT CustomerID FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '20040101' AND '20040131'
• EXCEPT retorna solo las líneas distintas que aparecen en la tabla de la izquierda
pero que no están en la de la derecha:
--clientes que compraron el Febrero y no en enero
SELECT CustomerID FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '20040201' AND '20040228'
EXCEPT
SELECT CustomerID FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '20040101' AND '20040131'
Funciones de ventana
− Funciones de metadatos
Retornan diferentes tipos de información del sistema como
configuraciones, valores, códigos y nombres de objetos de SQL
Server.
EXEC sys.sp_helpfile;
EXEC sys.sp_databases;
EXEC sys.sp_help 'Sales.Customer';
EXEC sys.sp_tables
@table_name = '%',
@table_owner = 'Sales';
EXEC sys.sp_helpfile;
EXEC sys.sp_databases;
EXEC sys.sp_help 'Sales.Customer';
EXEC sys.sp_tables
@table_name = '%',
@table_owner = 'Sales';
− Vistas dinámicas
Dynamic management Views (DMV) son objetos que retornan el
estado actual de la operación del servidor
Se dividen en grupos según el tipo de información que
muestran:
Prefijo en el nombre Descripción
dm_db Información relacionada a las bases de datos
dm_exec Información relacionada a la ejecución de consultas
dm_io Estadísticas de Entrada y Salida
dm_os Información del sistema operativo
dm_tran Información relacionada a las transacciones
• https://blogs.msdn.microsoft.com/simonince/2007/10/17/hier
archies-with-common-table-expressions/
• https://msdn.microsoft.com/es-
pe/library/ms189461.aspx?f=255&MSPPError=-2147217396
• https://msdn.microsoft.com/es-
es/library/ms188754(v=sql.120).aspx
Resumen