Sunteți pe pagina 1din 8

Bases de Datos

EJERCICIOS Captulo 5: SQL


1) Construir
create database empleados;
use empleados;
create table vivienda(
alojamiento varchar(20),
nombrecompleto varchar (50),
responsable varchar(30),
direccion varchar (50),
constraint cp_vivienda primary key (alojamiento));
use empleados;
create table vivienda(
alojamiento varchar(20),
nombrecompleto varchar (50),
responsable varchar(30),
direccion varchar (50),
constraint cp_vivienda primary key (alojamiento))
use empleados;
create table empleado(
nombre varchar(50),
edad int unsigned,
alojamiento varchar(20),
constraint cp_empleado primary key (nombre),
constraint ca_vivienda foreign key (alojamiento)
references vivienda(alojamiento)
on update cascade on delete cascade);
use empleados;
create table oficioempleado(
nombre varchar(50),
oficio varchar(20),
calificacion varchar(20),
constraint cp_oficioempleado primary key (nombre, oficio)
);
use empleados;
create table oficio(
oficio varchar(20),
descripcion varchar(50),
constraint cp_oficio primary key (oficio, descripcion)
);
use empleados;
insert into oficioempleado(nombre, oficio, calificacion)
values ("Alonso Tellez", "Herrero", "Excelente");

insert into oficioempleado(nombre, oficio, calificacion)


values ("Diaz Jimenez", "Herrero", "Excelente");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Dorado Rodriguez", "Conductor", "Excelente");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Ezquerro Tomez", "Leador", "Bueno");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Gonzalez Orbea", "Herrero", "Preciso");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Perez Lopez", "Conductor", "Rapido");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Pedrero Lainez", "Obrero", "Normal");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Vazquez Lopez", "Labrador", "Lento");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Donoso Cid", "Labrador", "Normal");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Gonzalez Lopez", "Herrero", "Excelente");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Juarez Noriega", "Conductor", "Excelente");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Tejerina Ruiz", "Leador", "Bueno");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Alvarez Rodriguez", "Conductor", "Rapido");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Donoso Anton", "Herrero", "Preciso");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Dario Rodriguez", "Obrero", "Normal");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Eguibar Puente", "Labrador", "Lento");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Gomez Ordua", "Herrero", "Excelente");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Pavon Lopez", "Conductor", "Excelente");
insert into oficioempleado(nombre, oficio, calificacion)
values ("Panadero Juan", "Picador", "Precisooficioempleado");

use empleados;
insert into vivienda(alojamiento, nombrecompleto, responsable,
direccion)
values ("Paracuellos", "Paracuellos Jarama", "Alonso Tellez",
"Elipa, 12"),
("Vallecas", "Puente Vallecas", "Ezquerro Tome",
"Musas, 1"),
("Ponce", "Ponce Len", "Gonzalez Lopez", "Ponce, 23"),
("Toledo", "Puerta Toledo", "Juarez Noriega", "Toledo,
25"),
("Barajas", "Barajas Pueblo", "Perez Lopez", "Eloy, 2"),
("Brasilia", "Parque Brasilia", "Tejerina Ruiz",
"Brasilia, 3"),
("Pitis", "Estacin Pitis", "Vazquez Lopez", "Ponce,
46");

use empleados;
insert into oficio(oficio, descripcion)
values ("Herrero","Herrar caballos"),
("Conductor","Conductor de autobus"),
("Leador","Talar arboles"),
("Obrero","Trabajar en general"),
("Labrador","Cultivar la tierra"),
("Picador","Picar en los tuneles del metro");

3) Hacer las siguientes consultas para la base de datos creada en el


ejercicio 1:
1. Obtener el nombre de todos los empleados y que la columna
resultado se llame NOMBRE EMPLEADO
use empleados;
select nombre as nombre_empleado from empleado;

2. Mostrar los datos de la tabla empleados


use empleados;
select nombre as nombre_empleado from empleado;

3. Seleccionar el nombre y edad de los empleados y ordenarlos


por edad en orden descendente
use empleados;
select * from empleado;

4. Seleccionar el nombre de empleados, la edad y el alojamiento y


ordenar por edad en orden ascendente y luego por
alojamiento.
use empleados;
select nombre, edad
from empleado
order by edad desc;

5. Mostrar los diferentes alojamientos de los empleados


use empleados;
select nombre, edad , alojamiento
from empleado
order by edad asc, alojamiento;

4) Hacer las siguientes consultas para la base de datos creada en el


ejercicio 2:
1. Obtener todos los datos de todos los equipos.
use liga;
select * from equipo;

2. Obtener el nombre de todos los jugadores y que la columna


resultado se llame NOMBRE JUGADOR
use liga;
select nombre as 'nombre jugador' from jugador;

3. Seleccionar los nombres, apellido y posicin de todos los


jugadores ordenados por posicin.
use liga;
select nombre, apellido, posicion from jugador
order by posicion;

4. Seleccionar el nombre, equipo y posicin de los jugadores


ordenados por equipo y posicin
use liga;
select nombre, equipo, posicion from jugador
order by equipo, posicion;

5. Seleccionar los datos de los jugadores ordenados por equipo y


posicin
use liga;
select nombre, equipo, posicion from jugador
order by 2, 3;

6. Mostrar el nombre, equipo y posicin de los jugadores


ordenados ascendentemente por equipo y descendentemente
por su posicin
use liga;
select nombre, equipo, posicion from jugador
order by 2 asc, 3 desc;

7. Seleccionar los distintos equipos que existen en la tabla


jugador
use liga;
select distinct

equipo from jugador;

8. Calcular el salario neto anual a percibir por cada jugador


suponiendo que el IRPF es un 18% y nombrar la columna
resultado como Salario neto anual
use liga;
select nombre, apellido, salario_bruto*0.82 as 'salario neto
anual' from jugador;

9. Seleccionar el nombre y apellido de aquellos jugadores que


sean pivot
use liga;
select nombre, apellido from jugador
where posicion='pivot';

10. Seleccionar los datos de jugadores que no pertenezcan al


equipo 3
use liga;
select * from jugador
where equipo<>3;

11. Seleccionar aquellos datos de equipos cuya web es nula


use liga;
select * from equipo
where web_oficial is null;

12. Obtener los datos de los equipos menos los de Valencia y


Madrid
use liga;
select * from equipo
where ciudad not in ('Valencia', 'Madrid');

13. Obtener los datos de los partidos de marzo de 2010


use liga;
select * from partido
where fecha between 20100301 and 20100331;
Otra forma de hacerlo:
select * from partido
where fecha like 2010-03-%;

14. Seleccionar el nombre de los jugadores pivot que ganen mas de


100.000 euros
use liga;
select nombre from jugador
where posicion='pivot' and salario_bruto>100000;

15. Seleccionar el nombre de los jugadores de los equipos 1 y 2


que jueguen como base
use liga;
select nombre from jugador
where posicion='base' and (equipo=1 OR equipo=2);

5) Hacer las siguientes consultas para la base de datos creada en el


ejercicio 2:
1. Datos de jugadores del equipo 3 ordenados por apellido
SELECT * FROM jugadores
WHERE equipo=3
ORDER BY apellido;

2. Datos de los jugadores que sean pivot ordenados por su


identificador
SELECT * FROM jugadores
WHERE puesto=pivot
ORDER BY id_jugador;

3. Datos de jugadores de mas de 2 metros y ganen menos de


40.000
SELECT * FROM jugadores
WHERE altura>2.0 AND salario< 40000;

4. Datos de los partidos jugados en febrero


SELECT * FROM partidos
WHERE fecha LIKE %-02-%;

5. Nombre y apellido de los capitanes de equipos en la base de


datos liga
En este caso necesitamos usar una subconsulta. Es un ejercicio para introducir el concepto de subconsulta que se
ver un poco ms adelante.

SELECT nombre, apellido FROM jugadores


WHERE id_jugador IN (SELECT id_capitan FROM jugadores)
Otra forma de resolverlo:
SELECT DISTINCT (id_capitan), nombre apellido FROM judadores
WHERE id_jugador=id_capitan;

6. Datos de jugadores de los equipos 1 y 2 que ganen mas de


80.000 al mes
SELECT * FROM jugadores
WHERE (equipo = 1 OR equipo = 2) AND salario < 80000 ;

6) Hacer las siguientes consultas para la base de datos creada en el


ejercicio 2 utilizando funciones de agregado:
1. Calcular el numero de jugadores que miden mas de dos metros
SELECT COUNT(nombre) FROM jugadores
WHERE altura>2.0;

2. Calcular el salario medio de todos los jugadores


SELECT AVG(salario) AS 'Salario Medio' FROM jugadores;

3. Encontrar el salario ms alto, el ms bajo y la diferencia entre


ambos
SELECT MAX(salario), MIN(salario), MAX(salario)-MIN(salario)AS
'Diferencia Salarios' FROM jugadores;

4. Hallar el numero de ciudades en las que hay equipos


registrados
SELECT COUNT(distinct ciudad) FROM equipos;

5. Obtener el salario mensual neto de cada jugador suponiendo


un IRPF del 18%
SELECT SUM(salario*0.82/12) AS 'Salario mensual' FROM jugadores;