Ejercicios Resueltos de Consultas SQL para Bases de Datos de Concesionarios

Clasificado en Informática

Escrito el en español con un tamaño de 7,71 KB

Ejercicios Prácticos de Consultas SQL

1. Obtener una vista con los nombres de los concesionarios que sólo tengan en stock coches de la marca RENAULT.

CREATE VIEW Renault AS
SELECT co.nombre
FROM concesionario co
WHERE co.cifc IN (SELECT di.cifc FROM distribución di WHERE di.cantidad > 0)
AND co.cifc NOT IN (SELECT di1.cifc FROM distribución di1, marco m, marcas ma WHERE di1.codcoche = ma.codcoche AND ma.cifm = m.cifm AND ma.nombre = 'RENAULT' AND di1.cantidad > 0);

2. Obtener el nombre y el apellido de los clientes que han adquirido un automóvil de un concesionario que posea actualmente en stock coches del modelo 'GTI'.

SELECT DISTINCT cli.nombre, cli.apellido
FROM clientes cli, ventas v
WHERE cli.dni = v.dni
AND v.cifc IN (SELECT d.cifc FROM distribucion d, coches co WHERE d.codcoche = co.codcoche AND co.modelo = 'GTI' AND d.cantidad > 0);

3. Obtener el atributo CIFC de los concesionarios que no sean de 'MADRID' cuya media de vehículos en stock sea la mayor de todas las medias.

SELECT d.cifc
FROM distribucion d, concesionario c
WHERE d.cifc = c.cifc
AND c.ciudad != 'MADRID'
GROUP BY d.cifc
HAVING AVG(d.cantidad) = (SELECT MAX(media) FROM (SELECT AVG(d2.cantidad) as media FROM distribucion d2 GROUP BY d2.cifc) as subconsulta);

4. Obtener los nombres de los clientes que no han comprado ningún coche 'ROJO' a ningún concesionario de 'MADRID'.

SELECT cli.nombre
FROM clientes cli
WHERE cli.dni NOT IN (SELECT v.dni FROM ventas v, concesionario c WHERE v.cifc = c.cifc AND v.color = 'ROJO' AND c.ciudad = 'MADRID');

5. Obtener el nombre de los coches comprados en un concesionario de la misma ciudad que la marca del coche.

SELECT DISTINCT co.nombre
FROM coches co, marco ma, concesionario c, marcas m, ventas v
WHERE co.codcoche = v.codcoche
AND v.codcoche = ma.codcoche
AND ma.cifm = m.cifm
AND v.cifc = c.cifc
AND m.ciudad = c.ciudad;

6. Obtener los nombres de marcas que no tengan modelos de coches GTI.

SELECT ma.nombre
FROM marcas ma
WHERE nombre NOT IN (SELECT ma.nombre FROM marcas ma, marco m, coches co WHERE ma.cifm = m.cifm AND m.codcoche = co.codcoche AND co.modelo = 'GTI');

7. Cambiar a verde el color de todos los coches vendidos por un concesionario que sólo tengan en stock coches de la marca RENAULT.

UPDATE ventas
SET color = 'VERDE'
WHERE cifc IN (SELECT d.cifc FROM distribución d WHERE d.cantidad > 0)
AND cifc NOT IN (SELECT d2.cifc FROM distribución d2, marco m, marcas ma WHERE d2.codcoche = m.codcoche AND m.cifm = ma.cifm AND ma.nombre = 'RENAULT' AND d2.cantidad > 0);

8. Obtener el nombre y la ciudad de todos los clientes que han comprado un ZX en un concesionario cuyo stock sea el menor.

SELECT DISTINCT cli.nombre, cli.ciudad
FROM clientes cli, coches co, ventas v
WHERE cli.dni = v.dni
AND v.codcoche = co.codcoche
AND co.nombre = 'ZX'
AND v.cifc IN (SELECT d.cifc FROM distribución d GROUP BY d.cifc HAVING SUM(d.cantidad) = (SELECT MIN(total_stock) FROM (SELECT SUM(d2.cantidad) as total_stock FROM distribución d2 GROUP BY d2.cifc) as sub));

9. Obtener el nombre y el apellido de los clientes que sólo han comprado un coche 'BLANCO' y un coche 'ROJO'.

SELECT cli.nombre, cli.apellido
FROM clientes cli
WHERE cli.dni IN (SELECT v.dni FROM ventas v WHERE v.color = 'BLANCO')
AND cli.dni IN (SELECT v2.dni FROM ventas v2 WHERE v2.color = 'ROJO')
AND cli.dni NOT IN (SELECT v3.dni FROM ventas v3 WHERE v3.color NOT IN ('BLANCO', 'ROJO'));

10. Obtener el nombre y apellido de los clientes que han comprado coches como mínimo en el concesionario ACAR y BCAR.

SELECT cli.nombre, cli.apellido
FROM clientes cli
WHERE cli.dni IN (SELECT v.dni FROM ventas v, concesionario c WHERE v.cifc = c.cifc AND c.nombre = 'ACAR')
AND cli.dni IN (SELECT v2.dni FROM ventas v2, concesionario c2 WHERE v2.cifc = c2.cifc AND c2.nombre = 'BCAR');

11. Obtener los nombres de marcas que no tengan stock coches GTD.

SELECT co.nombre
FROM coches co
WHERE co.nombre NOT IN (SELECT co1.nombre FROM coches co1 WHERE co1.modelo = 'GTD');

12. Obtener el nombre y apellido de los clientes que han adquirido un coche verde de un concesionario que posea actualmente en stock coches del modelo GTI.

SELECT cli.nombre, cli.apellido
FROM clientes cli, ventas v
WHERE cli.dni = v.dni
AND v.color = 'VERDE'
AND v.cifc IN (SELECT d.cifc FROM distribución d, coches co WHERE d.codcoche = co.codcoche AND d.cantidad > 0 AND co.modelo = 'GTI');

13. Obtener el nombre y apellido de los clientes que han adquirido un coche verde de un concesionario que tenga la menor media de coches en stock.

SELECT cli.nombre, cli.apellido
FROM clientes cli, ventas v
WHERE cli.dni = v.dni
AND v.color = 'VERDE'
AND v.cifc IN (SELECT d.cifc FROM distribución d GROUP BY d.cifc HAVING AVG(d.cantidad) = (SELECT MIN(media) FROM (SELECT AVG(d2.cantidad) as media FROM distribución d2 GROUP BY d2.cifc) as sub));

14. Obtener el dni de los clientes que han comprado un coche de una marca cuya ciudad sea la primera de la lista alfabética de las ciudades de las marcas.

SELECT DISTINCT v.dni
FROM ventas v, marcas ma, marco m
WHERE v.codcoche = m.codcoche
AND m.cifm = ma.cifm
AND ma.ciudad = (SELECT MIN(ciudad) FROM marcas);

15. Obtener el atributo CODCOCHE de los coches comprados en un concesionario de la misma ciudad que el cliente que lo compra.

SELECT v.codcoche
FROM ventas v, clientes cli, concesionario c
WHERE v.dni = cli.dni
AND v.cifc = c.cifc
AND cli.ciudad = c.ciudad;

16. Obtener el nombre y el apellido de los clientes que no han comprado ningún coche ROJO en ningún concesionario que posea actualmente en stock coches del modelo GTI.

SELECT cli.nombre, cli.apellido
FROM clientes cli
WHERE cli.dni NOT IN (SELECT v.dni FROM ventas v, coches co, distribucion d WHERE v.cifc = d.cifc AND d.codcoche = co.codcoche AND v.color = 'ROJO' AND co.modelo = 'GTI' AND d.cantidad > 0);

17. Obtener el nombre de todos los concesionarios que empiecen por C y cuya media de vehículos en stock sea la menor de todas las medias.

SELECT c.nombre
FROM concesionario c, distribución d
WHERE c.cifc = d.cifc
AND c.nombre LIKE 'C%'
GROUP BY d.cifc, c.nombre
HAVING AVG(d.cantidad) = (SELECT MIN(media) FROM (SELECT AVG(d2.cantidad) as media FROM distribución d2 GROUP BY d2.cifc) as sub);

18. Obtener el nombre de los clientes que han comprado un 'A4' en un concesionario cuya ciudad sea la última de la lista alfabética de las ciudades donde hay concesionarios.

SELECT cli.nombre
FROM clientes cli, ventas v, coches co, concesionario c
WHERE cli.dni = v.dni
AND c.cifc = v.cifc
AND v.codcoche = co.codcoche
AND co.nombre = 'A4'
AND c.ciudad = (SELECT MAX(c2.ciudad) FROM concesionario c2);

19. Obtener los nombres de los coches que no tengan modelo 'GTD'.

SELECT co.nombre
FROM coches co
WHERE co.nombre NOT IN (SELECT co1.nombre FROM coches co1 WHERE co1.modelo = 'GTD');

20. Obtener los nombres de los coches que no tengan modelo 'GTI'.

SELECT co.nombre
FROM coches co
WHERE co.modelo NOT IN (SELECT co2.modelo FROM coches co2 WHERE co2.modelo = 'GTI');

Entradas relacionadas: