Created By: Miguel López Date: September 5, 2018 4:58 PM Tested ON: Miscrosoft SQL Server 2017
USANDO LA FAMILIA DE VISTAS DE LA BASE DE DATOS NORTHWIND CONTESTAR LAS SIGUIENTES CONSULTAS.
ENTREGAS
- Mostrar el nombre completo del empleado imprimiendo el nombre en un renglón y el apellido en otro
SELECT FirstName + CHAR(10) + LastName + CHAR(10)
FROM Employees
- Mostrar los empleados que tengan una antigüedad menor a 15 años
SELECT *
FROM Employees
WHERE DATEDIFF(YYYY,BirthDate,GETDATE())<15
- Consulta con el nombre del empleado y la fecha de nacimiento, debe aparece de la siguiente forma cada empleado:
JOSE PEREZ NACIO EL DIA 2 DE FEBRERO DE 1998
SELECT FirstName + ' ' + LastName + ' nacio el dia ' +
CAST(DAY(BirthDate) AS VARCHAR)+ ' de ' +
DATENAME(MM,BirthDate) + ' del' +
cast(YEAR(BirthDate) AS VARCHAR)
FROM Employees
- Consulta con la clave y fecha de la orden que se hayan realizado hace 12 años
SELECT OrderID,OrderDate
FROM Orders
WHERE DATEDIFF(YYYY,OrderDate,GETDATE())=12
- Consulta con las clave de la orden y fecha de la orden. mostrar solamente las ordenes que se hayan realizado los fines de semana
SELECT OrderID,OrderDate,DATEName(WEEKDAY,OrderDate)
FROM Orders
WHERE DATEPART(WEEKDAY,OrderDate) IN (6,7)
- Consultar en una sola columna la siguiente información de cada orden:
La orden 1 fue realizada el día lunes de la fecha 23 de octubre de 2008
SELECT 'La orden ' + CAT(orderid AS VARCHAR) + ' fue realizada el dia' + DATENAME(WEEKDAY,OrderDate) + ' de la fecha ' + CAST(DAY(OrderDate) AS VARCHAR) + ' ' + DATENAME(MM,OrderDate) + ' de ' + cast(YEAR(Orderdate) AS VARCHAR)
FROM Orders
- Consulta con los clientes cuya nombre sea mayor a 10 caracteres
SELECT *
FROM Customers
WHERE LEN(ContactName)>10
- Consulta con los productos que su nombre empieza con vocal
SELECT *
FROM Products
WHERE ProductName LIKE '[aeiou]%'
- Consulta con los empleados que su apellido empiece con consonante
SELECT *
FROM Employees
WHERE LastName NOT LIKE '[aeiou]%'
- Consulta con todas las ordenes que se hayan realizado en los meses que inicial con vocal
SELECT DATENAME(MM,OrderDate),*
FROM Orders
WHERE DATENAME(MM,OrderDate) LIKE '[aeiou]%'
- Consulta con los nombre de producto que tengan solamente 3 vocales
SELECT ProductName
FROM Products
WHERE ProductName LIKE '%[aeiou]%[aeiou]%[aeiou]%' AND ProductName NOT LIKE '%[aeiou]%[aeiou]%[ aeiou]%[aeiou]%'
- Consulta con los fechas de las ordenes cuyo año sea múltiplo de 3
SELECT OrderDate
FROM Orders
WHERE YEAR(OrderDate)%3=0
- Consulta con las ordenes que se hayan realizado en sábado y domingo, y que hayan sido realizadas por los empleado 1,2y5.
SELECT OrderID,OrderDate,EmployeeID
FROM Orders
WHERE DATEPART(WEEKDAY,OrderDate) IN (1,7) AND EmployeeID IN (1,2,5)
- Consulta con las ordenes que no tengan compañía de envío o que se hayan realizado en el mes de enero.
SELECT *
FROM orders
WHERE ShipVia IS NULL OR DATEPART(mm,orderdate)=1
- Consulta las 10 ultimas ordenes de 1997.
SELECT Top(10) *
FROM Orders
WHERE YEAR(Orderdate)=1997
ORDER BY(Orderdate) DESC
- Consulta con los 10 productos mas caros del proveedor 1.
SELECT TOP(10) *
FROM Products
WHERE ProductID=1
ORDER BY (Unitprice) DESC
- Consulta con los 4 empleados con mas antigüedad.
select top (4) *
from Employees
order by (Hiredate) desc
- Consulta con empleado con una antigüedad de 10,20 o 30 años y con una edad mayor a 30, o con los empleados que vivan en un Blvd. y no tengan una region asignada.
SELECT *
FROM Employees
WHERE (DATEDIFF(YYYY,HireDate,GETDATE()) IN (10,20,30) AND DATEDIFF(YYYY,BirthDate,GETDATE()) >30) OR
Address LIKE 'blvd%' AND Region IS NULL
- Consulta con las ordenes el código postal de envío tenga solamente letras.
SELECT *
FROM Orders
WHERE ShipPostalCode NOT LIKE '%[^a-z]%'
- Consulta con las ordenes que se hayan realizado en 1996 y en los meses que inicien con vocal de ese año.
SELECT *
FROM Orders
WHERE YEAR(OrderDate)=1996 AND DATENAME(MM,OrderDate) LIKE '[aeiou]%'
- Seleccionar todos los campos de la tabla clientes, ordenado por nombre del contacto de la compañía, alfabéticamente
SELECT * FROM Customers
ORDER BY ContactName ASC
- Seleccionar todos los campos de la tabla órdenes, ordenados por fecha de la orden, descendentemente
SELECT * FROM Orders
ORDER BY OrderDate DESC
- Seleccionar todos los campos de la tabla detalle de la orden, ordenada por cantidad pedida, ascendentemente
SELECT * --, RealPrice = (Quantity * (UnitPrice * (1 -Discount)))
FROM [Order Details]
ORDER BY Quantity * (UnitPrice * (1 -Discount)) ASC
- Obtener todos los productos, cuyo nombre comienzan con la letra P y tienen un precio unitario comprendido entre 10 y 120
SELECT * FROM Products
WHERE ProductName LIKE 'p%' AND
UnitPrice BETWEEN 10 AND 120
- Obtener todos los clientes de los países de: USA, Francia y UK
SELECT * FROM Customers
WHERE Country IN ('USA','France','UK')
- Obtener todos los productos descontinuados y sin stock, que pertenecen a las categorías 1, 3, 4 y 7.
SELECT * FROM Products
WHERE (Discontinued = 1 OR UnitsInStock = 0) AND CategoryID IN (1,3,4,7)
- Obtener todas las ordenes hechas por el empleado con código: 2, 5 y 7 en el año 1996
SELECT * FROM Orders
WHERE EmployeeID IN (2,5,7) AND YEAR(OrderDate) = 1996
- Seleccionar todos los clientes que cuenten con FAX
SELECT * FROM Customers
WHERE Fax IS NOT NULL
- Seleccionar todos los clientes que no cuenten con FAX, del país de USA
SELECT * FROM Customers
WHERE Country = 'USA' AND Fax IS NOT NULL
- Seleccionar todos los empleados que cuentan con un jefe
SELECT * FROM Employees
WHERE ReportsTo IS NOT NULL
- Seleccionar todos los campos del cliente, cuya compañía empiece con la letra de A hasta la D y pertenezcan al país de USA, ordenarlos por la dirección
SELECT * FROM Customers
WHERE CompanyName LIKE '[a-d]%' AND Country = 'USA'
ORDER BY Address ASC
- Seleccionar todos los campos del proveedor, cuya compañía no comience con las letras de la B a la G, y pertenezca al país de UK, ordenarlos por nombre de la compañía
SELECT * FROM Suppliers
WHERE CompanyName NOT LIKE '[B-G]%' AND Country = 'UK'
ORDER BY CompanyName ASC
- Seleccionar los productos vigentes cuyos precios unitarios están entre 35 y 250, sin stock en almacen. Pertenecientes a las categorías 1, 3, 4, 7 y 8 que son distribuidos por los proveedores 2, 4, 6, 7 y 9
SELECT * FROM Products
WHERE (UnitPrice BETWEEN 35 AND 250) AND
CategoryID IN (1,3,4,7,8) AND
SupplierID IN (2,4,6,7,9)
- Seleccionar todos los campos de los productos descontinuados, que pertenezcan a los proveedores con códigos: 1, 3, 7, 8 y 9, que tengan stock en almacén, y al mismo tiempo que sus precios unitarios están entre 39 y 190, ordenados por código de proveedor y precio unitario de manera ascendente
SELECT * FROM Products
WHERE SupplierID IN (1,3,7,8,9) AND
UnitsInStock > 0 AND
UnitPrice BETWEEN 39 AND 190
ORDER BY SupplierID ASC, UnitPrice ASC
- Seleccionar los 7 productos con precios más caros, que cuenten con stock en almacén
SELECT TOP 7 * FROM Products
WHERE UnitsInStock > 0
ORDER BY UnitPrice DESC
- Seleccionar los 9 productos, con menos stock en almacán, que pertenezcan a la categoría 3, 5 y 8
SELECT TOP 9 * FROM Products
WHERE CategoryID IN (3,5,8)
ORDER BY UnitsInStock ASC
- Seleccionar las órdenes de compra, realizadas por el empleado con código entre el 2 y el 5, además de los clientes con códigos que comienzan con las letras de la A hasta la G, del 31 de Julio de cualquier año
SELECT * FROM Orders
WHERE EmployeeID IN (2,5) AND
CustomerID LIKE '[A-G]%' AND
DAY(OrderDate) = 31 AND
MONTH(OrderDate) = 1
- Seleccionar las órdenes de compra, realizadas por el empleado con código 3, de cualquier añoo pero solo de los últimos 5 meses (Agosto - Diciembre)
SELECT *, MONTH(OrderDate) FROM Orders
WHERE EmployeeID = 3 AND MONTH(OrderDate) BETWEEN 8 AND 12
- Seleccionar los detalles de las órdenes de compra, que tengan un monto de cantidad pedida entre 10 y 250
SELECT *, Discount * UnitPrice * Discount FROM [Order Details]
WHERE (Discount * UnitPrice * Discount) BETWEEN 10 AND 250
- El codigo de la orden de compra, la fecha de la orden de compra, el codigo del producto,el nombre del producto y la cantidad pedida
SELECT od.OrderID, o.OrderDate, p.ProductID, p.ProductName, od.Quantity
FROM [Order Details] AS od
INNER JOIN Products AS p ON od.ProductID = p.ProductID
INNER JOIN Orders AS o ON od.OrderID = o.OrderID
- Mostrar: código de la categoría, el nombre de la categoría, cod. Producto, nombre del producto y precio
SELECT c.CategoryID, c.CategoryName, p.ProductID, p.ProductName, p.UnitPrice
FROM Products AS p
INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID
- Mostrar: número de la orden, fecha de la orden, código del producto, cantidad, precio y flete de la orden
SELECT od.OrderID, o.OrderDate, od.ProductID, od.Quantity, od.UnitPrice, o.Freight
FROM [Order Details] AS od
INNER JOIN Orders AS o ON od.OrderID = o.OrderID
- Mostrar: código, nombre, ciudad y país de proveedor, código, nombre, precio, stock del producto
SELECT s.SupplierID, s.CompanyName, s.City, s.Country, p.ProductID, p.ProductName, p.UnitPrice, p.UnitsInStock
FROM Products AS p
INNER JOIN Suppliers AS s ON p.SupplierID = s.SupplierID
- Mostrar: código y nombre de la categoría, código, nombre, precio y stock de los productos, código, nombre de los proveedores
SELECT c.CategoryID, C.CategoryName, p.ProductID, p.ProductName, p.UnitPrice, p.UnitsInStock, s.SupplierID, s.CompanyName
FROM Products AS p
INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID
INNER JOIN Suppliers AS s ON s.SupplierID = p.SupplierID
- Mostrar: núm. y fecha de la orden, nombre del producto, nombre de la categoría, nombre del proveedor
SELECT od.OrderID, o.OrderDate, p.ProductName, c.CategoryName, s.CompanyName
FROM Products AS p
INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID
INNER JOIN [Order Details] AS od ON p.ProductID = od.ProductID
INNER JOIN Orders AS o ON od.OrderID = o.OrderID
INNER JOIN Suppliers AS s ON s.SupplierID = p.SupplierID
- Mostrar: núm. y fecha de la orden, nombre y dirección del cliente, nombre y apellidos del empleado. Nombre del producto comprado y nombre del proveedor
SELECT o.OrderID, o.OrderDate,CustCompanyName = c.CompanyName, c.Address, e.FirstName, e.LastName, p.ProductName,SupplierCompanyName = s.CompanyName
FROM [Order Details] AS od
INNER JOIN Orders AS o ON od.OrderID = o.OrderID
INNER JOIN Employees AS e ON o.EmployeeID = e.EmployeeID
INNER JOIN Customers AS c ON o.CustomerID = c.CustomerID
INNER JOIN Products AS p ON p.ProductID = od.ProductID
INNER JOIN Suppliers AS s ON p.SupplierID = s.SupplierID
- Modificar el ejercicio 2: solo de los productos de la categorías 2, 4, 5, 7
SELECT c.CategoryID, c.CategoryName, p.ProductID, p.ProductName, p.UnitPrice
FROM Products AS p
INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID
WHERE c.CategoryID IN (2,4,5,7)
- Modificar el ejercicio 3 solo las Órdenes del mes de enero de 1997
SELECT od.OrderID, o.OrderDate, p.ProductID, p.QuantityPerUnit, p.UnitPrice, o.Freight
FROM [Order Details] AS od
INNER JOIN Orders AS o ON od.OrderID = o.OrderID
INNER JOIN Products AS p ON p.ProductID = od.ProductID
WHERE YEAR(OrderDate) = 1997
- Modificar el ejercicio 4 solo las productos con stock cero
SELECT s.SupplierID, s.CompanyName, s.City,s.Country, p.ProductID, p.ProductName, p.UnitPrice, p.UnitsInStock
FROM Products AS p
INNER JOIN Suppliers AS s ON p.SupplierID = s.SupplierID
WHERE UnitsInStock = 0
- Modificar el ejercicio 5 solo con precios entre 50 y 100
SELECT c.CategoryID, c.CategoryName, p.ProductID, p.ProductName, p.UnitPrice, p.UnitsInStock, s.SupplierID, s.CompanyName
FROM Products AS p
INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID
INNER JOIN Suppliers AS s ON p.SupplierID = s.SupplierID
WHERE p.UnitPrice BETWEEN 50 AND 100
- Modificar el ejercicio 6 solo del primer trimestre del año 1996
SELECT od.OrderID, o.OrderDate, p.ProductName, c.CategoryName, s.CompanyName
FROM [Order Details] AS od
INNER JOIN Products AS p ON od.ProductID = p.ProductID
INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID
INNER JOIN Suppliers AS s ON p.SupplierID = s.SupplierID
INNER JOIN Orders AS o ON od.OrderID = o.OrderID
WHERE MONTH(o.OrderDate) <= 3 AND YEAR(o.OrderDate) = 1996
EJERCICIOS D)
-
Visualizar el máximo y el mínimo precio de los productos por categoría, mostrar el nombre de la categoría
-
Visualizar el máximo y mínimo precio de los productos por proveedor, mostrar el nombre de la compañía proveedora
-
Seleccionar las categorías que tengan más de 5 productos. Mostrar el nombre de la categoría y el número de productos
-
Calcular cuántos clientes existe en cada país
-
Calcular cuántos clientes existen en cada ciudad
-
Calcular el stock total de los productos por cada categoría. Mostrar el nombre de la categoría y el stock por categoría
-
Calcular el stock total de los productos por cada categoría. Mostrar el nombre de la categoría y el stock por categoría. Solamente las categorías
2
,5
y8
-
Obtener el nombre del cliente, nombre del proveedor, nombre del empleado y el nombre de los productos que están en la orden
10250
-
Mostrar el número de órdenes realizadas de cada uno de los clientes por año
-
Mostrar el número de órdenes realizadas de cada uno de los empleados en cada año
-
Mostrar el número de órdenes realizadas de cada uno de los clientes por cada mes y año