Subconsultas – ejercicios
Las subconsultas permiten extraer información que incluyen varias tablas, estas generalmente reportan un solo dato a un conjunto de resultados con una columna. Para la parte teórica completa y las condiciones y restricciones ver Subconsultas.
En este artículo veremos como desarrollar ejemplos analizando los datos y armando por pasos la subconsulta
Ejercicios
Usando Northwind
use northwind
go
Algo de teoría de Subconsultas
Pueden utilizarse de dos formas:
1. Dentro de la Lista de campos de la instrucción Select
select ListaCampos, (Select Campo from TablaSubconsulta where…) from TablaPrincipal
2. En la clásula Where
Select ListadeCampos, OtroCampo, UltimoCampo from Tabla
Where Campo =( Select… )
1. — Listado de Clientes (Customers) que compraron en Agosto de 1997
select * from Customers
where CustomerID in
(select distinct CustomerID from Orders where Datename(mm,OrderDate) = ‘Agosto’
and year(OrderDate) = 1997)
go
Note la subconsulta en negrita.
2. — Listado con las cantidades vendidas de los productos descontinuados. Incluir solamente los que tienen Stock
Primero: los productos descontinuados
select * from Products where Discontinued = 1
go
¿Dónde están las unidades vendidas?
select * from [Order Details]
go
Armando la solución
select P.ProductID, P.ProductName, p.UnitPrice from Products As P
where P.Discontinued = 1 and P.UnitsInStock > 0
go
Códigos de los descontinuados que tiene Stock
select P.ProductID from Products As P where P.Discontinued = 1 and P.UnitsInStock > 0
go
Cantidades vendidas de cada producto
select Sum(Od.Quantity), OD.ProductID from [Order Details] As OD
where OD.ProductID in (select P.ProductID from Products
As P where P.Discontinued = 1 and P.UnitsInStock > 0)
Group by OD.ProductID
go
SOLUCION
select P.ProductID, P.ProductName, p.UnitPrice,
(select Sum(Od.Quantity) from [Order Details] As OD where OD.ProductID in (select P.ProductID from Products As P where P.Discontinued = 1 and P.UnitsInStock > 0)
AND od.ProductID = p.ProductID) As ‘Cantidad Vendidas’
from Products As P where P.Discontinued = 1 and P.UnitsInStock > 0
go
3. — Empleados y la cantidad de órdenes generadas y NO atendidas
Empleados
select E.EmployeeID, Empleado = E.LastName + Space(1) + E.FirstName
from Employees As E
Conteo de las Ordenes NO ATENDIDAS
select COUNT(O.OrderID) As ‘Órdenes no Atendidas’ from Orders As O where ShippedDate is null
go
SOLUCION
select E.EmployeeID, Empleado = E.LastName + Space(1) + E.FirstName,
( — INICIO DE LA SUBCONSULTA
select COUNT(O.OrderID) from Orders As O where ShippedDate is null
AND O.EmployeeID = E.EmployeeID
) As ‘Órdenes no Atendidas’– FINAL DE LA SUBCONSULTA
from Employees As E
where (select COUNT(O.OrderID) from Orders As O where ShippedDate is null
AND O.EmployeeID = E.EmployeeID) > 0
order by ‘Órdenes no Atendidas’ desc
go