PDF de programación - Lenguaje SQL - Joins

Imágen de pdf Lenguaje SQL - Joins

Lenguaje SQL - Joinsgráfica de visualizaciones

Publicado el 10 de Mayo del 2017
1.393 visualizaciones desde el 10 de Mayo del 2017
133,0 KB
13 paginas
Creado hace 15a (30/09/2008)
Lenguaje SQL

Joins

Utilizando cláusulas SQL es posible recuperar datos combinados de
varias tablas, uniéndolas entre sí de dos en dos.

En Oracle existen dos formas de hacer una unión entre tablas, la
clásica, que está disponible en todas las versiones, pero no cumple
con los estandares ANSI y la estándar, que se puede usar a partir de
Oracle 9i y cumple con la regulación SQL:1999


Clásica
Unión de Igualdad
(Equijoin)
Unión de no igualdad (Non-
Equijoin)
Unión externa (Outer Join)
Autounión (Self Join)



Estándar
Cross Joins

Natural Joins

Cláusula USING
Full Outer Joins
Outer Joins con condiciones
arbitrarias

Producto Cartesiano

Cuando se intenta unir dos tablas y la condición no es válida o no
existe, se produce un producto cartesiano, que consiste en una
combinación de las filas de las dos tablas independientemente de si
están 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 cláusula WHERE y una
condición válida al unir tablas entre sí.

SELECT *
FROM pais, lugar;



ID_ P
AIS

NO M
BRE

CON TIN
E NTE

ID_ L
UG A

R

ID_
P AI
S

1

1

1

1

1

1

1

1

1

España

Europa

España

Europa

España

España

España

Europa

Europa

Europa

España

Europa

España

Europa

España

Europa

España

Europa

18

19

83

84

85

20

21

22

23

3

3

3

3

3

4

4

4

4

NO M
BRE

Capri

Nápoles

Pisa

Venecia

Córcega

París

Marsella

Euro
Disney

Versalles

TIP O_
L UG A

R

H AB
IT A
NT E

S

CL IM

A

3

5

1

1

5

1

3

6

1

12200

-

-

Mediterráneo

88363

268934

281000

2153600

820900

-

85726

-

-

-

Semicontinen
tal

-

-

-


(...)

La consulta devolvería un registro de la tabla lugar por cada registro
de la tabla país, aunque no haya relación entre ellos.


I.Unión de tablas con Sintaxis Oracle (Clásica)

SELECT tabla1.columna1, tabla2.columna2
FROM tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna2;


Para unir tablas utilizando la sintáxis propia de Oracle, se deben
especificar en el FROM las tablas implicadas en la unión y en el
WHERE la condición o condiciones de unión entre ellas.
En la cláusula SELECT es recomendable especificar el nombre
cualificado de las columnas recuperadas, es decir, se debe especificar
el nombre de la columna, precedido por el de la tabla propietaria de
la misma. En caso de que la columna tenga el mismo nombre en
varias tablas, los nombres cualificados son obligatorios.

Si se quiere unir varias tablas, es necesario relacionarlas todas entre
sí, es decir, que cada tabla aparezca al menos en alguna de las
condiciones de unión.



Unión de Igualdad (Equijoin)

Este tipo de unión implica que los valores de las columnas utilizadas
en la condición de unión deben ser iguales.
Es el tipo de unión que se suele producir entre tablas relacionadas
por una clave primaria y una clave ajena.

SELECT lugar.nombre AS "Nombre del lugar",

FROM pais, lugar
WHERE pais.id_pais = lugar.id_pais;



pais.nombre as "Nombre del País", pais.continente

No mb re Del Lug a r No mb re De l Pa ís CONT I NENT E

Capri

Nápoles

Pisa

Venecia

Córcega

París

Marsella

Euro Disney

Versalles

Londres

Italia

Italia

Italia

Italia

Italia

Francia

Francia

Francia

Francia

Reino Unido

Europa

Europa

Europa

Europa

Europa

Europa

Europa

Europa

Europa

Europa


En la cláusula SELECT se especifican las columnas, alias y/o
expresiones, cualificadas con el nombre de la tabla correspondiente.
En la cláusula FROM se especifican las tablas implicadas, separadas
por comas.
En la cláusula WHERE se especifica la condición o condiciones de
unión entre las tablas, con los nombres de las columnas implicadas
también cualificados.

Es posible especificar tantas cláusulas de restricción en el WHERE
como se necesite, utilizando las cláusulas tipo AND y OR.



pais.nombre as "Nombre del País", pais.continente

SELECT lugar.nombre AS "Nombre del lugar",

FROM pais, lugar
WHERE pais.id_pais = lugar.id_pais
AND continente IN ('América del Norte','Oceanía');


No mb re Del Lug a r No mb re De l Pa ís CONT I NENT E

Los Ángeles

Yosemite

Yucatán

Sídney

Melbourne

Cairns

Darwin

Ayers Rock

Kings Canyon

Yellowstone

Estados Unidos

Estados Unidos

Méjico

Australia

Australia

Australia

Australia

Australia

Australia

América del Norte

América del Norte

América del Norte

Oceanía

Oceanía

Oceanía

Oceanía

Oceanía

Oceanía

Estados Unidos

América del Norte


Es posible simplificar la sintaxis de las consuiltas Join utilizando alias
para las tablas implicadas, de forma que no es necesario escribir el
nombre de la tabla para cualificar sus columnas, basta con especificar
el alias.

SELECT l.nombre AS "Nombre del lugar",

FROM pais p, lugar l
WHERE p.id_pais = l.id_pais
AND p.continente IN ('América del Norte','Oceanía');


p.nombre as "Nombre del País", p.continente

No mb re Del Lug a r No mb re De l Pa ís CONT I NENT E

Los Ángeles

Yosemite

Yucatán

Sídney

Melbourne

Cairns

Darwin

Ayers Rock

Kings Canyon

Yellowstone

Estados Unidos

Estados Unidos

Méjico

Australia

Australia

Australia

Australia

Australia

Australia

América del Norte

América del Norte

América del Norte

Oceanía

Oceanía

Oceanía

Oceanía

Oceanía

Oceanía

Estados Unidos

América del Norte


Una vez que se especifica el alias para la tabla, no puede usarse el
nombre original en esa consulta, debe utilizarse siempre el alias
asignado.

Los alias pueden tener hasta 30 caracteres de largo, pero se
recomienda utilizar nombres lo mas cortos y descriptivos posible.
Cuando se asigna un alias a una tabla para una SELECT, el alcance de
dicho alias se restringe a la cláusula SELECT concreta, si se hace una
nueva consulta, el alias no sería válido.

Unión de más de dos tablas.

Para unir un número n de tablas, es necesario tener, por lo menos n-
1 condiciones de unión entre ellas.

SELECT v.nombre, v.apellidos, vi.fecha, lu.nombre
FROM viajero v, viaje vi, lugar lu
WHERE v.id_viajero = vi.id_viajero
AND vi.id_lugar = lu.id_lugar
ORDER BY fecha;



NOM B RE APELL IDO S

FECH A NOM B RE

Lorena

Diana

Antonio

Beatriz

Roberto

Damián

María

Julián

Sofia

Jose Luís

Hernández

Menéndez

Domínguez

González

Fernández

Rodríguez

Muñoz

Rodríguez

Martínez

Suárez

15/11/01

17/11/01

12/12/01

28/12/01

15/01/02

20/01/02

27/01/02

22/02/02

23/02/02

08/03/02

Kings Canyon

Florencia

Segovia

Picos de Europa

Euro Disney

Vladivostok

Rabat

Boston

Sídney

Granada



Unión de no igualdad (Non-Equijoin)

Son un tipo de unión no muy utilizado, que une dos tablas por una
condición diferente a la de igualdad

SELECT v.nombre, v.apellidos, vi.numero_dias, t.nombre
FROM viajero v, viaje vi, tipo_estancia t
WHERE v.id_viajero = vi.id_viajero
AND vi.numero_dias BETWEEN t.dia_desde AND t.dia_hasta
ORDER BY fecha;



NOMB RE APELL IDO S NUM ERO_ DIA S NOM B RE

Lorena

Diana

Antonio

Beatriz

Roberto

Damián

María

Julián

Sofia

Jose Luís

Hernández

Menéndez

Domínguez

González

Fernández

Rodríguez

Muñoz

Rodríguez

Martínez

Suárez

12

4

6

3

9

6

6

13

9

9

Vacaciones

Puente

Viaje

Puente

Vacaciones

Viaje

Viaje

Vacaciones

Vacaciones

Vacaciones



Uniones Externas (Outer Join)

Los registros que no cumplen las condiciones de unión entre las
tablas, no aparecen en los resultados de las consultas, sin embargo,
es posible mostrar estos registros utilizando las uniones externas.

Estas uniones muestran tanto los registros que cumplen las
condiciones como los que no las cumplen, mostrando la información
que falta como valores nulos.

SELECT tabla1.columna1, tabla2.columna2
FROM tabla1, tabla2
WHERE tabla1.columna1(+) = tabla2.columna2;


SELECT tabla1.columna1, tabla2.columna2
FROM tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna2(+);


El operador que marca la unión externa en el modo SQL clásico de
oracle es el (+), que se coloca junto a la condición de unión que tiene
información insuficiente, es decir junto a la columna de la tabla débil.

SELECT p.nombre AS "País", l.nombre AS "Lugar"
FROM pais p, lugar l
WHERE p.id_pais = l.id_pais(+)
ORDER BY l.id_pais DESC;



Pa ís

L ug a r

Nueva Zelanda

Ecuador

Argelia

Uruguay

Alemania

Hungría

Hungría

-

-

-

-

-

Szeged

Budapest

República Checa

Brno

República Checa

Praga

Tailandia

Bangkok


El operador de unión externa (+) solamente puede aparecer en un
lado de la igualdad y no puede utilizarse con operadores IN ni
condiciones OR.

SELECT p.nombre AS "País", l.nombre AS "Lugar"
FROM pais p, lugar l
WHERE p.id_pais = l.id_pais(+)
OR p.nombre = 'Ecuador'
ORDER BY l.id_pais DESC;

ORA-01719: operador de unión externa (+) no permitido en operando OR ni IN

Autouniones (Self Join)

En ocasiones puede ser necesario unir una tabla consigo misma para
obtener un resultado determinado, para ello, se debe instar la tabla
dos veces en la cláusula FROM, asignándole un alias diferente.

Por ejemplo, para obtener todos los viajeros del mismo perfil que
Beatriz González, deberemos unir la tabla viajeros consigo misma:

SELECT v1.nombre, v1.apellidos, v1.perfil_viajero
FROM viajero v1, viajero v2
WHERE v1.perfil_viajero = v2.perfil_viajero
AND v2.nombre = 'Beatriz'
AND v2.apellidos = 'González';



NOM B RE APELL IDO S

P ERF IL_ V IAJ ERO

Alberto

Marcos

Lorena

Beatriz

Margarita

Carmen

Natalia

Oriol

Olg
  • Links de descarga
http://lwp-l.com/pdf3477

Comentarios de: Lenguaje SQL - Joins (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad