Skip to content

Instantly share code, notes, and snippets.

@jmalarcon
Created February 7, 2022 18:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save jmalarcon/e20338dd08e9a0627cb2ba5870542f99 to your computer and use it in GitHub Desktop.
Save jmalarcon/e20338dd08e9a0627cb2ba5870542f99 to your computer and use it in GitHub Desktop.
Soluciones a los ejercicios propuestos del curso de Iniciación a SQL en YouTube

Soluciones a los ejercicios propuestos del curso de Iniciación a SQL en YouTube

Vídeo completo: https://www.youtube.com/watch?v=tIG2s1AFpSE

Parte 2: Consultas básicas: SELECT con una sola tabla

1.- Obtén los datos de todos los productos "caros" que hay activos en el catálogo. Se consideran caros aquellos cuyo precio por unidad sea de, como mínimo, 50 euros

Deberías obtener 5 resultados:

SELECT * FROM Products WHERE UnitPrice >= 50 AND Discontinued = 0

Debes usar el operador >= porque si no los que cuesten exactamente 50 no saldrán, y se dice que deben ser de "al menos" ese precio, y eso los incluye. Además deben estar activos por lo que el campo Discontinued debe estar a 0 (no están descatalogados).

2.- Obtén todas las ventas que haya habido para el producto con identificador 65 ("Louisiana Fiery Hot Pepper Sauce") que hayan vendido entre 5 y 10 unidades en un solo pedido o que se hayan vendido con descuento

Deberías obtener 19 registros:

SELECT * FROM OrderDetails WHERE ProductID = 65 AND (Quantity BETWEEN 5 AND 10 OR Discount > 0)

Debes combinar las condiciones OR con un paréntesis para que se gestionen como una unidad, combinando su resultado con la otra condición (que el producto sea el 65). Si no le pones el paréntesis devuelve muchos más resultados por ser condiciones menos restrictivas.

3.- Averigua qué pedidos se hicieron en agosto de 2012 que se enviasen a clientes de España o Italia o que hayan sido vendidos al cliente con identificador QUICK, que además pesen más de 10Kg

Deberían darte 5 registros:

SELECT * FROM Orders
WHERE OrderDate BETWEEN '2012-08-01' AND '2012-08-31'
AND (ShipCountry IN ('Spain', 'Italy') OR CustomerID = 'QUICK')
AND Freight > 10

Fíjate en cómo usamos los paréntesis para agrupar las condiciones OR que van juntas y gestionarlas independientemente de la condición de la fecha. Además se usa BETWEEN para obtener las fechas adecuadas, y el operador IN para evitar tener que meter la condición del país dos veces con un =.

Parte 3: Consultas multi-tabla

1.- Obtén un listado de las categorías que existen con todos los productos que hay en cada una, ordenado por el nombre de la categoría y dentro de ésta por el nombre de los productos.

Deberías obtener 77 filas, tantas como productos ya que todos pertenecen a una categoría:

SELECT CategoryName, ProductName
FROM Categories
	JOIN Products ON Categories.CategoryID = Products.CategoryID
ORDER BY CategoryName, ProductName

Como ves es una simple relación entre las dos tablas involucradas, con una cláusula de ordenación al final.

2.- Averigua qué empresas de transporte han enviado alguna vez algún pedido a la ciudad de Caracas, que es de las pocas ciudades a las que no han enviado algo todos los proveedores de transporte.

Debería darte solo una empresa en este caso, y por lo tanto un solo registro:

SELECT DISTINCT S.CompanyName
FROM Shippers S
	JOIN Orders O ON S.ShipperID = O.ShipVia
WHERE ShipCity = 'Caracas'

En este caso hay que combinarlo con una condición para la ciudad, y además debes usar DISTINCT o sino te sacará el mismo nombre tantas veces como haya enviado algo a esa ciudad (en este caso en dos ocasiones). Más adelante aprenderemos a sacar estadísticas como sumas, medias, cuentas... de los resultados devueltos.

3.- Averigua qué proveedores han vendido algún producto en el mes de junio de 2013 y obtén para cada uno su nombre, el nombre del producto vendido, el número de pedido, la fecha de la venta y las cantidades vendidas en cada pedido.

Te debería dar 76 registros, que son los pedidos que se hicieron ese mes:

SELECT S.SupplierID, S.CompanyName, P.ProductName, O.OrderId, O.OrderDate, OD.Quantity
FROM Suppliers S
	 JOIN Products P ON S.SupplierID = P.SupplierID
	 JOIN OrderDetails OD ON P.ProductID = OD.ProductID
	 JOIN Orders O ON OD.OrderID = O.OrderID
 WHERE O.OrderDate BETWEEN '2013-06-01' AND '2013-06-30'
 ORDER BY S.CompanyName, OD.OrderId

En este caso necesitas combinar 4 tablas: proveedores, productos, detalles de pedido y pedidos. No importa que alguna de ellas (como los detalles de pedido) no tengan ningún campo en los resultados de la consulta: debes incluirlas en el JOIN también para que se puedan relacionar por las claves externas. Adicionalmente le tienes que meter una claúsula WHERE para elegir entre todos los resultados aquellos que cumplan las condiciones, y opcionalmente un orden de los resultados para verlos de la manera más lógica.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment