48 - Combinación interna (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 las tablas "clientes" y "provincias":
drop table clientes; drop table provincias;
2- Créelas con las siguientes estructuras:
create table clientes ( codigo number(5), nombre varchar2(30), domicilio varchar2(30), ciudad varchar2(20), codigoprovincia number(2) ); create table provincias( codigo number(2), nombre varchar2(20) );
3- Ingrese algunos registros para ambas tablas:
insert into provincias values(1,'Cordoba'); insert into provincias values(2,'Santa Fe'); insert into provincias values(3,'Corrientes'); insert into provincias values(null,'La Pampa'); insert into clientes values (1,'Lopez Marcos','Colon 111','Córdoba',1); insert into clientes values (2,'Perez Ana','San Martin 222','Cruz del Eje',1); insert into clientes values (3,'Garcia Juan','Rivadavia 333','Villa Maria',null); insert into clientes values (4,'Perez Luis','Sarmiento 444','Rosario',2); insert into clientes values (5,'Pereyra Lucas','San Martin 555','Cruz del Eje',1); insert into clientes values (6,'Gomez Ines','San Martin 666','Santa Fe',2); insert into clientes values (7,'Torres Fabiola','Alem 777','Ibera',3); insert into clientes values (8,'Garcia Paco','Avellaneda 888','Rawson',5);
4- Obtenga los datos de ambas tablas, usando alias.
Note que los registros de "clientes" cuyo valor de "codigoprovincia" que NO encuentran coincidencia con "codigo" de "provincias" no aparecen en el resultado de la consulta; caso de "Garcia Juan", que código de provincia nulo y "Garcia Paco", que tiene un código de provincia que no está presente en "provincias".
5- Obtenga la misma información anterior pero ordenada por nombre de provincia (join y order by)
6- Recupere todos los datos de los clientes de la provincia "Santa Fe" (join con where) (2 registros devueltos)
Ver solucióndrop table clientes; drop table provincias; create table clientes ( codigo number(5), nombre varchar2(30), domicilio varchar2(30), ciudad varchar2(20), codigoprovincia number(2) ); create table provincias( codigo number(2), nombre varchar2(20) ); insert into provincias values(1,'Cordoba'); insert into provincias values(2,'Santa Fe'); insert into provincias values(3,'Corrientes'); insert into provincias values(null,'La Pampa'); insert into clientes values (1,'Lopez Marcos','Colon 111','Córdoba',1); insert into clientes values (2,'Perez Ana','San Martin 222','Cruz del Eje',1); insert into clientes values (3,'Garcia Juan','Rivadavia 333','Villa Maria',null); insert into clientes values (4,'Perez Luis','Sarmiento 444','Rosario',2); insert into clientes values (5,'Pereyra Lucas','San Martin 555','Cruz del Eje',1); insert into clientes values (6,'Gomez Ines','San Martin 666','Santa Fe',2); insert into clientes values (7,'Torres Fabiola','Alem 777','Ibera',3); insert into clientes values (8,'Garcia Paco','Avellaneda 888','Rawson',5); select c.nombre,domicilio,ciudad,p.nombre from clientes c join provincias p on c.codigoprovincia=p.codigo; select c.nombre,domicilio,ciudad,p.nombre from clientes c join provincias p on c.codigoprovincia=p.codigo order by p.nombre; select c.nombre,domicilio,ciudad from clientes c join provincias p on c.codigoprovincia=p.codigo where p.nombre='Santa Fe';
Un club dicta clases de distintos deportes. Almacena la información en una tabla llamada "inscriptos" que incluye el documento, el nombre, el deporte y si la matricula esta paga o no y una tabla llamada "inasistencias" que incluye el documento, el deporte y la fecha de la inasistencia.
1- Elimine las tablas y créelas:
drop table inscriptos; drop table inasistencias; create table inscriptos( nombre varchar2(30), documento char(8), deporte varchar2(15), matricula char(1), --'s'=paga; 'n'=impaga primary key(documento,deporte) ); create table inasistencias( documento char(8), deporte varchar2(15), fecha date );
2- Ingrese algunos registros para ambas tablas:
insert into inscriptos values('Juan Perez','22222222','tenis','s'); insert into inscriptos values('Maria Lopez','23333333','tenis','s'); insert into inscriptos values('Agustin Juarez','24444444','tenis','n'); insert into inscriptos values('Marta Garcia','25555555','natacion','s'); insert into inscriptos values('Juan Perez','22222222','natacion','s'); insert into inscriptos values('Maria Lopez','23333333','natacion','n'); insert into inasistencias values('22222222','tenis','01/12/2006'); insert into inasistencias values('22222222','tenis','08/12/2006'); insert into inasistencias values('23333333','tenis','01/12/2006'); insert into inasistencias values('24444444','tenis','08/12/2006'); insert into inasistencias values('22222222','natacion','02/12/2006'); insert into inasistencias values('23333333','natacion','02/12/2006');
3- Muestre el nombre, el deporte y las fechas de inasistencias, ordenado por nombre y deporte.
Note que la condición es compuesta porque para identificar los registros de la tabla "inasistencias" necesitamos ambos campos.
Note que la persona con documento '25555555' no aparece en la consulta porque no está presente en "inasistencias".
4- Obtenga el nombre, deporte y las fechas de inasistencias de un determinado inscripto en un determinado deporte (3 registros).
5- Obtenga el nombre, deporte y las fechas de inasistencias de todos los inscriptos que pagaron la matrícula (4 registros)
drop table inscriptos; drop table inasistencias; create table inscriptos( nombre varchar2(30), documento char(8), deporte varchar2(15), matricula char(1), --'s'=paga; 'n'=impaga primary key(documento,deporte) ); create table inasistencias( documento char(8), deporte varchar2(15), fecha date ); insert into inscriptos values('Juan Perez','22222222','tenis','s'); insert into inscriptos values('Maria Lopez','23333333','tenis','s'); insert into inscriptos values('Agustin Juarez','24444444','tenis','n'); insert into inscriptos values('Marta Garcia','25555555','natacion','s'); insert into inscriptos values('Juan Perez','22222222','natacion','s'); insert into inscriptos values('Maria Lopez','23333333','natacion','n'); insert into inasistencias values('22222222','tenis','01/12/2006'); insert into inasistencias values('22222222','tenis','08/12/2006'); insert into inasistencias values('23333333','tenis','01/12/2006'); insert into inasistencias values('24444444','tenis','08/12/2006'); insert into inasistencias values('22222222','natacion','02/12/2006'); insert into inasistencias values('23333333','natacion','02/12/2006'); select nombre,insc.deporte,ina.fecha from inscriptos insc join inasistencias ina on insc.documento=ina.documento and insc.deporte=ina.deporte order by nombre, insc.deporte; select nombre,insc.deporte, ina.fecha from inscriptos insc join inasistencias ina on insc.documento=ina.documento and insc.deporte=ina.deporte where insc.documento='22222222'; select nombre,insc.deporte, ina.fecha from inscriptos insc join inasistencias ina on insc.documento=ina.documento and insc.deporte=ina.deporte where insc.matricula='s';