Consultas SQL: Ejercicios Prácticos y Soluciones Detalladas

Creación de la Tabla Proveedores e Inserción de Datos

0) Crear una tabla llamada ‘proveedores’ con los siguientes campos:

  • numprov (texto, tamaño 3, clave primaria)
  • nombreprov (texto, tamaño 15)
  • estado (entero)
  • ciudad (texto, tamaño 15)

Código SQL:

CREATE TABLE proveedores (
  numprov VARCHAR(3) PRIMARY KEY,
  nombreprov VARCHAR(15),
  estado INT,
  ciudad VARCHAR(15)
);

Insertar los siguientes valores en la tabla ‘proveedores’:

  • (v1, Smith, 20, Londres)
  • (v2, Jones, 10, Paris)
  • (v3, Blake, 30, Paris)
  • (v4, Clarke, 20, Londres)
  • (v5, Adams, 30, Atenas)

Código SQL:

INSERT INTO proveedores VALUES ('v1', 'Smith', 20, 'Londres');
INSERT INTO proveedores VALUES ('v2', 'Jones', 10, 'Paris');
INSERT INTO proveedores VALUES ('v3', 'Blake', 30, 'Paris');
INSERT INTO proveedores VALUES ('v4', 'Clarke', 20, 'Londres');
INSERT INTO proveedores VALUES ('v5', 'Adams', 30, 'Atenas');

Consultas SQL

1) Números de proveedor que realizan suministros:

SELECT numprov FROM suministra;

2) Números de proveedor que realizan suministros (sin repeticiones):

SELECT DISTINCT numprov FROM suministra;

3) Suma total de las cantidades suministradas:

SELECT SUM(cantidad) FROM suministra;

4) Suma de las distintas cantidades suministradas, agrupadas por número de parte:

SELECT numparte, SUM(cantidad) FROM suministra GROUP BY numparte;

5) Cantidades totales suministradas por cada proveedor:

SELECT numprov, SUM(cantidad) FROM suministra GROUP BY numprov;

6) Cantidades totales suministradas por los proveedores ‘v1’ y ‘v4’:

SELECT numprov, SUM(cantidad) FROM suministra WHERE numprov='v1' OR numprov='v4' GROUP BY numprov;

7) Números de parte suministrados en una cantidad mayor o igual que 1000:

SELECT numparte, SUM(cantidad) FROM suministra GROUP BY numparte HAVING SUM(cantidad) >= 1000;

8) Partes suministradas por ‘v1’, ‘v2’ o ‘v3’ en una cantidad total mayor de 550:

SELECT numparte, SUM(cantidad) FROM suministra WHERE numprov='v1' OR numprov='v2' OR numprov='v3' GROUP BY numparte HAVING SUM(cantidad) >= 550;

9) Número de proveedores en Londres:

SELECT COUNT(numprov) FROM proveedores WHERE ciudad='Londres';

10) Número de partes rojas:

SELECT COUNT(*) FROM partes WHERE color='Rojo';

11) Colores repetidos en las partes:

SELECT color, COUNT(color) FROM partes GROUP BY color HAVING COUNT(color) >= 2;

12) Nombres de parte que son azules o están almacenadas en París:

SELECT nombreparte FROM partes WHERE color='Azul' OR ciudad='Paris';

13) Colores de las partes que no son tornillos:

SELECT color FROM partes WHERE NOT (nombreparte <= 'Tornillo');

(Nota: Esta consulta asume que cualquier parte cuyo nombre sea alfabéticamente menor o igual que ‘Tornillo’ no lo es. Una mejor consulta sería SELECT color FROM partes WHERE nombreparte <> 'Tornillo'; o, si puede haber múltiples tipos de tornillos, SELECT color FROM partes WHERE nombreparte NOT LIKE 'Tornillo%';)

14) Número de proveedores que no tienen su almacén en Atenas:

SELECT COUNT(*) FROM proveedores WHERE NOT (ciudad='Atenas');

(Nota: Una consulta más correcta sería SELECT COUNT(*) FROM proveedores WHERE ciudad <> 'Atenas';)

15) Nombres de parte suministradas en una cantidad mayor o igual de 400:

SELECT nombreparte FROM partes INNER JOIN suministra ON suministra.numparte = partes.numparte WHERE cantidad >= 400;

16) Proveedores que suministran partes en una cantidad menor o igual que 300:

SELECT DISTINCT nombreprov FROM proveedores INNER JOIN suministra ON suministra.numprov = proveedores.numprov WHERE cantidad <= 300;

17) Nombre y ciudad de los proveedores que suministran partes en una cantidad menor o igual que 300:

SELECT DISTINCT nombreprov, ciudad FROM proveedores INNER JOIN suministra ON suministra.numprov = proveedores.numprov WHERE cantidad <= 300;

18) Nombres de las partes suministradas en una cantidad total de 550 o más:

SELECT partes.nombreparte, SUM(suministra.cantidad) AS SumaDeCantidad FROM partes INNER JOIN suministra ON partes.numparte = suministra.numparte GROUP BY partes.nombreparte HAVING SUM(suministra.cantidad) >= 550;

19) Nombres de parte que suministran los distintos proveedores:

SELECT proveedores.nombreprov, partes.nombreparte FROM partes INNER JOIN (proveedores INNER JOIN suministra ON proveedores.numprov = suministra.numprov) ON partes.numparte = suministra.numparte;

20) Proveedores ubicados en el mismo sitio que alguna parte:

SELECT nombreprov, nombreparte FROM proveedores INNER JOIN partes ON proveedores.ciudad = partes.ciudad;

21) Nombres de las piezas que se suministran en la cantidad máxima:

SELECT nombreparte FROM suministra INNER JOIN partes ON suministra.numparte = partes.numparte WHERE cantidad = (SELECT MAX(cantidad) FROM suministra);

22) Números de proveedores que suministran por encima de la media de suministros:

SELECT numprov, SUM(cantidad) FROM suministra GROUP BY numprov HAVING SUM(cantidad) > (SELECT AVG(cantidad) FROM suministra);

23) Números de parte suministradas en una cantidad media mayor de 450:

SELECT numparte, AVG(cantidad) FROM suministra GROUP BY numparte HAVING AVG(cantidad) > 450;

24) Peso medio de las partes:

SELECT AVG(peso) FROM partes;

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.