Problema:
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", también tiene una
tabla "provincias" donde registra los nombres de las provincias.
1- Elimine la tabla "clientes" y "provincias", si existen:
drop table if exists clientes, provincias;
2- Créelas con las siguientes estructuras:
create table clientes (
codigo int unsigned auto_increment,
nombre varchar(30) not null,
domicilio varchar(30),
ciudad varchar(20),
codigoprovincia tinyint unsigned,
telefono varchar(11),
primary key(codigo)
);
create table provincias(
codigo tinyint unsigned auto_increment,
nombre varchar(20),
primary key (codigo)
);
3- Ingrese algunos registros para ambas tablas:
insert into provincias (nombre) values('Cordoba');
insert into provincias (nombre) values('Santa Fe');
insert into provincias (nombre) values('Corrientes');
insert into provincias (nombre) values('Misiones');
insert into provincias (nombre) values('Salta');
insert into provincias (nombre) values('Buenos Aires');
insert into provincias (nombre) values('Neuquen');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Lopez Marcos', 'Colon 111', 'Córdoba',1,'null');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Perez Ana', 'San Martin 222', 'Cruz del Eje',1,'4578585');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Garcia Juan', 'Rivadavia 333', 'Villa Maria',1,'4578445');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Perez Luis', 'Sarmiento 444', 'Rosario',2,null);
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Pereyra Lucas', 'San Martin 555', 'Cruz del Eje',1,'4253685');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Gomez Ines', 'San Martin 666', 'Santa Fe',2,'0345252525');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Torres Fabiola', 'Alem 777', 'Villa del Rosario',1,'4554455');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Lopez Carlos', 'Irigoyen 888', 'Cruz del Eje',1,null);
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Ramos Betina', 'San Martin 999', 'Cordoba',1,'4223366');
insert into clientes (nombre,domicilio,ciudad,codigoProvincia,telefono)
values ('Lopez Lucas', 'San Martin 1010', 'Posadas',4,'0457858745');
4- Obtenga los datos de ambas tablas, use alias:
select c.nombre,c.domicilio,c.ciudad,p.nombre,c.telefono
from clientes as c
join provincias as p
on c.codigoProvincia=p.codigo;
5- Obtenga la misma información anterior pero ordenada por nombre del cliente:
select c.nombre,c.domicilio,c.ciudad,p.nombre,c.telefono
from clientes as c
join provincias as p
on c.codigoProvincia=p.codigo
order by c.nombre;
6- Omita la referencia a las tablas en la condición "on" para verificar que la sentencia no se
ejecuta porque el nombre del campo "codigo" es ambiguo (ambas tablas lo tienen):
select c.nombre,c.domicilio,c.ciudad,p.nombre,c.telefono
from clientes as c
join provincias as p
on codigoProvincia=codigo
Otros problemas:
A) Un club dicta clases de distintos deportes. En una tabla llamada "socios" guarda los datos de
sus socios y en una tabla denominada "inscriptos" almacena la información necesaria para las
inscripciones de los socios a los distintos deportes.
1- Elimine las tablas si existen.
2- Cree las tablas:
create table socios(
documento char(8) not null,
nombre varchar(30),
domicilio varchar(30),
primary key(documento)
);
create table inscriptos(
documento char(8) not null,
deporte varchar(15) not null,
año year,
matricula char(1), /*si esta paga ='s' sino 'n'*/
primary key(documento,deporte,año)
);
3- Ingrese algunos registros para ambas tablas:
insert into socios values('22333444','Juan Perez','Colon 234');
insert into socios values('23333444','Maria Lopez','Sarmiento 465');
insert into socios values('24333444','Antonio Juarez','Caseros 980');
insert into inscriptos values ('22333444','natacion','2005','s');
insert into inscriptos values ('22333444','natacion','2006','n');
insert into inscriptos values ('23333444','natacion','2005','s');
insert into inscriptos values ('23333444','tenis','2006','s');
insert into inscriptos values ('23333444','natacion','2006','s');
insert into inscriptos values ('24333444','tenis','2006','n');
insert into inscriptos values ('24333444','basquet','2006','n');
4- Muestre el nombre del socio y todos los campos de la tabla "inscriptos":
select s.nombre,i.*
from socios as s
join inscriptos as i
on s.documento=i.documento;
5- Omita la referencia a las tablas en la condición "on" para verificar que la sentencia no se
ejecuta porque el nombre del campo "documento" es ambiguo (ambas tablas lo tienen):
select s.nombre,i.*
from socios as s
join inscriptos as i
on documento=documento;
6- Muestre el nombre de los socios y los deportes en los cuales están inscriptos este año:
select s.nombre,i.deporte
from socios as s
join inscriptos as i
on s.documento=i.documento
where año=2006;
7- Muestre el nombre y todas las inscripciones del socio con número de documento='23333444':
select s.nombre,i.*
from socios as s
join inscriptos as i
on s.documento=i.documento
where s.documento='23333444';
B) Una pequeña biblioteca de barrio registra los préstamos de sus libros en una tabla
llamada "prestamos" y los datos de sus libros en una tabla llamada "libros".
1- Elimine las tablas, si existen.
2- Cree las tablas:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar (30),
editorial varchar (15),
primary key (codigo)
);
create table prestamos(
codigolibro int unsigned not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
primary key(codigolibro,fechaprestamo)
);
3- Ingrese algunos registros para ambas tablas:
insert into libros values (15,'Manual de 1º grado','Moreno Luis','Emece');
insert into libros values (28,'Manual de 2º grado','Moreno Luis','Emece');
insert into libros values (30,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');
insert into libros values (35,'El aleph','Borges','Emece');
insert into prestamos
values(15,'22333444','2006-07-10','2006-07-12');
insert into prestamos
values(15,'22333444','2006-07-20','2006-07-21');
insert into prestamos (codigolibro,documento,fechaprestamo)
values(15,'23333444','2006-07-25');
insert into prestamos (codigolibro,documento,fechaprestamo)
values(30,'23333444','2006-07-28');
insert into prestamos (codigolibro,documento,fechaprestamo)
values(28,'25333444','2006-08-10');
4- Muestre todos los datos de los préstamos, incluyendo el nombre del libro (join con "libros"):
select l.titulo,p.*
from prestamos as p
join libros as l
on l.codigo=p.codigolibro;
5- Muestre la información de los préstamos del libro "Manual de 1º grado":
select p.documento,fechaprestamo,fechadevolucion
from prestamos as p
join libros as l
on l.codigo=p.codigolibro
where l.titulo='Manual de 1º grado';
6- Muestre los títulos de los libros, la fecha de préstamo y el documento del socio de todos los
libros que no han sido devueltos:
select l.titulo,p.documento,p.fechaprestamo
from prestamos as p
join libros as l
on l.codigo=p.codigolibro
where p.fechadevolucion is null;
C) Una clínica registra las consultas de los pacientes en una tabla llamada "consultas" y en otra
tabla denominada "obrassociales" almacena los datos de las obras sociales que atiende.
1- Elimine las tablas si existen.
2- Cree las tablas:
create table consultas(
fecha date,
hora time,
documento char(8) not null,
codigoobrasocial tinyint unsigned,
medico varchar(30),
primary key(fecha,hora,medico)
);
create table obrassociales(
codigo tinyint unsigned auto_increment,
nombre varchar(15),
monto decimal(5,2) unsigned,
primary key(codigo)
);
3- Ingrese algunos registros:
insert into obrassociales (nombre,monto)
values('PAMI',2);
insert into obrassociales (nombre,monto)
values('IPAM',5);
insert into obrassociales (nombre,monto)
values('OSDOP',3);
insert into consultas values('2006-08-10','8:00','22333444',1,'Perez');
insert into consultas values('2006-08-10','10:00','22333444',1,'Lopez');
insert into consultas values('2006-08-10','8:30','23333444',1,'Perez');
insert into consultas values('2006-08-10','9:00','24333444',2,'Perez');
insert into consultas values('2006-08-10','10:00','25333444',3,'Perez');
insert into consultas values('2006-08-10','8:30','25333444',1,'Garcia');
insert into consultas values('2006-09-10','8:30','25333444',1,'Lopez');
4- Muestre la fecha,hora,documento del paciente, médico, nombre y monto de la obra social de todas
las consultas (join con "obrassociales"):
select c.fecha,c.hora,c.documento,c.medico,os.nombre,os.monto
from consultas as c
join obrassociales as os
on os.codigo=c.codigoobrasocial;
5- Muestre fecha,hora,documento del paciente y nombre de la obra social para las consultas del
doctor "Perez":
select c.fecha,c.hora,c.documento,os.nombre,os.monto
from consultas as c
join obrassociales as os
on os.codigo=c.codigoobrasocial
where c.medico='Perez';
6- Muestre las obras sociales DISTINTAS que atendió el doctor "Perez" el día "2006-08-10":
select distinct os.nombre
from consultas as c
join obrassociales as os
on os.codigo=c.codigoobrasocial
where c.fecha='2006-08-10' and
medico='Perez';