Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Practica Ejercicios SOLUCION

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 14

1

Requisito para resolver los ejercicios.

- Ejecutar en sql el archivo instnwnd.sql (donde se creará la base de


datos Northwind
- Si todo se ejecuta correctamente, se visualizará esto:

CONSULTAS

1. Se requiere visualizar los productos (Tabla Products) cuyos valores estén


comprendidos entre 6 y 50 dólares.

select * from products p where p.UnitPrice between 50 and 90

Resultado:
2

2. Muestre los campos de la tabla productos que tengan exactamente un precio


de 18, 19 y 10 dólares
select * from products p where p.UnitPrice in (18, 19, 10)

Resultado:

3. Seleccionar los productos vigentes cuyos precios unitarios están entre 35 y


250, sin stock en almacen, pertenecientes a las categorias 6, que son
distribuidos por los proveedores, 7

select *
from dbo.Products
where UnitPrice between 35 and 250 and unitsinstock =0 and
categoryid in(6) and SupplierID in(7)

Resultado:

4. Seleccionar los 7 productos con precio más caro, que cuenten con stock en
almacén.

select top 7 *
from Products
where UnitsInStock>0
order by UnitPrice desc

Resultado:
3

5. Seleccionar las órdenes de compra, realizadas por el empleado con OrderId


igual a 10256, de cualquier año pero solo en agosto.

select *
from dbo.Orders
where OrderID='10256'
and MONTH(OrderDate) in(7)

Resultado:

6. Listar cuantas órdenes a realizado cada empleado (mostrar el nombre,


apellidos y número de pedidos) que sean mayores a 100.

select e.FirstName,e.LastName, COUNT(*)


from Employees as e
inner join orders as o on o.EmployeeID=e.EmployeeID
group by e.FirstName,e.LastName
having COUNT(*)>100

Resultado:

7. Visualizar el máximo y mínimo precio de los productos por proveedor, mostrar


el nombre de la compañía proveedora.

Select sup.CompanyName, MAX(pro.UnitPrice) as maximo,


MIN(pro.UnitPrice) as minimo
from Products as pro
inner join Suppliers as sup on pro.SupplierID=sup.SupplierID
group by sup.CompanyName
4

Resultado:

8. Mostrar cuántos proveedores existen en cada Ciudad y País.

select city, COUNT( su.City) as numero, country, COUNT( su.Country) as


numero
from Suppliers as su
group by City, Country

Resultado:

9. Mostrar el número de órdenes realizadas de cada uno de los clientes por cada
mes y año.
5

select c.ContactName as cliente,COUNT( o.OrderID) as [numero de


ordenes],
MONTH(o.OrderDate) as mes, YEAR( o.OrderDate) as año
from Customers as c
inner join orders as o on o.CustomerID=c.CustomerID
group by c.ContactName, month(o.OrderDate), YEAR( o.OrderDate)

Resultado:

10. Cambiar y colocar el número de fax '0' a los que son nulos

UPDATE Customers
set Fax = '0'
where Fax is NULL

Resultado:

SUBCONSULTAS
6

11. Mostrar todos los empleados que tengan el mismo sexo que el empleado
con EmployeeID = 5

select * from Employees


where TitleOfCourtesy=(select TitleOfCourtesy
from dbo.Employees where EmployeeID=5)

Resultado:

12. Mostrar los productos cuando su precio es mayor que los precios de los
detalles

select * from Products where


UnitPrice > ANY (select UnitPrice from [Order Details]
where Quantity = 130)

Resultado:

13. Mostrar los empleados (LastName, FirstName, City) cuya ciudad también
exista en la tabla de Customers

select LastName, FirstName, City


from Employees E
where exists (select * from Customers C
7

where E.City = C.City)

Resultado:

14. Mostrar todos los productos de las categorías (bdo.Categories)


'Meat/Poultry' y 'Grains/Cereals'.

select * from Products


where CategoryID in (select CategoryID from dbo.Categories
where CategoryName in ('Meat/Poultry','Grains/Cereals'))

Resultado:

PROCEDIMIENTOS ALMACENADOS

15. Todas las órdenes que inicien con un carácter (o varios) en especial
8

CREATE PROCEDURE usp_Orders_x_Name


@ShipName varchar(40)
AS
SELECT * FROM Orders
WHERE ShipName LIKE @ShipName+'%'
GO

Se ejecuta el procedimiento almacenado y luego se ejecuta

---Probar

execute usp_Orders_x_Name 'N'

Resultado:

16. Seleccionar el nombre y apellido de un empleado a partir de su código.

CREATE PROCEDURE usp_Empleado_Traer_Nombre_Apellido


@EmployeeID int
AS
select LastName, FirstName
from employees
where EmployeeID = @EmployeeID
GO

Luego de ejecutar el procedimiento anterior se procede a ejecutarlo.


---Probar

EXEC usp_Empleado_Traer_Nombre_Apellido @EmployeeID=5

Resultado:

17. Procedimiento almacenado que cuente los productos que empiezan con un
determinado character ( o caracteres)
9

CREATE PROCEDURE usp_Product_cantidad


@ProductName varchar(50)
AS
DECLARE @Cantidad int
SELECT @Cantidad = COUNT(*)
FROM Products
WHERE productName LIKE @ProductName+'%'
RETURN @Cantidad
GO

---Probar
DECLARE @R int
EXECUTE @R = usp_Product_cantidad 'A'
SELECT @R AS Cantidad

Resultado:

18. Elaborar un procedimiento almacenado que devuelva el precio mayor y el


precio menor según la categoría

CREATE PROCEDURE usp_Products_PrecioMay_PrecioMen


@categoriaName varchar(40),
@PrecioMay money OUTPUT,
@PrecioMen money OUTPUT
AS
SELECT @PrecioMay = MAX(p.unitPrice),
@PrecioMen = MIN(p.unitPrice)
FROM Products AS p INNER JOIN categories AS c
ON p.CategoryID = p.CategoryID
WHERE c.CategoryName = @CategoriaName
GO

---Probar
DECLARE @may money
DECLARE @men money
exec usp_Products_PrecioMay_PrecioMen 'Confections', @may OUTPUT, @men OUTPUT
SELECT @may AS PRECIO_MAYOR , @men AS PRECIO_MENOR

Resultado:
10

19. Elaborar un procedimiento que permita DEVOLVER 1 si existe el cliente en


la tabla ORDERS caso contrario devuelve 0.

CREATE PROCEDURE usp_Cliente_Evaluar


@CustomerID varchar(50)
AS
DECLARE @r int
IF EXISTS (SELECT * FROM orders WHERE CustomerID = @CustomerID )
RETURN 1
ELSE
RETURN 0
RETURN @r
GO

--Probar
DECLARE @r int
execute @r = usp_Cliente_Evaluar 'PEDRO'
SELECT @r AS Valor_de_retorno

Resultado:

DECLARE @r int
execute @r = usp_Cliente_Evaluar 'LILAS'
SELECT @r AS Valor_de_retorno

Resultado:

20. Realizar un procedimiento almacenado que devuelva los clientes


(Customers, columnas CustomerId, CompanyName, City) según el país
(Country).

CREATE PROCEDURE usp_Clientes_Pais


@Country varchar(15)
AS
SELECT CustomerID, CompanyName, City
FROM CUSTOMERS
11

WHERE Country = @Country


GO

--Probar

EXEC usp_Clientes_Pais 'Mexico'

Resultado:

21. Elaborar un procedimiento almacenado para actualizar los precios de los


productos solo a los productos de la categoría ingresada (ingresar el
porcentaje de aumentos de los precios) solamente se actualizarán los
productos continuos.

create proc actualizar_precio


@CategoryID int,
@incr float
AS --incio del cuerpo del procedimiento
update Products
set UnitPrice=UnitPrice+UnitPrice*@incr/100
where Discontinued=0 and CategoryID=@CategoryID
GO

--Probar
exec actualizar_precio 1,5

Resultado:

FUNCIONES
12

22. Crear una función que permita mostrar los clientes y la cantidad comprada
de una determinada ciudad.

Create function dbo.fCantidadxClientexPais(@Pais nvarchar(15))


Returns Table
As
Return select C.CustomerID As 'Código Cliente',
C.CompanyName As 'Empresa', C.Country,
Sum(O.Freight) As Monto
from Customers As C
join Orders As O on C.CustomerID = O.CustomerID
where C.Country= @Pais
group by C.CustomerID, C.CompanyName, C.Country
go

-- Probar
select * from dbo.fCantidadxClientexPais('France')

Resultado:

23. Crear una función para retornar el total de Categorías

Create function fCategoriasCuenta()


Returns Int
As
Begin
Declare @CantidadCategorias int
Select @CantidadCategorias=count(*) from categories
13

Return @CantidadCategorias
End
go

-- Probar
Select 'Existen: ' + Str(dbo.fCategoriasCuenta())+ ' categorías'

-- Probar
Select 'Existen: ' + Ltrim(Str(dbo.fCategoriasCuenta()))+ ' categorías'

24. Crear una función que me permita saber el detalle del pedido a partir de su
fecha de inicio y fecha fin.

create function DetallePedido_Fecha


(@Inicio datetime,
@fin datetime)
returns table
as
return
(SELECT O.ORDERID,O.ORDERDATE,P.PRODUCTID, P.PRODUCTNAME,
(OD.UNITPRICE * OD.QUANTITY) AS TOTAL
FROM ORDERS AS O INNER JOIN [ORDER DETAILS] AS OD
ON O.ORDERID=OD.ORDERID INNER JOIN PRODUCTS AS P
ON OD.PRODUCTID=P.PRODUCTID
WHERE O.ORDERDATE BETWEEN @INICIO AND @FIN)

-- Probar
SELECT * FROM DBO.DETALLEPEDIDO_FECHA('1998-01-01','1998-12-31')

Resultado:
14

25. Crear función que devuelva el precio en soles

create function fn_precio (@Dol money, @TC money)


returns money
as
begin
declare @MS money
set @MS=@Dol*@TC
return @MS
end

-- Probar
select unitprice, dbo.fn_precio(unitprice,3.30) from Products

Resultado:

También podría gustarte