use Northwind
--mostrar todos los empleados y todos sus atributos.
select *
from Employees
go
--mostrar todos los productos y todos sus atributos.
select *
from Products
go
--Mostrar el código, nombre y categoría de los productos.
select ProductID,ProductName,CategoryID
from Products
go
--mostrar los productos que pertenecen a la categoría 2.
select *
from Products
where CategoryID = 2
go
--productos que pertenece a la categoría 2 y 4.
select *
from Products
where CategoryID = 2 or CategoryID = 4
go
--mostrar los productos su precio mayor de 100
select ProductID,ProductName,UnitPrice
from Products
where UnitPrice > 100
go
--Mostrar el producto tofu:
select ProductID,ProductName,UnitPrice
from Products
where ProductName like 'tofu'
go
--productos de la catergoria 2,4,6
select *
from Products
where CategoryID in(2,4,6)
go
--productos de la 3,5,8
select *
from Products
where SupplierID in(3,5,8)
go
--Mostrar los productos cuyo precio oscilan entre 30 y 60 dólares
select ProductID,ProductName, UnitPrice
from Products
where UnitPrice between 30 and 60
go
--Mostrar los productos cuyo stock es entre 0 y 10
select ProductID,ProductName,UnitPrice,UnitsInStock
from Products
where UnitsInStock between 0 and 10
go
--Mostrar todos los productos que empiezan con ‘c’
select ProductID,ProductName,UnitPrice
from Products
where ProductName like 'c%'
go
select ProductID,ProductName,UnitPrice
from Products
where ProductName like '[a-d]%'
go
--ORDER BY: sirve para ordenar las filas según el o los campos especificados.
--Desc: ordena de forma descendente. Asc: ordena de forma ascendente.
select ProductID,ProductName,UnitPrice
from Products
order by ProductName asc
go
select ProductID,ProductName,UnitPrice
from Products
order by ProductName desc
go
--Seleccione todos los campos de la tabla cliente, ordenado por nombre
-- del contacto de la compañía, alfabéticamente.
select *
from Customers
order by ContactName asc
go
--Seleccione todos los campos de la tabla órdenes, ordenados por fecha de la
orden, descendentemente.
select *
from Orders
order by OrderDate desc
go
--Seleccione todos los campos de la tabla detalle de la orden, ordenada por
cantidad pedida. Ascendentemente.
select *
from [Order Details]
order by Quantity asc
go
--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
go
--Obtener todos os clientes de los países de: USA, Francia y UK:
select *
from Customers
where Country in('usa','francia','uk')
--Obtener todos los productos descontinuados y sin stock, que pertenecen a la
categoria 1, 3, 4 y 7.
select *
from Products
where Discontinued = 1 and UnitsInStock = 0 and CategoryID in(1,3,4,7)
--Obtener todas las órdenes 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
select *
from Orders
where EmployeeID in(2,5,7) and year (OrderDate) = '1996'
go
--Seleccionar todos los clientes que cuenten con Fax
select CustomerID,ContactName,Fax
from Customers
where Fax is not null
select *
from Customers
where Fax is not null
go
--Seleccionar todos los clientes que no cuenten con FAX, del País de USA
select CustomerID,ContactName,Fax,Country
from Customers
where Fax is null and Country like 'usa%'
select *
from Customers
where Country = 'usa' and Fax is null
go
--Seleccionar todos los empleados que cuentan con un jefe.
select EmployeeID,LastName,ReportsTo
from Employees
where ReportsTo is not null
select *
from Employees
where ReportsTo is not null
go
--Seleccionar todos los campos del cliente, cuya compania empiecen con letra
--A hata la D y pertenezcan al pais de USA, ordenarlos por la direccion.
select *
from Customers
where CompanyName like '[A-D]%' and Country = 'USA' order by Address asc
select *
from Customers
where CompanyName like '[A-D]%' and Country like 'usa' order by Address asc
go
--Seleccionar todos los campos del cliente, cuya compania empiecen con las letras
--de la B a la G, y pertenezcan al pais de UK, ordenarlos por nombre de la
compania
select *
from Customers
where CompanyName like '[B-G]%' and Country = 'uk' order by CompanyName asc
select *
from Customers
where CompanyName like '[B-G]%' and Country = 'uk' order by CompanyName asc
go
--Seleccionar los productos vigentes cuyos precios unitarios están entre 35 y
--250, sin stock en almacen, pertenecientes a las categorias 1, 3, 4, 7 y 8,
--que son distribuidos por los proveedores, 2, 4, 6, 7, 8 y 9
select*
from Products
where UnitPrice between 35 and 250 and UnitsInStock = 0 and CategoryID
in(1,3,4,7,8) and SupplierID in(2,4,6,7,8,9)
select *
from Products
where UnitPrice between 35 and 250 and UnitsInStock = 0 and CategoryID
in(1,3,4,7,8) and SupplierID in(2,3,6,7,8,9)
go
--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 proveedores y precio unitario de manera
ascendente.
select *
from Products
where Discontinued = 1 and SupplierID in(1,3,7,8,9) and UnitsInStock > 0 and
UnitPrice between 39 and 190
order by SupplierID,UnitPrice asc
select *
from Products
where Discontinued = 1 and SupplierID in(1,3,7,8,9) and UnitsInStock > 0
and UnitPrice between 39 and 190 order by SupplierID, UnitPrice asc
go
--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
select top 7 *
from Products
where UnitsInStock >0 order by UnitPrice asc
go
--Seleccionar los 9 productos, con menos stock en almacén, que pertenezcan a la
categoria 3, 5 y 8.
select top 9 *
from Products
where CategoryID in(3,5,8) order by UnitsInStock asc
select top 9 *
from Products
where CategoryID in(3,5,8) order by UnitsInStock asc
go
--Seleccionar las órdenes de compra, realizadas por el empleado con código entre
el 2 y 5,
-- además de los clientes con código que comienzan con las letras de la A hasta
la G, del 31 de julio de cualquier año.
select *
from Orders
where EmployeeID between 2 and 5 and CustomerID like '[A-G]%' and
DATEPART(DD,OrderDate) = 31 and DATEPART(MM,OrderDate)= 7
select *
from Orders
where EmployeeID between 2 and 5 and CustomerID like '[A-G]%'
and DATEPART(dd,OrderDate) = 31 and DATEPART(mm,OrderDate) =7
go
--Seleccionar las órdenes de compra, realizadas por el empleado con código 3, de
cualquier año pero solo de
-- los úlimos 5 meses (agosto-Diciembre)
select *
from Orders
where EmployeeID = 3 and MONTH(OrderDate) between 8 and 12
select *
from Orders
where EmployeeID = 3 and MONTH(OrderDate) in(8,9,10,11,12)
go
select *
from Orders
where EmployeeID = 3 and MONTH(OrderDate) between 8 and 12
go
--Seleccionar los detalles de las órdenes de compra, que tengan un monto de
cantida pedida entre 10 y 250.
select OrderID,Quantity
from [Order Details]
where Quantity between 10 and 250
go
--Seleccionar los detalles de las órdenes de compras, cuyo monto del pedidio
esten entre 10 y 100.
select OrderID,Quantity,UnitPrice,Quantity*UnitPrice as total
from [Order Details]
where Quantity*UnitPrice between 10 and 100
go
select distinct country
/* DISTINCT... filta solo uno por tipo de dato, especificado en el
select */
from [Link]
--Mostrar los 15 productos más vendidos e incluyendo a los empates en el
--ultimo resgistro(PD. El operador TOP solo saca ‘N’ registros).
select top 15 WITH TIES OrderID,ProductID,Quantity
from [Order Details]
order by Quantity desc
go
--nombre de la compania del proveedor y el precio
select [Link],[Link],UnitPrice
from Suppliers as s inner join Products as p
on [Link] = [Link]
go
--Código de la orden de compra, fecha de la orden de compra, el código del
producto, el nombre de producto, y la cantidad pedida.
select [Link],OrderDate,[Link], [Link], [Link]
from Orders ord inner join [Order Details] as od
on [Link] = [Link] inner join Products as pr
on [Link] = [Link]
go
select (firstname + ' '+ lastname) as name, city, postalcode from Employees
union
select [Link], city, postalcode
from Customers
select COUNT(ReportsTo) as total
--count muesta los no null
from Employees
select ProductID, SUM(Quantity) as total_quantity from [Order Details]
where UnitPrice< 10 group by ProductID
--HAVING SE APLICA DESPUES DE AGRUPAR CON LOS NUEVOS REGISTROS (HAVING DEPENDE
DEL GROUP BY)
--SE DIFERENCIA DEL WHERE YA QUE ESTE SE APLICA EN LA TABLA ORIGINAL
select ProductID,SUM(Quantity) as total_quantity
from [Order Details]
group by ProductID
having ProductID = 2
go
select CategoryID, COUNT(*) as total from Products as prod
where CategoryID=4
group by [Link]
go
--Equivalencia con el comando having
select CategoryID, COUNT(*) as total from Products as prod
group by [Link]
having CategoryID=4
go
select CategoryID, COUNT(*) as total
from Products as prod
where UnitPrice between 10 and 60
group by [Link]
go
select CategoryID, COUNT(*) as total
from Products as prod
group by [Link]
having COUNT(*)<=10
go
--MUESTRAR LA CANTIDAD DE PRODUCTOS POR CATEGORIAS
select CategoryID, COUNT(*) as total
from Products as prod
group by CategoryID
go
--MOSTRAR EL NUMERO, MAXIMO Y MININO POR CATEGORIA DE LOS PRECIOS Select
[Link], MAX([Link]) as maximo,
MIN([Link]) as minimo
FROM Categories AS CA
INNER JOIN Products AS PRO ON [Link]=[Link]
GROUP BY [Link]
--MOSTRA AL EMPLEADO Y EL NUMERO DE ORDENES
select [Link], COUNT(*)
from [Link] as em
inner join orders as o on [Link]=[Link]
group by [Link]
go
--MOSTRAR: CUANTAS ORDENES A REALIZADO CADA EMPLEADO(MOSTRAR EL NOMBRE, APELLIDOS
Y NUMERO DE PEDIDOS) QUE SEAN MAYORES A 100
select [Link],[Link], COUNT(*)
from [Link] as em
inner join orders as o on [Link]=[Link]
group by [Link],[Link] having COUNT(*)>100
go
--MOSTRAR CUANTOS PRODUCTOS A COMPRADO CADA UNO DE LOS CLIENTES (MOSTRAR EL
NOMBRE DEL CLIENTE)
select [Link],SUM([Link]) as 'numero de productos'
from Customers as cu
inner join orders as o on [Link]=[Link] inner join [Order Details]
as d on [Link]=[Link]
group by [Link]
order by [Link]
go
--MOSTAR EL TOTAL PAGADO POR CADA ORDEN DE COMPRAS SOLO DEL MES DE ENERO DEL 1996
select [Link], SUM([Link]*[Link]*2.82) as total
from orders as o
inner join [Order Details] as d on [Link]=[Link]
where month ([Link])=12 and YEAR([Link])=1996
group by [Link]
go
--MOSTRAR EL NUMERO DE PRODUCTOS QUE VENDEN CADA UNO DE LOS PROVEEDORES (MOSTRAR
SU NOMBRE DE LA EMPRESA-PROVEEDOR)
--SOLO CONSIDERAR A LOS PRODUCTOS VIGENTES.
select [Link],count([Link]) as total
from Products as p
inner join Suppliers as s on [Link]=[Link]
where [Link]=0 and [Link]>0
group by [Link]
go
--Visualizar el máximo y mínimo precio de los productos por categoría, mostrar el
nombre de la categoría.
select [Link],MAX([Link]) as maximo, MIN([Link]) as minimo
from Products as pro inner join Categories as ca on [Link]=[Link]
group by [Link]
--Visualizar el máximo y mínimo precio de los productos por proveedor, mostrar el
nombre de la compañía proveedora.
select [Link],MAX([Link]) as Maximo,MIN([Link]) as Minimo
from Products as p inner join Suppliers as s on [Link] = [Link]
group by [Link]
go
--Seleccionar las categorías que tengan más 5 productos. Mostrar el nombre de la
categoría y el número de productos.
select [Link], COUNT([Link])as cantidad from Categories as ca
inner join Products as pro on [Link]=[Link]
group by [Link]
having count([Link])>5
go
--Calcular cuántos clientes existen en cada País.
select [Link] as pais, COUNT(country) as [numero de clientes]
from Customers as cu
group by Country
go
--Calcular cuántos clientes existen en cada Ciudad.
Select [Link] as ciudad, COUNT(citY) as [numero de clientes]
from Customers as cu
group by [Link]
go
--Calcular cuántos proveedores existen en cada Ciudad y País.
select city, COUNT( [Link]) as numero, country, COUNT( [Link]) as numero
from Suppliers as su
group by City, Country
go
--Calcular el stock total de los productos por cada categoría. Mostrar el nombre
de la categoría y el stock por categoría.
select [Link], SUM( [Link])
from Categories as ca
inner join Products as pro on [Link]=[Link]
group by [Link]
go
--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 y 8.
select [Link],[Link], SUM([Link])
from products as pro
inner join Categories as c on [Link]=[Link]
where [Link] in( 2, 5 , 8)
group by [Link],[Link]
--Obtener el nombre del cliente, nombre de proveedor, nombre del empleado y el
nombre de los productos que están en la orden 10250.
select [Link],[Link], [Link], [Link], [Link]
from orders as o
inner join Employees as e on [Link]=[Link] inner join Customers as c
on [Link] = [Link]
inner join [Order Details] as od on [Link]=[Link] inner join Products as p
on [Link]=[Link]
inner join Suppliers as s on [Link]=[Link]
where [Link] = 10250
go
--Mostrar le numero de ordenes realizadas de cada uno de los clientes por año.
select [Link],COUNT([Link]) as [numero de ordenes], year ([Link])
as fecha
from Customers c inner join Orders as o on [Link] = [Link]
group by YEAR([Link]),[Link]
go
--Mostrar el número de órdenes realizadas de cada uno de los empleados en cada
año.
select [Link],COUNT([Link]) as [numero de ordenes],YEAR([Link]) as
fecha
from Employees as e inner join Orders as o on
[Link] = [Link]
group by YEAR([Link]),[Link]
go
--Mostrar el número de órdenes realizadas de cada uno de los clientes por cada
mes y año.
select [Link] as cliente,COUNT( [Link]) as [numero de ordenes],
MONTH([Link]) as mes, YEAR( [Link]) as año from Customers as c
inner join orders as o on [Link]=[Link]
group by [Link], month([Link]), YEAR( [Link])
go
--Contar el número de órdenes que se han realizado por año y meses.
Select COUNT([Link]) as [Numero de ordenes], MONTH([Link]) as
mes,YEAR([Link]) as año
from orders as o
group by MONTH([Link]),YEAR([Link])
go
--Seleccionar el nombre de la compañía del cliente, el código de la orden de
compra, la fecha de la orden de compra, código
-- del producto, cantidad pedida del producto, nombre del producto, el nombre de
la compañía proveedora y la ciudad del proveedor.
select [Link] as cliente, [Link],[Link],[Link] ,
[Link],[Link] as proveedor,[Link],[Link]
from customers as c
inner join Orders as o on [Link]=[Link]
inner join [Order Details] as od on [Link]=[Link]
inner join Products as pd on [Link]=[Link]
inner join Suppliers as su on [Link]=[Link]
go
/*Seleccionar el nombre de la compañía del cliente , nombre del contacto, el
código de la orden de compra, la fecha de la
orden de compra, código del producto, cantidad pedida del producto, nombre del
producto y el nombre de la compañía proveedora,
usar Join. Solamente las compañías proveedoras que comienzan con la letra de la
A hasta la letra G, además la cantidad pedida
del producto debe estar entre 18 y 190.*/
select [Link],[Link] as contacto,
[Link],[Link],[Link] ,
[Link],[Link] as proveedor,[Link] from customers as c
inner join Orders as o on [Link]=[Link]
inner join [Order Details] as od on [Link]=[Link]
inner join Products as pd on [Link]=[Link]
inner join Suppliers as su on [Link]=[Link]
where ([Link] like '[a-g]%')and [Link] between 18 and 190
order by [Link]
go
/*Seleccionar cuantos proveedores tengo en cada país, considerando solo a los
nombre de los proveedores que
comienzan con la letra E hasta la letra P, además de mostrar solo los países
donde tenga más de 2 proveedores.*/
select [Link], COUNT([Link])
from suppliers as su
where [Link] like '[e-p]%'
group by [Link]
having COUNT([Link])>2
go
/*Obtener el número de productos, por cada categoría. Mostrando el nombre de la
categoría, el nombre del producto,
y el total de productos por categoría, solamente de las categorías 3, 5 y 8.
Ordenar por el nombre de la categoría.*/
select [Link] as categoria ,count( [Link]) as [numero de productos]
from products as pd
inner join Categories as ca on [Link]=[Link]
group by [Link]
go
--Mostar el nombre de la orden, la fecha de la orden y el total en soles de cada
orden .
select [Link],[Link],[Link]*[Link] as total from orders as
o
inner join [Order Details] as od on [Link]=[Link]
--Mostrar el nombre de producto y en cuantas órdenes de compra se encuentra.
select [Link], COUNT([Link]) as [productos en ordenes]
from products as pd
inner join [Order Details] as od on [Link]=[Link]
group by [Link]