Sei sulla pagina 1di 5

TALLER DE SUBCONSULTAS EN SQL – 1

Nombre Aprendiz: Jennifer Bolaños, Fecha 12/10/2010

Resuelva los puntos planteados en este taller, tomando como base el


documento Subconsultas.pdf. Al finalizar la sesión de clase remita el
documento, de acuerdo con las indicaciones del instructor. (3 horas)

SUBCONSULTAS COMO TABLA DERIVADA

Consulta para visualizar el codigo de la orden y el codigo del cliente

USE northwind
SELECT orderid, customerid
FROM orders
GO

LA SUBCONSULTA QUEDARIA

USE northwind
SELECT T.orderid, T.customerid
FROM ( SELECT orderid, customerid
FROM orders ) AS T
GO
1. De acuerdo con su analisis concluya cuál seria el objetivo de realizar
subconsultas como una tabla derivada y en que caso usted la
utilizaria, escriba un ejemplo para hacerlo.

R//
Utilizando la  subConsulta es una forma de acceder a lo que se solicta de
una manera   directamente y correcta ya que  en la  consulta normal no
siempre acceder  a ciertos  datos sera simple o correctos!

SUBCONSULTAS COMO EXPRESION

Se desea visualizar el nombre del producto, precio unitario, precio promedio de


todos los productos y la diferencia que hay entre el precio promedio y el precio del
producto, para los productos que pertenecen a la categoria 6.

Inicialmente podriamos construir la siguiente sintaxis

USE northwind
select ProductName, UnitPrice, avg (UnitPrice)as precioProm, unitprice- avg
(UnitPrice)as diferencia
from Products
where CategoryID = 6
group by ProductName, UnitPrice
GO

sin embargo, el planteamiento se resuelve de la siguiente manera:

USE northwind
select ProductName, UnitPrice, (select avg(UnitPrice) from Products) as
PrecioPromedio,
UnitPrice -(select AVG(UnitPrice)from Products) as diferencia
from products
where CategoryID = 6
GO
2. Describa con sus propias palabras cual es la diferencia entre las
consultas y por qué deberiamos involucrar una subconsulta para
obtener el resultado deseado.

En la  Subconsulta el resultado del precio promedio  es el correcto, y  la


diferencia entre el precio promedio y el precio unitario  del producto   es  el
exacto,  a diferencia de la consulta simple donde al requerir el precio
promedio  utilizando AVG es obligatorio utilizar   la cláusula Group By  por lo
tanto agrupa el campo que se le pide  por esto el valor  promedio  es el
mismo que el  valor unitario  es por esto que el precio promedio que arroja
es  el mismo que  al valor  unitario de esta manera  al pedir la  diferencia,
también es errónea.

Se debería involucrar una subconsulta  por que  con esta no es  necesario


utilizar la clausula Group By  entonces los resultados como por ejemplo de
promedio serán los correctos

SUBCONSULTAS PARA CORRELACIONAR


Se requiere una consulta que muestre el codigo de la orden y el codigo del cliente,
solo para aquellos cuyo producto comprado es el codigo 23 y la cantidad
comprada es mayor a 20.

USE northwind
SELECT od.orderid, customerid
FROM orders AS or1 inner join [order details] AS od on or1.OrderID=od.OrderID
where Quantity > 20 and od.ProductID = 23
GO

LA SUBCONSULTA QUEDARIA
USE northwind
SELECT orderid, customerid
FROM orders AS or1
WHERE 20 < (SELECT quantity FROM [order details] AS od
WHERE or1.orderid = od.orderid AND od.productid = 23)
GO

TAMBIEN FUNCIONARIA ASI:

USE northwind
SELECT orderid, customerid
FROM orders AS or1
WHERE (SELECT quantity FROM [order details] AS od
WHERE or1.orderid = od.orderid AND od.productid = 23)>20
GO

3. En la sub consulta hay una condicion redactada así:

WHERE or1.orderid = od.orderid

Interprétela y con sus propias palabras descrìbala.(¿qué se está haciendo y


cuál es la funcion que cumple dentro de la subconsulta?), redacte la sintaxis
lógica de este tipo de condision y verifique si en una consulta convencional
se puede utilizar de la misma manera.

R//
Esta dando la condicion  de  que el atributo  OrderId esta en la tabla de la
consulta  al igual que  en la  tabla de la  subconsulta  igualando el atributo
OrderId de la tabla de  la consulta con el de la tabla de la subconsulta  asi
cumpliendo la condicional anterior  

3. Implemente en alguna de las tres sentencias sql anteriores, la forma


de mostrar; ademas, el codigo del producto y la cantidad comprada;
explique su decisión.

USE northwind
SELECT od.orderid, customerid
FROM orders AS or1 inner join [order details] AS od on or1.OrderID=od.OrderID
where Quantity > 20 and od.ProductID = 23
GO

R//
Implemente la primera  ya que solo era  mas  facil hacer  una subconulta
mostrandol; sentenciandola en el select de la consulta normal

SUBCONSULTAS PARA SIMULAR UNA CONSULTA JOIN

Se requiere visualizar el código de los productos que se han vendido mas de 20


veces, solo si han cambiado de precio entre las ventas.

use Northwind
select distinct od.ProductID
from [Order Details] od
where od.ProductID in (select od.ProductID from [Order Details] ods
where od.UnitPrice <> ods.UnitPrice) group by od.ProductID having
COUNT(od.ProductID) > 20
order by od.ProductID

5. Analice la sentencia de la subconsulta y resuelva:


 Cuántas tablas son consultadas:__________.

r// 1
 Cuál es la parte de la sintaxis que corresponde a la subconsulta.
__________________________________________________.

r// (select od.ProductID from [Order Details] ods


where od.UnitPrice <> ods.UnitPrice)

 Cuál comando se utiliza y por qué se repite.___________________.

r// el comando es Selecy y se  repite por que  la subconsulta   lo


requiere  ya que esta consulta no  se  hace  de la  forma  normal es por
eso que existe   una consulta dentro de  otra es deci subconsulta  es
por eso la repiticon del Select
 Cuáles cláusulas se utilizan y que funcion estan cumpliendo en cada
uso.

r// where:esta clausula cumple la funcion de hacer  cumplir una


condicion en este caso se  esta diciendo
   
   from:Esta indicando que  los  atributos seleccionados estan en la
tabla  que indica  el from  
Group By:Agrupa  las tablas en este caso las  agrupa  por la
tabla od.ProductID, en este  caso  es necesario agrupar por que se
solicita que se muestre los productos vendidos mas de 20 veces es
decir para su  repeticion.

Having: esta cumpliendo la funcion de expresar la condicion que


cada  cual  tiene que cumplir

Order By: esta organizaondo los registros de la tabla productos

 Maque con X cuáles de las siguientes opciones, podria implementar


para mostrarse como columnas de la consulta:
 Nombre del producto. X
 Fecha de la venta del producto.
 Código de las ventas.
 Cuantas veces se ha vendido el producto.
 Cantidad de producto vendida en cada venta.
 Agregue la sentencia completa adaptando las opciones seleccionadas.

use Northwind
select distinct  od.ProductID , ProductName
from [Order Details] od inner join dbo.Products Pro on  od.ProductID=
Pro.ProductID
where od.ProductID in (select od.ProductID from [Order Details] ods
where od.UnitPrice <> ods.UnitPrice) group by od.ProductID , ProductName
having COUNT(od.ProductID) > 20
order by od.ProductID ,ProductName

Potrebbero piacerti anche