Podemos hacer un "join" con más de dos tablas.
Cada join combina 2 tablas. Se pueden emplear varios join para enlazar varias tablas. Cada resultado de un join es una tabla que puede combinarse con otro join.
Una librería almacena la información de sus libros para la venta en tres tablas, "libros", "autores" y "editoriales".
Eliminamos las tablas si existen:
drop table if exists libros; drop table if exists autores; drop table if exists editoriales;
Creamos las 3 tablas con las siguientes estructuras:
create table libros( codigo integer primary key, titulo text, codigoautor integer, codigoeditorial integer, precio real ); create table autores( codigo integer primary key, nombre text ); create table editoriales( codigo integer primary key, nombre text );
Almacenamos los siguientes datos de prueba:
insert into editoriales(nombre) values('Planeta'); insert into editoriales(nombre) values('Emece'); insert into editoriales(nombre) values('Siglo XXI'); insert into editoriales(nombre) values('Plaza'); insert into autores(nombre) values ('Richard Bach'); insert into autores(nombre) values ('Borges'); insert into autores(nombre) values ('Jose Hernandez'); insert into autores(nombre) values ('Mario Molina'); insert into autores(nombre) values ('Paenza'); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('El aleph',2,2,20); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('Martin Fierro',3,1,30); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('Aprenda PHP',4,3,50); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('Uno',1,1,15); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('Java en 10 minutos',0,3,45); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('Matematica estas ahi',0,0,15); insert into libros(titulo,codigoautor,codigoeditorial,precio) values('Java de la A a la Z',4,0,50);
Recuperamos todos los datos de los libros consultando las tres tablas:
select titulo,a.nombre,e.nombre,precio from libros as l join autores as a on codigoautor=a.codigo join editoriales as e on codigoeditorial=e.codigo;
Los libros cuyo código de autor no se encuentra en "autores" (caso de "Java en 10 minutos" y "Matematica estas ahi") y cuya editorial no existe en "editoriales" (caso de "Matematica estas ahi" y "Java de la A a la Z"), no aparecen porque realizamos una combinación interna.
Podemos combinar varios tipos de join en una misma sentencia:
select titulo,a.nombre,e.nombre,precio from libros as l join autores as a on codigoautor=a.codigo left join editoriales as e on codigoeditorial=e.codigo;
Se muestra el libro 'Java de la A a la Z' que tiene un código de editorial inexistente en la tabla "editoriales".
Un club dicta clases de distintos deportes. En una tabla llamada "socios" guarda los datos de los
socios, en una tabla llamada "deportes" la información referente a los diferentes deportes que se
dictan y en una tabla denominada "inscriptos", las inscripciones de los socios a los distintos
deportes.
Un socio puede inscribirse en varios deportes el mismo año. Un socio no puede inscribirse en el
mismo deporte el mismo año. Distintos socios se inscriben en un mismo deporte en el mismo año.
Borrar la tablas si existen.
Crear las tablas con las siguientes estructuras:
create table socios( documento text primary key, nombre text, domicilio text ); create table deportes( codigo integer primary key, nombre text, profesor text ); create table inscriptos( documento text, codigodeporte integer, año integer, matricula text,--'s'=paga, 'n'=impaga primary key(documento,codigodeporte,año) );
Almacenar estos registros para probar las consultas:
insert into inscriptos (documento,codigodeporte,año,matricula) values ('22222222',3,'2016','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('23333333',3,'2016','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('24444444',3,'2016','n'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('22222222',3,'2015','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('22222222',3,'2017','n'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('24444444',1,'2016','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('24444444',2,'2016','s');
Muestre el nombre del socio, el nombre del deporte en que se inscribió y el año.
drop table if exists socios; drop table if exists deportes; drop table if exists inscriptos; create table socios( documento text primary key, nombre text, domicilio text ); create table deportes( codigo integer primary key, nombre text, profesor text ); create table inscriptos( documento text, codigodeporte integer, año integer, matricula text,--'s'=paga, 'n'=impaga primary key(documento,codigodeporte,año) ); insert into socios values('22222222','Ana Acosta','Avellaneda 111'); insert into socios values('23333333','Betina Bustos','Bulnes 222'); insert into socios values('24444444','Carlos Castro','Caseros 333'); insert into socios values('25555555','Daniel Duarte','Dinamarca 44'); insert into deportes(nombre,profesor) values('basquet','Juan Juarez'); insert into deportes(nombre,profesor) values('futbol','Pedro Perez'); insert into deportes(nombre,profesor) values('natacion','Marina Morales'); insert into deportes(nombre,profesor) values('tenis','Marina Morales'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('22222222',3,'2016','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('23333333',3,'2016','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('24444444',3,'2016','n'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('22222222',3,'2015','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('22222222',3,'2017','n'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('24444444',1,'2016','s'); insert into inscriptos (documento,codigodeporte,año,matricula) values ('24444444',2,'2016','s'); select s.nombre,d.nombre,año from deportes as d join inscriptos as i on codigodeporte=d.codigo join socios as s on i.documento=s.documento;
Puede ejecutar comandos de SQLite directamente en el sitio sin tener que instalar nada en su computadora.