65 - Varias tablas (right join) |
Trabajamos con las tablas "libros" y editoriales" de una librería.
Eliminamos dichas tablas, si existen:
drop table if exists libros, editoriales;
Creamos las siguientes tablas:
create table libros( codigo int unsigned auto_increment, titulo varchar(40) not null, autor varchar(30) not null default 'Desconocido', codigoeditorial tinyint unsigned not null, precio decimal(5,2) unsigned, cantidad tinyint unsigned default 0, primary key (codigo) ); create table editoriales( codigo tinyint unsigned auto_increment, nombre varchar(20) not null, primary key(codigo) );
Cargamos algunos registros en la tabla "editoriales":
insert into editoriales (nombre) values('Paidos'); insert into editoriales (nombre) values('Emece'); insert into editoriales (nombre) values('Planeta'); insert into editoriales (nombre) values('Sudamericana');
Cargamos algunos registros en la tabla "libros":
insert into libros (titulo, autor,codigoeditorial,precio,cantidad) values('El Aleph','Borges',3,43.5,200); insert into libros (titulo, autor,codigoeditorial,precio,cantidad) values('Alicia en el pais de las maravillas','Lewis Carroll',2,33.5,100); insert into libros (titulo, autor,codigoeditorial,precio,cantidad) values('Aprenda PHP','Mario Perez',1,55.8,50); insert into libros (titulo, autor,codigoeditorial,precio,cantidad) values('Java en 10 minutos','Juan Lopez',1,88,150); insert into libros (titulo, autor,codigoeditorial,precio,cantidad) values('Alicia a traves del espejo','Lewis Carroll',1,15.5,80); insert into libros (titulo, autor,codigoeditorial,precio,cantidad) values('Cervantes y el quijote','Borges- Bioy Casares',3,25.5,250);
Necesitamos los títulos y nombres de las editoriales de los libros, incluso de aquellos editoriales que no tienen libros:
select nombre,titulo from editoriales as e left join libros as l on e.codigo=l.codigoeditorial;
Esta sentencia busca los nombres de las editoriales que están presentes en "libros". Podemos realizar la búsqueda de modo inverso con "right join":
select nombre,titulo from libros as l right join editoriales as e on e.codigo=l.codigoeditorial;
La primera, con "left join", busca valores de "codigo" de la tabla "editoriales" (tabla de la izquierda) coincidentes con los valores de "codigoeditorial" de la tabla "libros" (tabla de la derecha). La segunda, con "right join", busca valores de "codigoeditorial" de la tabla "libros" (tabla de la derecha) coincidentes con los valores de "codigo" de la tabla "editoriales" (tabla de la izquierda).