Listado completo de tutoriales
68 - Varias tablas (inner join - straight_join) |
Existen otros tipos de "join" además del simple "join", "left join", "right join", "cross join" y "natural join". Veámoslos.
"inner join" es igual que "join". Con "inner join", todos los registros no coincidentes son descartados, sólo los coincidentes se muestran en el resultado:
select nombre,titulo from editoriales as e inner join libros as l on e.codigo=l.codigoeditorial;
Tiene la misma salida que un simple "join":
select nombre,titulo from editoriales as e join libros as l on e.codigo=l.codigoeditorial;
"straight_join" es igual a "join", sólo que la tabla de la izquierda es leída siempre antes que la de la derecha. Puede tener sentido cuando tenemos consultas de tablas con muchos datos y los resultados con un join no nos proporciona un tiempo de ejecución eficiente.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists libros, editoriales; 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 smallint unsigned default 0, primary key (codigo) ); create table editoriales( codigo tinyint unsigned auto_increment, nombre varchar(20) not null, primary key(codigo) ); insert into editoriales (nombre) values('Paidos'); insert into editoriales (nombre) values('Emece'); insert into editoriales (nombre) values('Planeta'); insert into editoriales (nombre) values('Sudamericana'); 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,300); select l.codigo,titulo,autor,nombre from libros as l join editoriales as e on l.codigoeditorial=e.codigo; -- Igual resultado obtenemos con inner join select l.codigo,titulo,autor,nombre from libros as l inner join editoriales as e on l.codigoeditorial=e.codigo;
Genera una salida similar a esta: