You are on page 1of 4

Tema 50.

- Combinacin externa derecha (rightJoin)


"leftjoin" la primera tabla (izquierda) es la que busca coincidencias en la segunda tabla
(derecha); en el "rightjoin" la segunda tabla (derecha) es la que busca coincidencias en
la primeratabla (izquierda).
Note: que la tabla que busca coincidencias ("editoriales") est en primer lugar porque es
un "leftjoin"; en el "rightjoin" precedente, estaba en segundo lugar.
Un "rightjoin" hace coincidir registros en una tabla (derecha) con otra tabla (izquierda);
si un valor de la tabla de la derecha no encuentra coincidencia en la tabla izquierda, se
genera una fila extra (una por cada valor no encontrado) con todos los campos
correspondientes a la tabla izquierda seteados a "null". La sintaxis bsica es la siguiente:
select CAMPOS
from TABLAIZQUIERDA
rightjoin TABLADERECHA
on CONDICION;

Problema:
Una librera almacena la informacin de sus libros para la venta en dos tablas, "libros" y
"editoriales".
Eliminamos ambas tablas, las creamos y agregamos dos restricciones "primarykey"
sobre los
campos "cdigo" de las dos tablas:
drop table libros;
drop table editoriales;
createtable libros(
codigonumber(5),
titulo varchar2(40),
autor varchar2(30),
codigoeditorialnumber(3)
);

createtable editoriales(
codigonumber(3),
nombre varchar2(20)
);

alter table libros


add constraint PK_libros
primarykey(codigo);

alter table editoriales


add constraint PK_editoriales
primarykey(codigo);

Ingresamos algunos registros en ambas tablas:


insert into editoriales values(1,'Planeta');
insert into editoriales values(2,'Emece');

Tema 50.- Combinacin externa derecha (rightJoin)


insert into editoriales values(3,'Siglo XXI');
insert into editoriales values(4,'Norma');
insert into libros values(100,'El aleph','Borges',1);
insert into libros values(101,'Martin Fierro','Jose Hernandez',1);
insert into libros values(102,'Aprenda PHP','Mario Molina',2);
insertinto libros values(103,'Java en 10 minutos',null,4);
insertinto libros values(104,'El anillo del hechicero','Carol Gaskin',4);
Solicitamos el ttulo y nombre de la editorial de los libros empleando un "rightjoin":
selecttitulo,nombre as editorial
from libros l
rightjoin editoriales e
oncodigoeditorial = e.codigo;
Las editoriales de las cuales no hay libros, es decir, cuyo cdigo de editorial no est
presente en "libros" aparece en el resultado, pero con el valor "null" en el campo
"titulo"; caso de la editorial "Siglo XXI".
Realizamos la misma consulta anterior agregando un "where" que restringa el resultado
considerando solamente los registros que encuentran coincidencia en la tabla izquierda:
selecttitulo,nombre as editorial
from libros l
rightjoin editoriales e
one.codigo=codigoeditorial
wherecodigoeditorialisnotnull;
Ya no aparece la editorial "Siglo XXI".
Mostramos las editoriales que NO estn presentes en "libros" (que NO encuentran
coincidencia en"editoriales"):
select nombre
from libros l
rightjoin editoriales e
one.codigo=codigoeditorial
wherecodigoeditorialisnull;
Solamente aparece la editorial "Siglo XXI"

Primer problema:
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin
tiene una tabla "provincias" donde registra los nombres de las provincias.
1- Elimine las tablas "clientes" y "provincias" y crelas:

Tema 50.- Combinacin externa derecha (rightJoin)


drop table clientes;

drop table provincias;

createtable clientes (
codigonumber(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincianumber(2),
primary key(codigo)
);

createtable provincias(
codigonumber(2),
nombre varchar2(20),
primary key (codigo)
);

2- 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 clientes values (101,'Lopez Marcos','Colon 111','Crdoba',1);
insert into clientes values (102,'Perez Ana','San Martin 222','Cruz del Eje',1);
insertinto clientes values (103,'Garcia Juan','Rivadavia 333','VillaMaria',1);
insertinto clientes values (104,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (105,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (106,'Torres Fabiola','Alem 777','La Plata',4);
insert into clientes values (107,'Garcia Luis','Sucre 475','Santa Rosa',5);
3- Muestre todos los datos de los clientes, incluido el nombre de la provincia empleando
un "rightjoin".
selectc.nombre,domicilio,ciudad,
p.nombre
from provincias p
right join clientes c
oncodigoprovincia = p.codigo;

4- Obtenga la misma salida que la consulta anterior pero empleando un "leftjoin".


selectc.nombre,domicilio,ciudad,
p.nombre
from clientes c
left join provincias p
oncodigoprovincia = p.codigo;

5- Empleando un "rightjoin", muestre solamente los clientes de las provincias que


existen en
"provincias" (5 registros)

Tema 50.- Combinacin externa derecha (rightJoin)


selectc.nombre,domicilio,ciudad,
p.nombre
from provincias p
right join clientes c
on codigoprovincia = p.codigo
where p.codigo is not null;
6- Muestre todos los clientes cuyo cdigo de provincia NO existe en "provincias"
ordenados porciudad (2 registros)
selectc.nombre,domicilio,ciudad,
p.nombre
from provincias p
right join clientes c
on codigoprovincia = p.codigo
where p.codigo is null
order by ciudad;