Está en la página 1de 15

Capítulo 1: Técnicas avanzadas de consulta

Capítulo 2: Procedimientos almacenados

Capítulo 3: Gestión de los índices – nivel básico

Técnicas avanzadas de consulta

1
Transact-SQL - SQL Server 2016

1-1 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Objetivos

Al finalizar el capítulo, el alumno logrará:

• Identificar cómo opera SQL Server una SELECT.


• Identificar diferentes técnicas de escritura de consultas
avanzadas.
• Usar vistas y funciones de metadatos para administrar la
base de datos.

1-2 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 1


Agenda

• Uso avanzado de SELECT


• Uso de sub-consultas
• Expresiones de tabla
• Operadores de conjuntos
• Funciones de ventana
• Uso de los metadatos de SQL Server

1-3 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Uso avanzado de SELECT

• La sentencia SELECT se basa en la teoría de conjuntos


• La teoría de conjuntos es la base matemática para el modelo
relacional de base de datos
• Un conjunto es una colección de distintos objetos considerados
como un todo:
Ejemplo: Todos los clientes que son personas jurídicas

• Los elementos de un conjunto son llamados miembros. En la


implementación física de la base de datos son llamados registros.
• Los elementos de un miembro son llamados atributos. En la
implementación de la base de datos son llamados campos.
• Los elementos deben ser únicos. En la implementación de la base
de datos se crean llaves primarias.

1-4 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 2


Uso avanzado de SELECT

• La teoría de conjuntos define las mejores prácticas del uso


de Transact SQL:

Teoría de conjunto Aplicado a la sentencia SELECT

Actuar sobre los elementos del


Consultar toda la tabla en un solo paso
conjunto como un todo
Usar procesamiento declarativo
Indicarle a SQL Server que es lo que se desea
basado en procesamiento de
obtener
conjuntos
Evitar procesamiento basado en No indicar al motor cómo se desea obtener. No
cursores procesar miembros individualmente
Elementos de un conjunto deben ser
Definir llaves únicas en una tabla
únicos
Los registros pueden mostrarse en cualquier orden,
El resultado no debe tener un orden
de lo contrario se requerirán instrucciones de
definido
ordenamiento que son costosas

1-5 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Uso avanzado de SELECT

• Ejemplos de consultas declarativas que le indica a SQL Server lo


que se desea obtener (no es necesario decirle cómo, ya que de
eso se encarga el Query Optimizer):
Los empleados de la empresa SELECT * FROM dbo.Empleados
Los clientes de la empresa SELECT * FROM dbo.Clientes

Los nombres de los clientes de la empresa SELECT RazonSocial FROM dbo.Clientes


que son personas jurídicas WHERE TipoPersona = 'J'

SELECT * FROM dbo.Facturas


Las facturas emitidas entre los años 2015 y
WHERE YEAR(FechaEmision)
2016
BETWEEN 2015 AND 2016
SELECT NombreCliente, ApellidoCliente
FROM dbo.Clientes c
Los nombres de los clientes de tipo persona INNER JOIN dbo.OrdenCompra oc
natural que han puesto órdenes en octubre ON c.ClienteID=OrdenCompraID
de 2016 WHERE YEAR(FechaOrden)=2016
AND MONTH(FechaOrden)=10
AND c.TipoPerson = 'N'

1-6 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 3


Uso avanzado de SELECT

• Otro concepto del modelo relacional es la lógica de predicado.


• Un predicado es una propiedad o expresión que es verdadera o
falsa. También es conocida como expresión Booleana.
• En SQL Server un predicado puede ser verdadero, falso o
desconocido (NULL) y se usa en:
− Filtro de datos en las consultas SELECT, clausulas WHERE y
HAVING:
 WHERE TipoPersona = 'J'
− Expresiones CASE:
 CASE WHEN FechaOrden < '20100101' THEN 'Orden Antigua' END
− Unión de tablas, Filtro ON:
 ON c.ClienteID=OrdenCompraID
− Flujo de control, IF y WHILE:
 IF @FlagMensaje = 1 PRINT 'Proceso Completado'

1-7 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Uso avanzado de SELECT

• Elementos de la sentencia SELECT:

Elemento Componente Descripción


Define las columnas que se desean listar en
SELECT Lista de selección
la consulta
Define los conjuntos de datos que se van a
FROM Fuentes de datos usar en la consulta. Pueden ser tablas, vistas
o funciones de valor de tabla
Condición de
WHERE Filtro de filas usando un predicado
búsqueda
Columnas que van a agregarse para crear
GROUP BY Lista de agrupación
los grupos
Condición de
HAVING Filtro de filas agrupadas usando un predicado
búsqueda
Lista de Columnas de ordenamiento del conjunto
ORDER BY
ordenamiento resultante

1-8 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 4


Uso avanzado de SELECT

• El orden en el que la sentencia es escrita no es el orden en


el que SQL Server la ejecuta:

Orden Elemento Componente


5 SELECT Lista de selección
1 FROM Fuentes de datos
2 WHERE Condición de búsqueda
3 GROUP BY Lista de agrupación
4 HAVING Condición de búsqueda
6 ORDER BY Lista de ordenamiento

1-9 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Uso de sub-consultas

• Las sub-consultas son consultas anidadas: una consulta externa


que tiene dentro consultas internas.
• Primero se ejecutan las consultas internas cuyo resultado es
pasado a la consulta externa.
Externo
SELECT SalesOrderID, ProductID, UnitPrice, OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID = Interno
(SELECT MAX(SalesOrderID) AS UltimaOrden
FROM Sales.SalesOrderHeader);

• Las sub-consultas pueden ser:


− Auto-contenidas
− Correlacionadas
• El resultado puede ser escalar, multi-valor o valor de tabla.
1 - 10 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 5


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:

--Obtiene la orden de compra más reciente por cada cliente


SELECT CustomerID, SalesOrderID, OrderDate
FROM Sales.SalesOrderHeader AS oExt
WHERE OrderDate = (SELECT MAX(OrderDate) Correlación
FROM Sales.SalesOrderHeader AS oInt
WHERE oInt.CustomerID = oExt.CustomerID);

1 - 11 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

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

1 - 12 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 6


Expresiones de tabla

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.

CREATE VIEW HumanResources.vEmpleados


AS
SELECT p.FirstName + ' ' + p.LastName AS Nombre, JobTitle AS Cargo
FROM HumanResources.Employee e
JOIN Person.Person p
ON e.BusinessEntityID=p.BusinessEntityID;

1 - 13 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Expresiones de tabla

Expresiones comunes de Tabla (CTE):


• Las CTE Son expresiones de tabla nombrada definidas por una consulta.
• Existen temporalmente, solo en tiempo de ejecución y no se almacenan
en la base de datos.
• Para crear un CTE:
− Definir la expresión de tabla en una clausula WITH
− Definir nombre de columnas para todos los campos
− Referenciar la CTE en una consulta externa

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;

1 - 14 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 7


Operadores de conjuntos

UNION y UNION ALL


• UNION devuelve las filas distintas de unir dos conjuntos de datos con las
mismas columnas.
• Las columnas duplicadas son filtradas lo cual sobrecarga el proceso de
unión.
• UNION ALL opera igual pero no filtra las columnas duplicadas
disminuyendo la sobrecarga en la consulta.
--Todos los clientes que compraron en enero y febrero, sin repetir código
SELECT CustomerID FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '20040201' AND '20040228'
UNION ALL
SELECT CustomerID FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '20040101' AND '20040131'

1 - 15 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

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'

1 - 16 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 8


Funciones de ventana

• Las funciones de ventana forman parte del enfoque de conjunto de


Transact-SQL.
• Permite operar el conjunto de datos de manera interna e independiente y
aplicar funciones para cálculos.
• Ese conjunto puede ser agregado, segmentado y ordenado de manera
independiente al resultado final.
• Las funciones de ventana simplifican los cálculos cuando se requieren
obtener acumulados, promedios móviles, diferencias, etc. En los datos:

SELECT ProductCategory, OrderQty, YEAR(SalesOrder),


SUM(OrderQty) OVER (
PARTITION BY category
ORDER BY orderyear
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) AS RunningQty
FROM Sales.SalesOrderDetail;

1 - 17 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Funciones de ventana

• Las funciones de ventana se basan en la cláusula OVER.


• OVER define la ventana, o conjunto de datos a ser usado por la
función de ventana, incluyendo particiones y ordenamiento.
• La partición define cómo se van a agrupar los datos y el
ordenamiento define el inicio y fin de los datos a procesar.
• Se pueden utilizar varios OVER en una sola consulta.

SELECT h.CustomerID, MONTH(h.OrderDate) AS OrderMonth,


d.OrderQty,
SUM(d.OrderQty) OVER(PARTITION BY h.CustomerID)
FROM Sales.SalesOrderheader h
INNER JOIN Sales.SalesOrderDetail d
ON h.SalesOrderID=d.SalesOrderID
WHERE YEAR(h.Orderdate)=2004

1 - 18 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 9


Uso de los metadatos de SQL Server

• SQL Server provee un conjunto de objetos de metadatos del


sistema para administración y solución de problemas.
− Vistas de metadatos
 Se consultan como cualquier tabla
 Proveen información de los catálogos del sistema
 Se consultan utilizando el esquema del sistema SYS

SELECT name, object_id, schema_id, type, type_desc


FROM sys.tables;

SELECT name, object_id, schema_id, type, type_desc


FROM sys.procedures;

1 - 19 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Uso de los metadatos de SQL Server

− Funciones de metadatos
 Retornan diferentes tipos de información del sistema como
configuraciones, valores, códigos y nombres de objetos de SQL
Server.

SELECT @@VERSION AS Version_SQL;


SELECT SERVERPROPERTY('ProductVersion') AS NúmeroVersión;
SELECT SERVERPROPERTY('Collation') AS Colation;
SELECT SCHEMA_NAME(1) AS Esquema
SELECT DB_ID('AdventureWorks2008') AS IdBaseDatos

1 - 20 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 10


Uso de los metadatos de SQL Server

− Procedimientos almacenados del sistema


 Listan información sobre los componentes del servidor y de las
bases de datos.
 Se ejecutan con el comando EXECUTE o EXEC y haciendo
referencia al esquema sys.
 Algunos reciben parámetros para obtener información más
específica.

EXEC sys.sp_helpfile;
EXEC sys.sp_databases;
EXEC sys.sp_help 'Sales.Customer';
EXEC sys.sp_tables
@table_name = '%',
@table_owner = 'Sales';

1 - 21 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Uso de los metadatos de SQL Server

− Procedimientos almacenados del sistema


 Listan información sobre los componentes del servidor y de las
bases de datos.
 Se ejecutan con el comando EXECUTE o EXEC y haciendo
referencia al esquema sys.
 Algunos reciben parámetros para obtener información más
específica.

EXEC sys.sp_helpfile;
EXEC sys.sp_databases;
EXEC sys.sp_help 'Sales.Customer';
EXEC sys.sp_tables
@table_name = '%',
@table_owner = 'Sales';

1 - 22 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 11


Uso de los metadatos de SQL Server

− 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

SELECT session_id, login_time, program_name SELECT physical_memory_in_use_kb,


FROM sys.dm_exec_sessions memory_utilization_percentage
WHERE is_user_process = 1; FROM sys.dm_os_process_memory;

1 - 23 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Ejercicio Nº 1.1: Escribir sentencias de consultas


con sub-consultas
Aplicar los conceptos básicos en las técnicas avanzadas de
consulta.

Al finalizar el laboratorio, el alumno logrará:

• Escriba una consulta con funciones de ventana que calcule


las ventas acumuladas por categoría de productos de un
año en particular

1 - 24 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 12


Ejercicio Nº 1.2: Aplicar técnicas avanzadas de
consultas
Aplicar los conceptos básicos en las técnicas avanzadas de
consulta.

Al finalizar el laboratorio, el alumno logrará:

• Aplicar técnicas avanzadas para el desarrollo de consultas

1 - 25 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Ejercicio Nº 1.3: Aplicar técnicas avanzadas de


consultas
Aplicar los conceptos básicos en las técnicas avanzadas de
consulta.

Al finalizar el laboratorio, el alumno logrará:

• Utilizar vistas de metadatos para administrar las bases de


datos

1 - 26 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 13


Lecturas adicionales

Para obtener información adicional, puede consultar:

• 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

1 - 27 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Resumen

En este capítulo, usted aprendió:

• A identificar cómo opera SQL Server una SELECT.


• A utilizar diferentes técnicas de escritura de consultas
avanzadas.
• A usar vistas y funciones de metadatos para administrar la
base de datos.

1 - 28 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 14


Tarea Nº 1: Comprender mejor los tipos de datos
de SQL Server 2016
Al finalizar la tarea, el alumno logrará:

• Profundizar sobre los tipos de datos de SQL Server.


• Conocer la diferencia entre tipos de datos UNICODE y NO
UNICODE.
• Conocer el operador de conjuntos CROSS APPLY.

1 - 29 Copyright © Todos los Derechos Reservados - Cibertec Perú SAC.

Cibertec Perú S.A.C - Transact-SQL - SQL Server 2016 15

También podría gustarte