Está en la página 1de 13

10774A: Consultando Microsoft SQL Server 2012 11-1

Laboratorio: Uso de expresiones de tabla

Escenario de laboratorio
Usted es un analista de negocios de Adventure Works que redactará informes utilizando
bases de datos almacenadas en SQL Server 2012. Se le ha proporcionado un conjunto
de requisitos comerciales para los datos y escribirá consultas T-SQL para recuperar los
datos especificados de las bases de datos. Debido a las solicitudes comerciales
avanzadas, tendrá que aprender a crear y consultar diferentes expresiones de consulta
que representen unatabla relacional.

Importante Al comparar sus resultados con la muestra proporcionada salidas, el


orden de las columnas y el número total de filas afectadas siempre deben
coincidir. Sin embargo, recuerde que el orden de las filas en la salida de una
consulta sin una cláusula ORDER BY no está garantizado. Por lo tanto, el orden de
las filas en las salidas de muestra puede ser diferente al suyo. Además, las salidas
de respuesta incluyenresultados abreviados.
Ejercicio 1: escribir consultas que utilizan vistas

Guión
En los últimos 10 módulos, tuvo que preparar una gran cantidad de declaraciones T-SQL
diferentes para admitir diferentes requisitos comerciales. Debido a que algunos de ellos
utilizaron una estructura de tabla y columna similar, le gustaría que fueran reutilizables.
Aprenderá a utilizar una de las dos expresiones de tabla persistentes: una vista.

Las principales tareas de este ejercicio son las siguientes:


1. Escriba una instrucción SELECT y use el código T-SQL proporcionado para crear una
vista.
2. Escriba una declaración SELECT contra la vista.
3. Modifique la vista y obtenga información sobre algunos de los requisitos previos
necesarios para crear una vista.

 Tarea 1: escribir una declaración SELECT para recuperar todos los productos de
una categoría específica
 Abra el archivo de proyecto F: \ 10774A_Labs \ 10774A_11_PRJ \
10774A_11_PRJ.ssmssln y el script T-SQL 51 - Ejercicio de laboratorio 1.sql. Asegúrese
de estar conectado a la base de datos TSQL2012.
 Escriba una declaración SELECT para devolver el identificador del producto, el nombre
del producto, el identificador del proveedor, el precio unitario y las columnas
discontinuadas de la tabla Production.Products. Filtre los resultados para incluir solo
los productos que pertenecen a la categoría Bebidas (el ID de categoría es igual a 1).

 Observe y compare los resultados que obtuvo con los resultados deseados
que se muestran en el archivo. 52 - Ejercicio de laboratorio 1 - Tarea 1
Result.txt.
 Modifique el código T-SQL para incluir la siguiente instrucción T-SQL proporcionada.

CREATE VIEW Production.ProductsBeverages AS

Pon esta declaración antesla cláusula SELECT:


 Ejecute la instrucción T-SQL completa. Esto creará una vista de objeto llamada
ProductosBebidasbajo el esquema de producción.

 Tarea 2: escribir una instrucción SELECT contra la vista creada


 Escriba una declaración SELECT para devolver las columnas productid y
productname de la vista Production.ProductsBeverages. Filtrar los resultados
para incluir solo productos en los que el ID de proveedores igual a 1.
 Ejecute la declaración escrita y compare los resultados que obtuvo con los resultados
deseados que se muestran en el archivo 53 - Ejercicio de laboratorio 1 - Tarea 2
Result.txt.

 Tarea 3: intente utilizar una cláusula ORDER BY en la vista creada


 El departamento de TI ha escrito una declaración T-SQL que agrega una cláusula

ALTER VIEW Production.ProductsBeverages AS SELECT


productid, productname, supplierid, unitprice, discontinued FROM Production.Products
WHERE categoryid = 1 ORDER BY productname;

ORDER BY a la vista creada en la tarea 1:


 Ejecute el código proporcionado. ¿Qué sucedió? ¿Cuál es el mensaje de error? ¿Por qué
falló la consulta?
 Modifique la instrucción T-SQL proporcionada incluyendo la opción TOP (100)
PERCENT. La consulta debese parece a esto:
ALTER VIEW Production.ProductsBeverages AS SELECT TOP(100) PERCENT
productid, productname, supplierid, unitprice, discontinued FROM Production.Products
WHERE categoryid = 1 ORDER BY productname;

 Ejecute la instrucción T-SQL modificada. Al aplicar los cambios necesarios, ha


modificado la vista existente. Observe que todavía está utilizando la cláusula
ORDER BY.
 Si escribe una consulta en la vista Production.ProductsBeverages modificada, ¿se
garantizará que las filas recuperadas se clasificarán por nombre de producto? Por
favor explique.

 Tarea 4: agregar una columna calculada a la vista


 El departamento de TI ha escrito una declaración T-SQL que agrega una columna

ALTER VIEW Production.ProductsBeverages AS SELECT


productid, productname, supplierid, unitprice, discontinued, CASE WHEN unitprice > 100. THEN N'high' ELSE N'normal' END
FROM Production.Products WHERE categoryid = 1;

calculada adicional al vista creada en la tarea 1:


 Ejecute la consulta proporcionada. ¿Qué sucedió? ¿Cuál es el mensaje de error? ¿Por qué
falló la consulta?
 Aplique los cambios necesarios para que la instrucción T-SQL se ejecute correctamente.

 Tarea 5: Eliminar la vista Production.ProductsBeverages


 Elimine la vista creada ejecutando la instrucción T-SQL proporcionada:
IF OBJECT_ID(N'Production.ProductsBeverages', N'V') IS NOT NULL DROP VIEW Production.ProductsBeverages;

 Ejecute este código exactamente como está escrito dentro de una ventana de consulta.
Resultados: Después de este ejercicio, debería saber cómo utilizar una vista en sentencias T-SQL.
Ejercicio 2: redacción de consultas que utilizan tablas derivadas

Guión
El departamento de ventas desea comparar los montos de ventas entre el año solicitado y
el año anterior para calcular el porcentaje de crecimiento. Para preparar un informe de
este tipo, aprenderá a utilizartablas derivadas dentro de declaraciones T-SQL.

Las principales tareas de este ejercicio son las siguientes:


1. Escriba una instrucción SELECT contra una tabla derivada.
2. Escriba una declaración SELECT para calcular el monto total de ventas y el monto
promedio de ventas para cada cliente.

3. Escriba una declaración SELECT para recuperar el porcentaje de crecimiento de las


ventas.

 Tarea 1: escribir una instrucción SELECT en una tabla derivada


 Abra el archivo de proyecto F: \ 10774A_Labs \ 10774A_11_PRJ \
10774A_11_PRJ.ssmssln y el script T-SQL 61 - Ejercicio de laboratorio 2.sql. Asegúrese
de estar conectado a la base de datos TSQL2012.

 Escriba una instrucción SELECT en una tabla derivada y recupere las columnas
productid y productname. Filtre los resultados para incluir solo las filas en las que el
valor de la columna de tipo de precio sea igual a alto. Utilice la instrucción SELECT
del ejercicio 1, tarea 4, como la consulta interna que define la tabla derivada. No
olvide utilizar un alias para la tabla derivada. (Puede utilizar el alias p.)
 Ejecute la declaración escrita y compare los resultados que obtuvo con los resultados
deseados que se muestran en el archivo 62 - Ejercicio de laboratorio 2 - Tarea 1
Result.txt.

 Tarea 2: Escriba una declaración SELECT para calcular el monto total y promedio
de las ventas
 Escriba una declaración SELECT para recuperar la columna custid y dos columnas
calculadas: totalsalesamount, que devuelve el monto total de ventas por cliente, y
avgsalesamount, que devuelve el monto promedio de ventas de pedidos por cliente.
Para calcular correctamente el monto promedio de ventas de pedidos por cliente,
primero deberá calcular el monto total de ventas por pedido. Puede hacerlo
definiendo una tabla derivada basada en una consulta que se una a las tablas
Sales.Orders y Sales.OrderDetails. Puede utilizar las columnas custid y orderid de la
tabla Sales.Orders y las columnas qty y unitprice de la tabla Sales.OrderDetails.
 Ejecute la declaración escrita y compare los resultados que obtuvo con los
resultados recomendados que se muestran en el archivo 63 - Ejercicio de laboratorio
2 - Tarea 2 Result.txt.
 Tarea 3 (desafío): escriba una declaración SELECT para recuperar el porcentaje de
crecimiento de las ventas
 Escriba una instrucción SELECT para recuperar las siguientes columnas:
 orderyear, que representa el año de la fecha del pedido
 curtotalsales, que representa el total importe de ventas para el año de pedido actual
 prevtotalsales, que representa el monto total de ventas del año de pedido anterior
 porcentaje de crecimiento, que representa el porcentaje de crecimiento de las
ventas en el año de pedido actual en comparación al año de pedido anterior
 Tendrá que escribir una declaración T-SQL utilizando dos tablas derivadas. Para
obtener el año del pedido y las columnas de ventas totales para cada declaración
SELECT, puede consultar una vista ya existente llamada Sales.OrderValues. La
columna val representa el monto de las ventas.

 No olvide que el año de pedido 2006 no tiene un año de pedido anterior en la base
de datos, pero sí aún debe ser recuperado por la consulta.
 Ejecute el código T-SQL y compare los resultados que obtuvo con los resultados

Resultados: Después de este ejercicio, debería poder utilizar tablas derivadas en sentencias T-SQL.

recomendados que se muestran en el archivo 64 - Ejercicio de laboratorio 2 -


Tarea 3 Result.txt.
Ejercicio 3: redacción de consultas que utilizan expresiones de tabla comunes (CTE)

Guión
El departamento de ventas necesita un informe adicional que muestre el crecimiento
de las ventas a lo largo de los años para cada cliente. Puede usar su conocimiento
existente de tablas y vistas derivadas, pero en su lugar, practicará cómo usar una
expresión de tabla común (CTE).

Las principales tareas de este ejercicio son las siguientes:


1. Escribe el mismo SELECT declaración como en el ejercicio 2 pero usando un CTE.
2. Escriba una declaración SELECT para recuperar el monto de las ventas de cada cliente.
3. Escriba una declaración T-SQL avanzada para recuperar el crecimiento anual
de ventas para el año 2008 para cada cliente.

 Tarea 1: escribir una instrucción SELECT que use un CTE


 Abra el archivo de proyecto F: \ 10774A_Labs \ 10774A_11_PRJ \
10774A_11_PRJ.ssmssln y el script T-SQL 71 - Ejercicio de laboratorio 3.sql. Asegúrese
de estar conectado a la base de datos TSQL2012.
 Escriba una declaración SELECT como la del ejercicio 2, tarea 1, pero use un CTE en
lugar de una tabla derivada. Utilice el alias de columna en línea en la consulta de CTE
y asigne un nombre a las bebidas de productos de CTE.
 Ejecute el código T-SQL y compare los resultados que obtuvo con los resultados
recomendados que se muestran en el archivo 72 - Ejercicio de laboratorio 3 -
Tarea 1 Result.txt.

 Tarea 2: Escriba una declaración SELECT para recuperar el monto total de


ventas de cada cliente
 Escriba una declaración SELECT contra Sales.OrderValues para recuperar el ID de cada
cliente y el monto total de ventas para el año 2008. Defina un CTE llamado c2008
basado en esta consulta usando el formulario de alias externo para nombrar las
columnas CTE custid y salesamt2008. Únase a la tabla Sales.Customers y al CTE
c2008, devolviendo las columnas custid y contactname de la tabla Sales.Customers y
lacolumna salesamt2008 del c2008 CTE.
 Ejecute el código T-SQL y compare los resultados que obtuvo con los resultados
recomendados que se muestran en el archivo 73 - Ejercicio de laboratorio 3 -
Tarea 2 Result.txt.
 Tarea 3 (desafío): Escribe un SELECT declaración para comparar el monto total
de ventas para cada cliente durante el año anterior
 Escriba una instrucción SELECT para recuperar las columnas custid y contactname de
la tabla Sales.Customers. También recupere las siguientes columnas calculadas:

 salesamt2008, que representa el monto total de ventas para el año 2008


 salesamt2007, que representa el monto total de ventas para el año 2007
 porcentaje de crecimiento, que representa el porcentaje de crecimiento de las ventas
entre el año 2007 y 2008
 Si el porcentaje de crecimiento es NULO, muestre el valor 0.
 Puede usar el CTE de la tarea anterior y agregar otro CTE para el año 2007. Luego,
únalos a ambos con la tabla Sales.Customers. Ordene el resultado por la columna de
porcentaje de crecimiento.
 Ejecute el código T-SQL y compare los resultados que obtuvo con los resultados

Resultados: Después de este ejercicio, debe comprender cómo utilizar un CTE en una instrucción T-SQL.

recomendados que se muestran en el archivo 74 - Ejercicio de laboratorio 3 -


Tarea 3 Result.txt.
Ejercicio 4: escribir consultas que utilizan funciones con valores de tabla en línea

Guión
Aprendiste a escribir una sentencia SELECT contra una vista. Pero dado que
una vista no admite parámetros, ahora usará una función con valores de
tabla en línea para recuperar datos como una tabla relacional basada en un
parámetro de entrada.

Las principales tareas de este ejercicio son las siguientes:


1. Escriba una declaración SELECT que use un parámetro para el año del
pedido y recupere todos los clientes y el valor total de ventas para el año
especificado.

2. Escriba una instrucción SELECT contra la función con valores de tabla en


línea creada.
3. Escriba una declaración SELECT para recuperar los tres productos
principales por monto de ventas para un cliente específico y cree una
función en línea con valores de tabla.

 Tarea 1: Escriba una declaración SELECT para recuperar el monto total de


ventas de cada cliente
 Abra el archivo de proyecto F: \ 10774A_Labs \ 10774A_11_PRJ \
10774A_11_PRJ.ssmssln y el script T-SQL 81 - Ejercicio de laboratorio
4.sql. Asegúrese de estar conectado a la base de datos TSQL2012.
 Escriba una instrucción SELECT contra la vista Sales.OrderValues y
recupere las columnas custid y totalsalesamount como un total de la
columna val. Filtre los resultados para incluir pedidos solo para el año
2007.
 Ejecute la declaración escrita y compare los resultados que obtuvo con
los resultados recomendados que se muestran en el archivo 82 -
Ejercicio de laboratorio 4 - Resultado de la tarea 1.txt.
 Defina una función con valores de tabla en línea utilizando el

CREAR FUNCIÓN dbo.fnGetSalesByCustomer (@orderyear AS INT) TABLA DE DEVOLUCIONES


COMO REGRESO

siguiente encabezado de función y agregue su consulta anterior


después de la cláusula RETURN:
 Modifique la consulta reemplazando el valor de año constante 2007 en la
cláusula WHERE con el parámetro @orderyear.
 Resalte el código completo y ejecútelo. Esto creará una función en línea
con valores de tabla llamada dbo.fnGetSalesByCustomer.

 Tarea 2: escribir una instrucción SELECT contra la función con valores de tabla en
línea
 Escriba una instrucción SELECT para recuperar las columnas
custid y totalsalesamount de la función
dbo.fnGetSalesByCustomer en línea con valores de tabla. Utilice el
valor 2007 para el parámetro necesario.
 Ejecute la declaración escrita y compare los resultados que obtuvo con
los resultados recomendados que se muestran en el archivo 83 -
Ejercicio de laboratorio 4 - Tarea 2 Result.txt.
 Tarea 3: Escriba una declaración SELECT para recuperar los tres productos principales
en función del valor total de ventas de un cliente específico
 En esta tarea, consultará las tablas Production.Products y Sales.OrderDetails. Escriba
una declaración SELECT que recupere los tres productos más vendidos según el valor
total de ventas para el cliente con ID 1. Devuelva las columnas productid y productname
de la tabla Production.Products. Utilice las columnas qty y unitprice de la tabla
Sales.OrderDetails para calcular el valor de cada línea de pedido y devuelva la suma de
todos los valores por producto, nombrando la columna resultante totalsalesamount.
Filtre los resultados para incluir solo las filas donde el valor custid es igual a 1.
 Ejecute el código T-SQL y compare los resultados que obtuvo con los resultados
recomendados que se muestran en el archivo 84 - Ejercicio de laboratorio 4 - Tarea
3_1 Resultado.txt.
 Cree una función con valores de tabla en línea basada en el siguiente encabezado
de función, utilizando la instrucción SELECT anterior. Reemplace el valor custid
constante 1 en la consulta con la entrada de la funciónparámetro @custid:
CREATE FUNCTION dbo.fnGetSalesByCustomer (@orderyear AS INT) RETURNS TABLE
AS RETURN

 Resalte el código completo y ejecútelo. Esto creará una función en línea con valores
de tabla llamada dbo.fnGetTop3ProductsForCustomer que acepta un parámetro
para el ID de cliente.

 Pruebe la función con valores de tabla en línea creada escribiendo una instrucción
SELECT en ella y use el valor 1 para el parámetro de ID de cliente. Recupere las
columnas productid, productname y totalsalesamount, y use el alias p para la función
en línea con valores de tabla.

 Ejecute el código T-SQL y compare los resultados que obtuvo con los resultados
recomendados que se muestran en el archivo 85 - Ejercicio de laboratorio 4 - Tarea
3_2 Result.txt.

 Tarea 4 (desafío): Escriba una declaración SELECT para comparar el monto total de
ventas de cada cliente durante el año anterior utilizando funciones en línea con valores de
tabla
 Escriba una instrucción SELECT para recuperar el mismo resultado que en el ejercicio 3,
tarea 3, pero use la función en línea con valores de tabla creada en la tarea 2
(dbo.fnGetSalesByCustomer).
 Ejecute la declaración escrita y compare los resultados que obtuvo con los
resultados recomendados que se muestran en el archivo 86 - Ejercicio de laboratorio
4 - Tarea 4 Result.txt.

 Tarea 5: eliminar las funciones con valores de tabla en línea creadas


 Elimine las funciones con valores de tabla en línea creadas ejecutando la instrucción T-
IF OBJECT_ID('dbo.fnGetSalesByCustomer') IS NOT NULL DROP FUNCTION dbo.fnGetSalesByCustomer;

IF OBJECT_ID('dbo.fnGetTop3ProductsForCustomer') IS NOT NULL DROP FUNCTION dbo.fnGetTop3ProductsForCustomer;

SQL proporcionada:
 Ejecute este código exactamente como está escrito dentro de una ventana de consulta.
Resultados: Después de este ejercicio, debe saber cómo usar funciones con valores de tabla en línea en T-SQL declaraciones.

También podría gustarte