ventas.sql 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. -- Crea la base de datos del sistema de ventas.
  2. CREATE DATABASE IF NOT EXISTS ventas
  3. CHARACTER SET = 'utf8mb4'
  4. COLLATE = 'utf8mb4_general_ci';
  5. -- Opera todas las sentencias SQL sobre la base de datos del sistema de ventas.
  6. USE ventas;
  7. -- Crea la tabla de productos.
  8. CREATE TABLE IF NOT EXISTS `productos` (
  9. `idProducto` INT(6) UNSIGNED NOT NULL,
  10. `nombre` VARCHAR(40) NOT NULL,
  11. `precio` DECIMAL(16, 2) UNSIGNED NOT NULL,
  12. CONSTRAINT `productos_idProducto_primario` PRIMARY KEY(`idProducto`),
  13. CONSTRAINT `productos_nombre_unico` UNIQUE(`nombre`)
  14. );
  15. -- Crea la tabla de ventas.
  16. CREATE TABLE IF NOT EXISTS `ventas` (
  17. `idVenta` INT(6) UNSIGNED NOT NULL,
  18. `idProducto` INT(6) UNSIGNED NOT NULL,
  19. `cantidad` INT(6) UNSIGNED NOT NULL,
  20. CONSTRAINT `ventas_idVenta_primario` PRIMARY KEY(`idVenta`),
  21. CONSTRAINT `movimientos_idProducto_foraneo` FOREIGN KEY(`idProducto`)
  22. REFERENCES `productos`(`idProducto`)
  23. ON DELETE CASCADE
  24. ON UPDATE RESTRICT
  25. );
  26. -- Registra los productos del ejercicio.
  27. INSERT IGNORE INTO `productos`(`idProducto`, `nombre`, `precio`) VALUES
  28. (1, 'LAPTOP', 3000),
  29. (2, 'PC', 4000),
  30. (3, 'MOUSE', 100),
  31. (4, 'TECLADO', 150),
  32. (5, 'MONITOR', 2000),
  33. (6, 'MICRÓFONO', 350),
  34. (7, 'AUDÍFONOS', 450);
  35. -- Registra las ventas del ejercicio.
  36. INSERT IGNORE INTO `ventas`(`idVenta`, `idProducto`, `cantidad`) VALUES
  37. (1, 5, 8),
  38. (2, 1, 15),
  39. (3, 6, 13),
  40. (4, 6, 4),
  41. (5, 2, 3),
  42. (6, 5, 1),
  43. (7, 4, 5),
  44. (8, 2, 5),
  45. (9, 6, 2),
  46. (10, 1, 8);
  47. -- Consulta todos los productos que tengan solo una venta.
  48. SELECT
  49. productos.idProducto,
  50. productos.nombre,
  51. COUNT(ventas.idVenta) AS numeroVentas
  52. FROM productos
  53. INNER JOIN ventas
  54. ON productos.idProducto = ventas.idProducto
  55. GROUP BY productos.idProducto
  56. HAVING COUNT(ventas.idVenta) = 1
  57. ORDER BY productos.idProducto ASC;
  58. -- Consulta todos los productos y la cantidad total de ventas de cada producto.
  59. SELECT
  60. productos.idProducto,
  61. productos.nombre,
  62. SUM(ventas.cantidad) AS cantidadTotalVentas
  63. FROM productos productos
  64. INNER JOIN ventas
  65. ON productos.idProducto = ventas.idProducto
  66. GROUP BY productos.idProducto
  67. ORDER BY productos.idProducto ASC;
  68. -- Consulta todo los productos (con o sin ventas) y la suma total ($) vendidas de cada producto.
  69. SELECT
  70. productos.idProducto,
  71. productos.nombre,
  72. productos.precio,
  73. IFNULL(SUM(ventas.cantidad), 0) AS cantidadTotalVentas,
  74. (IFNULL(SUM(ventas.cantidad), 0) * productos.precio) AS sumaTotalVentas
  75. FROM productos productos
  76. LEFT JOIN ventas
  77. ON productos.idProducto = ventas.idProducto
  78. GROUP BY productos.idProducto
  79. ORDER BY productos.idProducto ASC;