Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 04 - Lenguaje SQL 3 - Joins
Tema 04 - Lenguaje SQL 3 - Joins
Joins
Utilizando clusulas SQL es posible recuperar datos combinados de
varias tablas, unindolas entre s de dos en dos.
En Oracle existen dos formas de hacer una unin entre tablas, la
clsica, que est disponible en todas las versiones, pero no cumple
con los estandares ANSI y la estndar, que se puede usar a partir de
Oracle 9i y cumple con la regulacin SQL:1999
Clsica
Unin de Igualdad
(Equijoin)
Unin de no igualdad (NonEquijoin)
Unin externa (Outer Join)
Autounin (Self Join)
Estndar
Cross Joins
Natural Joins
Clusula USING
Full Outer Joins
Outer Joins con condiciones
arbitrarias
Producto Cartesiano
Cuando se intenta unir dos tablas y la condicin no es vlida o no
existe, se produce un producto cartesiano, que consiste en una
combinacin de las filas de las dos tablas independientemente de si
estn relacionadas o no.
Para evitar este tipo de operaciones, que son tremendamente
costosas para el servidor y ofrecen informaciones que en muy raras
ocasiones son relevantes, no se debe omitir la clusula WHERE y una
condicin vlida al unir tablas entre s.
SELECT *
FROM pais, lugar;
ID_
PAI
S
TIPO_
L UGA
R
HAB
IT A
NT E
S
ID_P
AIS
NOM
BRE
CONTIN
E NTE
ID_L
UGA
R
Espaa
Europa
18
Capri
12200
Espaa
Europa
19
Npoles
Mediterrneo
Espaa
Europa
83
Pisa
88363
Espaa
Europa
84
Venecia
268934
Espaa
Europa
85
Crcega
281000
Espaa
Europa
20
Pars
2153600
Semicontinen
tal
Espaa
Europa
21
Marsella
820900
Espaa
Europa
22
Euro
Disney
Espaa
Europa
23
Versalles
85726
NOM
BRE
(...)
La consulta devolvera un registro de la tabla lugar por cada registro
de la tabla pas, aunque no haya relacin entre ellos.
I.Unin de tablas con Sintaxis Oracle (Clsica)
CL IM
A
No mbre De l Pa s
CONTINENTE
Capri
Italia
Europa
Npoles
Italia
Europa
Pisa
Italia
Europa
Venecia
Italia
Europa
Crcega
Italia
Europa
Pars
Francia
Europa
Marsella
Francia
Europa
Euro Disney
Francia
Europa
Versalles
Francia
Europa
Londres
Reino Unido
Europa
No mbre De l Pa s
CONTINENTE
Los ngeles
Estados Unidos
Yosemite
Estados Unidos
Yucatn
Mjico
Sdney
Australia
Oceana
Melbourne
Australia
Oceana
Cairns
Australia
Oceana
Darwin
Australia
Oceana
Ayers Rock
Australia
Oceana
Kings Canyon
Australia
Oceana
Yellowstone
Estados Unidos
No mbre De l Pa s
CONTINENTE
Los ngeles
Estados Unidos
Yosemite
Estados Unidos
Yucatn
Mjico
Sdney
Australia
Oceana
Melbourne
Australia
Oceana
Cairns
Australia
Oceana
Darwin
Australia
Oceana
Ayers Rock
Australia
Oceana
Kings Canyon
Australia
Oceana
Yellowstone
Estados Unidos
NOMBRE
APELLIDO S
FECHA
NOMBRE
Lorena
Hernndez
15/11/01
Kings Canyon
Diana
Menndez
17/11/01
Florencia
Antonio
Domnguez
12/12/01
Segovia
Beatriz
Gonzlez
28/12/01
Picos de Europa
Roberto
Fernndez
15/01/02
Euro Disney
Damin
Rodrguez
20/01/02
Vladivostok
Mara
Muoz
27/01/02
Rabat
Julin
Rodrguez
22/02/02
Boston
Sofia
Martnez
23/02/02
Sdney
Jose Lus
Surez
08/03/02
Granada
NOMBRE
APELLIDO S
NUM ERO_DIA S
NOMBRE
Lorena
Hernndez
12
Vacaciones
Diana
Menndez
Puente
Antonio
Domnguez
Viaje
Beatriz
Gonzlez
Puente
Roberto
Fernndez
Vacaciones
Damin
Rodrguez
Viaje
Mara
Muoz
Viaje
Julin
Rodrguez
13
Vacaciones
Sofia
Martnez
Vacaciones
Jose Lus
Surez
Vacaciones
Pas
Lugar
Nueva Zelanda
Ecuador
Argelia
Uruguay
Alemania
Hungra
Szeged
Hungra
Budapest
Repblica Checa
Brno
Repblica Checa
Praga
Tailandia
Bangkok
NOMBRE
APELLIDOS
Alberto
Gmez
CLASE_TURISTA
Marcos
Fernndez
CLASE_TURISTA
Lorena
Hernndez
CLASE_TURISTA
Beatriz
Gonzlez
CLASE_TURISTA
Margarita
Snchez
CLASE_TURISTA
Carmen
Ruiz
CLASE_TURISTA
Natalia
Fernndez
CLASE_TURISTA
Oriol
Prez
CLASE_TURISTA
Olga
Gonzlez
CLASE_TURISTA
Alejandra
Martnez
CLASE_TURISTA
CROSS JOIN
Equivale al producto cartesiano en la unin de dos tablas.
SELECT l.nombre, p.nombre
FROM lugar l CROSS JOIN pais p;
NOMBRE
NOMBRE
Capri
Espaa
Npoles
Espaa
Pisa
Espaa
Venecia
Espaa
Crcega
Espaa
Pars
Espaa
Marsella
Espaa
Euro Disney
Espaa
Versalles
Espaa
Londres
Espaa
NATURAL JOIN
Este tipo de unin se basa en que el nombre de las columnas de las
tablas implicadas sea el mismo, adems, los tipos de dato de ambas
columnas tiene que ser tambin equivalente, de lo contrario, se
producir un error.
SELECT v.nombre, v.apellidos, vi.numero_dias
FROM viajero v NATURAL JOIN viaje vi;
NOMBRE
APELLIDOS
NUMERO_DIAS
Carmen
Ruiz
Alberto
Gmez
Beatriz
Gonzlez
11
Carlos
Vzquez
Susana
Daz
11
Roberto
Fernndez
13
Julin
Rodrguez
12
Sofia
Martnez
Jose Lus
Surez
Julin
Rodrguez
Clusula USING
Con la clusula USING, se puede especificar manualmente las
columnas de las tablas que estn implicadas en una JOIN.
SELECT p.nombre, l.nombre
FROM pais p JOIN lugar l USING(id_pais);
NOMBRE
NOMBRE
Italia
Capri
Italia
Npoles
Italia
Pisa
Italia
Venecia
Italia
Crcega
Francia
Pars
Francia
Marsella
Francia
Euro Disney
Francia
Versalles
Reino Unido
Londres
NOMBRE
NOMBRE
Capri
Italia
Npoles
Italia
Pisa
Italia
Venecia
Italia
Crcega
Italia
Pars
Francia
Marsella
Francia
Euro Disney
Francia
Versalles
Francia
Londres
Reino Unido
APELLIDO S
NUM ERO_DIA S
NOMBRE
Carmen
Ruiz
Praga
Alberto
Gmez
Kyoto
Beatriz
Gonzlez
11
San Diego
Carlos
Vzquez
Jersey
Susana
Daz
11
Combra
Roberto
Fernndez
13
Crdoba
Julin
Rodrguez
12
Darwin
Sofia
Martnez
Lisboa
Jose Lus
Surez
Granada
Julin
Rodrguez
Miami
OUTER JOIN
Las uniones externas devuelven, adems de los resultados que
cumplen las condiciones establecidas, los resultados que no las
cumplen, pudiendo especificar el sentido de la condicin.
LEFT OUTER JOIN
Recupera todos los resultados de la tabla situada a la izquierda de la
condicin, aunque no haya coincidencias con la tabla que est a la
derecha.
Lugar
Nueva Zelanda
Ecuador
Argelia
Uruguay
Alemania
Estados Unidos
Nueva York
Estados Unidos
Chicago
Estados Unidos
Yosemite
Estados Unidos
Miami
Estados Unidos
Las Vegas
Estados Unidos
Yellowstone
Estados Unidos
Washington
Lugar
Cataratas del Iguaz
Ciudad del Cabo
Ayers Rock
Cataratas del Nigara
San Diego
Versalles
Camino de Santiago
Hungra
Szeged
Hungra
Budapest
Repblica Checa
Praga
Repblica Checa
Brno
Pas
Lugar
San Diego
Camino de Santiago
Ayers Rock
Ciudad del Cabo
Hungra
Szeged
Hungra
Budapest
Repblica Checa
Brno
Repblica Checa
Praga
Tailandia
Bangkok
Ecuador
Nueva Zelanda
Sudfrica
Argelia