51 - Combinación externa completa (full join)


Problema:

Una librería almacena la información de sus libros para la venta en dos tablas, "libros" y "editoriales".

Eliminamos ambas tablas, las creamos y agregamos dos claves únicas sobre los campos "codigo" de ambas tablas:

 drop table libros;
 drop table editoriales;

 create table libros(
  codigo number(5),
  titulo varchar2(40),
  autor varchar2(30),
  codigoeditorial number(3)
 );
 create table editoriales(
  codigo number(3),
  nombre varchar2(20)
 );
 
 alter table libros
  add constraint UQ_libros_codigo
  unique (codigo);

 alter table editoriales
  add constraint UQ_editoriales_codigo
  unique (codigo);  

Ingresamos algunos registros en ambas tablas:

 insert into editoriales values(1,'Alfaragua');
 insert into editoriales values(2,'Emece');
 insert into editoriales values(3,'Siglo XXI');
 insert into editoriales values(4,'Norma');
 insert into editoriales values(null,'Sudamericana');
 
 insert into libros values(100,'El aleph','Borges',null);
 insert into libros values(101,'Martin Fierro','Jose Hernandez',1);
 insert into libros values(102,'Aprenda PHP','Mario Molina',2);
 insert into libros values(103,'Java en 10 minutos',default,4);
 insert into libros values(104,'El anillo del hechicero','Carol Gaskin',1);

Realizamos una combinación externa completa para obtener todos los registros de ambas tablas, incluyendo los libros cuyo código de editorial no existe en la tabla "editoriales" y las editoriales de las cuales no hay correspondencia en "libros":

 select titulo,nombre as editorial
  from editoriales e
  full join libros l
  on codigoeditorial = e.codigo;

Note que el libro "El aleph" cuyo valor de "codigoeditorial" es null, muestra "null" en la columna "editorial" y las editoriales "Sudamericana" y "Siglo XXI" muestran "null" en el campo "titulo".

Ingresemos el siguiente lote de comandos en el Oracle SQL Developer:

 drop table libros;
 drop table editoriales;

 create table libros(
  codigo number(5),
  titulo varchar2(40),
  autor varchar2(30),
  codigoeditorial number(3)
 );
 create table editoriales(
  codigo number(3),
  nombre varchar2(20)
 );
 
 alter table libros
  add constraint UQ_libros_codigo
  unique (codigo);

 alter table editoriales
  add constraint UQ_editoriales_codigo
  unique (codigo);  

 insert into editoriales values(1,'Alfaragua');
 insert into editoriales values(2,'Emece');
 insert into editoriales values(3,'Siglo XXI');
 insert into editoriales values(4,'Norma');
 insert into editoriales values(null,'Sudamericana');
 
 insert into libros values(100,'El aleph','Borges',null);
 insert into libros values(101,'Martin Fierro','Jose Hernandez',1);
 insert into libros values(102,'Aprenda PHP','Mario Molina',2);
 insert into libros values(103,'Java en 10 minutos',default,4);
 insert into libros values(104,'El anillo del hechicero','Carol Gaskin',1);

 select titulo,nombre as editorial
  from editoriales e
  full join libros l
  on codigoeditorial = e.codigo;

La ejecución de este lote de comandos SQL genera una salida similar a:

SQL Developer full join


Retornar