62 - Varias tablas (join) |
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
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';