Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
UNION
EJERCICIOS:
Se quiere saber que vendedores y clientes hay en la empresa; para los casos en que su
teléfono y dirección de e-mail sean conocidos. Se deberá visualizar el código, nombre y
si se trata de un cliente o de un vendedor. Ordene por la tercer columna y la segunda.
Se quiere saber que artículos, clientes y vendedores hay en la empresa. Determine los
campos a mostrar y su ordenamiento
Se quiere saber que artículos hay en la empresa y cuáles han sido vendidos. Determine
Ud. las columnas a mostrar.
Se quiere saber las direcciones tanto de clientes como de vendedores. Para el caso de
los vendedores, códigos entre 3 y 12. En ambos casos la direcciones deberán ser
conocidas. Rotule como NOMBRE, DIRECCION, INTEGRANTE (en donde indicará si es
cliente o vendedor). Ordenado por la primera columna y la última.
select nom_clie Nombre, direccion Direccion, 'Cliente' Integrante
from clientes
where direccion is not null
union
select nom_vend, direccion, 'Vendedor'
from vendedores
where direccion is not null and cod_vend between 3 and 12
order by 1,3
Se quiere saber que clientes hay en la empresa y quienes han comprado entre el
11/12/2002 y el 27/02/2003. Muestre el código, sin duplicarlos.
Idem al ejercicio anterior, sólo que además del código, identifique de donde obtiene la
información.
-------------------------------------------------------------------------------------
INNER JOIN
EJERCICIOS:
Liste factura, fecha, vendedor y cliente para las ventas del año 2006 y 2007.
select f.nro_factu, f.fecha,v.nom_vend, c.nom_clie
from facturas f inner join vendedores v
on f.cod_vend=v.cod_vend
inner join clientes c
on f.cod_clie=c.cod_clie
where year (f.fecha) in (2006, 2007)
Liste código de vendedor, nombre, fecha y factura; para las ventas en lo que va del
año.
Liste código de vendedor, nombre, fecha y factura; para las ventas en lo que va del
año.
Liste descripción, cantidad e importe; aun para aquellos artículos que no registran
ventas.
Liste factura, fecha, vendedor, cliente, articulo, cantidad e importe; para las ventas de
febrero y marzo de los años 2006 y 2007 y siempre que el articulo empiece con letras
que van de la “a” a la “m”. Ordene por fecha, cliente y articulo.
Liste código de cliente,nombre, fecha y factura para las ventas del año 2007. Muestre
los clientes hayan comprado o no en ese año.
Se quiere saber los artículos que compro el cliente 7 en lo que va del año. Liste articulo,
observaciones e importe.
select a.descripcion, c.nom_clie
from facturas f inner join clientes c
on f.cod_clie=c.cod_clie
inner join detalle d
on f.nro_factu=f.nro_factu
inner join articulos a
on d.cod_arti=a.cod_arti
where c.cod_clie=7
and year(f.fecha)=2007
Se quiere saber los artículos que compraron los clientes que empiezan con “p”. Liste
cliente, articulo, cantidad e importe. Ordene por cliente y articulo, este en forma
descendente. Rotule como CLIENTE, ARTICULO, CANTIDAD, IMPORTE.
----------------------------------------------------------------------------
SUB-CONSULTAS
Subconsultas: Es una consulta que aparece dentro de la cláusula WHERE ó HAVING de otra
sentencia SQL.
Subconsultas en la cláusula WHERE
Test De Comparación: (= , < , > ) Compara el valor de una expresión con un único valor
producido por una subconsulta
Test de Pertenencia A Conjunto (IN): Compara un valor de datos con una columna de
valores producida por una subconsulta. NOT IN: esta expresión significa que no está incluida
en la lista de valores generada por la subconsulta.
Test de Cuantificados: ANY y ALL: Ambos tests comparan un valor de datos con la columna
de valores producidos por una subconsulta.
EJERCICIOS:
Se quiere saber que artículos no fueron vendidos el año pasado y que el precio unitario
del artículo oscile entre 2 y 6. Muestre el nombre del artículo, observaciones y precio
unitario.
Liste número de factura, fecha y cliente para los casos en que todas las veces que vino
a comprar haya sido en el mes de febrero. Ordene por cliente y fecha.
Muestre el número de factura y la fecha de venta para los casos en que por año se
hayan hecho menos de 9 ventas. Rotule como FACTURA, FECHA VENTA.
Muestre el número de factura, la fecha de venta, el artículo y el importe para los casos
en que para esa factura su importe total sea superior o igual a 150.
select *
from vendedores v
where v.cod_vend not in (
select f.cod_vend
from facturas f
where cod_clie in (1,6) )
Que artículos nunca se vendieron?. Tenga además en cuenta que su nombre comience
con letras que van de la “d” a la “p”. Muestre solamente la descripción de artículo.
select descripcion
from articulos a
where cod_arti not in (
select distinct d.cod_arti
from detalle d)
and a.descripcion like '[d-p]%'
order by descripcion´
-------------------------------------------------
EJERCICIOS:
Se quiere saber la fecha de la primer venta y el importe de ventas por vendedor, para
los casos en que su promedio de ventas sea superior al importe promedio global.
Rotule como VENDEDOR, TOTAL VENTAS.
Se quiere saber el importe promedio y el importe de ventas por fecha y cliente, para los
casos en que los números de factura que oscilen entre 20 y 35 y que ese importe de
ventas sea superior o igual al promedio global. Rotule como FECHA VENTA, CLIENTE,
IMPORTE, PROMEDIO.
Se quiere saber el importe vendido, la cantidad vendida por artículo, para los casos en
que los números de factura no sean uno de los siguientes:2, 10, 7, 13, 22 y que ese
importe promedio sea inferior al importe promedio de ese artículo.
Se quiere saber el promedio vendido por fecha y artículo para los casos en que las
cantidades vendidas oscilen entre 5 y 20 y que ese importe sea superior al importe
promedio de ese artículo. Rotule como FECHA VENTA, ARTICULO, FEC PRIMER
VENTA, PROMEDIO.
Se quiere saber el importe vendido por fecha para los casos en que ese promedio
vendido sea inferior al importe promedio global. Rotule como FECHA, IMPORTE.
-------------------------------------------------------------
SUMARIAS
EJERCICIOS:
Se quiere saber la cantidad de clientes que hay en la empresa.
Se quiere saber cual fue la fecha de la primera y última venta. Rotule como
PRIMERVENTA, ULTIMA VENTA.
Se quiere saber cual fue la máxima y la mínima cantidad que se vendió para el artículo
10.
Se quiere saber la cantidad total vendida, el monto y el importe promedio total; para
vendedores cuyo nombres comienzan con letras que van de la “d” a la “l”.
select sum (d.cant) as 'Cantidad total vendida' , sum (d.pre_unit) as 'Monto', avg
(d.pre_unit*d.cant) as 'Importe promedio total'
from dbo.detalle d, dbo.vendedores v
where v.nom_vend like '[d-l]%'
Se quiere saber el promedio del importe vendido, el total del importe vendido, el
promedio de la cantidad vendida y el total de la cantidad vendida.
Se quiere saber el total vendido, el promedio vendido y la cantidad total vendida para el
cliente de código 3.
Se quiere saber la fecha de la primera venta, la cantidad total vendida y el monto total
vendido para los artículos que empiecen con “c”.
Se quiere saber la cantidad de veces y la última vez que vino el cliente de apellido
Abarca.
Se quiere saber el importe total vendido y el importe promedio vendido para números
de factura que no sean los siguientes: 13, 5, 17, 33, 24.
----------------------------------------------------
VISTAS
EJERCICIOS:
select *
from [Detalle_ventas_vendedor]
select *
from [subtotales_ventas_vendedor]
select *
from [Detalle_ventas_vendedor]
where IMPORTE <= 20
select *
from [subtotales_ventas_vendedor]
where nom_vend like 'Miranda%'
Llama a la vista creada en el punto 1.b filtrando para promedios superiores a 100.
select *
from [subtotales_ventas_vendedor]
where PROMEDIO_VENDIDO > 40
Elimine las vistas creadas en el punto 1 (no se olvide de colocar el nombre como
corresponde)
----------------------------------------------------
PROCEDIMIENTOS ALMACENADOS
EJERCICIOS:
declare @a as int
execute INS_Vendedores
@a output, 'Pedro Perez', 'Lavalleja 250', 4205889, null, '20/03/2001'
execute UPD_Vendedor
12, 'Pedro Perez', 'Lavalleja 250', 4205889, null, '20/03/2001'
exec DEL_Vendedores
En este ejemplo solo se devuelven las filas de Product que tienen una línea de productos de R y
cuyo valor correspondiente a los días para fabricar es inferior a 4.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT Name, ProductNumber, ListPrice AS Price
FROM Production.Product
WHERE ProductLine = 'R'
AND DaysToManufacture < 4
ORDER BY Name ASC;
GO
Ésta es la consulta que calcula el beneficio de cada producto de cada pedido de venta.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT 'Total income is', ((OrderQty * UnitPrice) * (1.0 -
UnitPriceDiscount)), ' for ',
p.Name AS ProductName
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY ProductName ASC;
GO
-- OR
USE AdventureWorks2012;
GO
SELECT DISTINCT Name
FROM Production.Product
WHERE ProductModelID IN
(SELECT ProductModelID
FROM Production.ProductModel
WHERE Name LIKE 'Long-Sleeve Logo Jersey%');
GO
En este ejemplo se utilizan dos subconsultas correlativas para buscar los nombres de los empleados
que han vendido un producto específico.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT DISTINCT pp.LastName, pp.FirstName
FROM Person.Person pp JOIN HumanResources.Employee e
ON e.BusinessEntityID = pp.BusinessEntityID WHERE pp.BusinessEntityID IN
(SELECT SalesPersonID
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN
(SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE ProductID IN
(SELECT ProductID
FROM Production.Product p
WHERE ProductNumber = 'BK-M68B-42')));
GO
F.Usar GROUP BY
En este ejemplo se busca el total de cada pedido de venta de la base de datos.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
GO
Debido a la cláusula GROUP BY, solo se devuelve una fila que contiene la suma de todas las ventas
por cada pedido de venta.
Para ver los productos cuyas ventas totales son superiores a $2000000.00, utilice esta consulta:
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID, Total = SUM(LineTotal)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $2000000.00;
GO
Si desea asegurarse de que hay al menos mil quinientos elementos para los cálculos de cada
producto, use HAVING COUNT(*) > 1500para eliminar los productos que devuelven totales
inferiores a 1500 elementos vendidos. La consulta sería la siguiente:
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING COUNT(*) > 1500;
GO
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
INTO dbo.ProductResults
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
/* INCORRECT */
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
ORDER BY Name
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
/* CORRECT */
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO