∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se...

62
USO DE LOS JOINS EN MYSQL

Transcript of ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se...

Page 1: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

USO DE LOS JOINS EN MYSQL

Page 2: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

∞ Un JOIN se utiliza para consultar datos de más de una tabla

∞ La condición de JOIN se escribe en la cláusula WHERE.

∞ Si existen columnas con el mismo nombre en las tablas

seleccionadas, se deberán nombrar los campos

Un join es una operación que relaciona dos o más tablas para obtener un resultado que incluya datos (campos y registros) de ambas

Page 3: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

TIPOS DE JOINS

Page 4: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Existen dos tipos principales de JoinEquijoin

Non-equijoinY dos mas adicionales

Outer joinSelf join

TIPOS DE JOIN’S

Page 5: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Este se utiliza por ejemplo en estos esquemas

Select e.empno, e.ename, e.job, d.dname  

From   emp e,  dept d  

Where  e.deptno = d.deptno;

EJEMPLO DE EQUIJOIN

Page 6: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

EQUIJOIN  Join sobre dos o más tablas, por igualdad de campos.

Select emp.empno, emp.ename, emp.deptno,

dept.deptno, dept.loc

From emp,dept

Where emp.deptno = dept.deptno;

Ya que la columna DEPTNO es igual en ambas tablas esta debe de ir prefijada por el nombre de la tabla para evitar

ambigüedad

EJEMPLO DE EQUIJOIN

Page 7: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

También llamado natural Join, es un caso donde solo se usan operadores de igualdad para las condiciones de Join

Select emp.ename, dept.dname

From emp, deptWhere emp.deptno = dept.deptno

Select emp.ename, dept.dnameFrom emp

NATURAL JOIN dept on emp.deptno = dept.deptno

EJEMPLO DE EQUIJOIN

Page 8: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

EJEMPLO DE EQUIJOIN

Store_name Sales Txn_date

Los Angeles 1500 05-Jan-1999

San Diego 2500 07-Jan-1999

Los Angeles 3000 08-Jan-1999

Boston 7000 08-Jan-1999

Tabla Store_Information

Region_name Store_name

East Boston

East New York

Wets Los Angeles

West San Diego

Tabla Geography

Page 9: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

y queremos saber las ventas por región.

Al examinar las dos tablas, encontramos que están enlazadas a través del campo común “nombre_negocio”

Entonces la sentencia SQL quedaría de la siguiente manera:

EJEMPLO DE EQUIJOIN

Page 10: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

SELECT A1.Region_Name REGION, SUM(A2.Sales) SALES

FROM Geography A1, Store_Information A2WHERE A1.Store_Name = A2.Store_Name

GROUP BY A1.Region_Name;

Resultado:

EJEMPLO DE EQUIJOIN

Region Sales

East 700

West 2050

Page 11: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

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

Select e.ename, e.sal, s.grade

From emp e, salgrade s

Where e.sal between s.losal and s.hisal

EJEMPLO DE NON-EQUIJOIN

Page 12: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

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;

EJEMPLO DE NON-EQUIJOIN

Page 13: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select e.ename, d.deptno, d.dname

From emp e, dept d

Where e.deptno(+) = d.deptno

Order by e.deptno;

En este ejemplo se muestran los números y nombres de TODOS los departamentos incluidos aquellos que no tienen empleados

Si se añade AND emp.deptno is null, solo se mostrarán las no coincidencias

EJEMPLO DE OUTER JOIN

Page 14: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

 ¿Qué sucede en los casos donde estamos interesados en la selección de elementos en una tabla sin importar si se encuentran presentes en la segunda tabla? Ahora necesitaremos utilizar el comando SQL OUTER JOIN.

MÁS EJEMPLOS DE OUTER JOIN

Page 15: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Se colocará un "(+)" en la cláusula WHERE del otro lado de la tabla para la que queremos incluir todas las filas.

Ejemplo en la siguiente lamina:

MÁS EJEMPLOS DE OUTER JOIN

Page 16: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

SELECT A1.Store_Name, SUM(A2.Sales) SALESFROM Geography A1, Store_Information A2

WHERE A1.Store_Name = A2.Store_Name (+)GROUP BY A1.Store_Name;

Resultado

MÁS EJEMPLOS DE OUTER JOIN

Store_name Sales

Boston 700

New York

Los Angeles 1800

San Diego 250

Page 17: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select trabajador.ename || ‘ trabaja para ‘ || jefe.ename

From emp trabajador emp jefe

Where trabajador.mgr = jefe.empno;

En este ejemplo la clausula where contiene la combinación “donde un jefe de un trabajador coincide con el número de empleado para el jefe”

EJEMPLO DE SELF JOIN

Page 18: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Create table libros(

Codigo number (4),

Titulo varchar2 (40) not null,

Autor varchar2 (30),

Codigoeditorial number (3) not null,

Precio number (5,2),

Primary key (codigo));

EJEMPLO BASES DE DATOS

Page 19: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Create table editoriales(

Codigo number (3),

Nombre varchar2(20) not null,

Primary key(codigo));

Y LA SEGUNDA

Page 20: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select * from libros;

En el campo editorial aparece el código pero no sabemos el nombre de la editorial, necesitamos consultar ambas tablas

CONSULTAS

Page 21: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select *

From libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

HAGAMOS UN JOIN

Page 22: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Un join es una operación que relaciona dos o más tablas para obtener un resultado que incluya datos (campos y registros) de ambas; las tablas participantes se combinan según los campos comunes a ambas tablas.

JOIN

Page 23: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

1. combinaciones internas (inner join o join),

2. combinaciones externas

3. combinaciones cruzadas.

HAY TRES TIPOS DE COMBINACIONES:

Page 24: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select * from libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

especificamos los campos que aparecerán en el resultado en la lista de selección;

Indicamos el nombre de la tabla luego del “from” (“libros”);

Combinamos esta tabla con “join”y el nombre de la otra tabla (“editoriales”) se especifica que tablas se vana a

combinar y cómo

ANALICEMOS

Page 25: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select * from libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

Combinamos esta tabla con “join”y el nombre de la otra tabla (“editoriales”) se especifica que tablas se vana a

combinar y cómo

 Se debe especificar la condición para enlazarlas, es decir, el campo por el cual se combinarán, que tienen en común con

“ON”

ANALICEMOS

Page 26: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select * from libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

En el ejemplo, si no especificamos "editoriales.codigo" y solamente tipeamos "codigo", Oracle no sabrá si nos referimos al campo "codigo" de "libros" o de "editoriales" y mostrará un mensaje de error indicando que "codigo" es ambiguo.

ANALICEMOS

Page 27: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select * from libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

Se puede incluir en la consulta join la cláusula "where" para restringir los registros que retorna el resultado; también

"order by", "distinct", etc..

ANALICEMOS

Page 28: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select * from libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

Se emplea este tipo de combinación para encontrar registros de la primera tabla que se correspondan con los registros de la otra, es decir, que cumplan la condición del "on". Si un valor de la primera tabla no se encuentra en la segunda tabla, el registro no aparece; si en la primera tabla el valor es nulo, tampoco aparece.

ANALICEMOS

Page 29: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

AnalicemosSelect *

From libros

Join editoriales

On libros.codigoeditorial = editoriales.codigo;

Select l.codigo, titulo, autor, nombre

From libros l

Join editoriales e

On l.codigoeditorial = e.codigo;

Page 30: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Es aquel en el que se unen dos tablas A y B. En esta unión se incluyen todos los registros de A aunque no satisfagan la condición.

Para hacer esto, se puede usar el Left Outer Join o el operador (+) en todas las columnas de B en la parte Where. Ejemplo:

Left Join

Page 31: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select e.empno, e.ename, e.job, d.dname  

From   emp e

left outer join dept d

On e.deptno = d.deptno;

Select e.empno, e.ename, e.job, d.dname  

From   emp  e, dept d

Where  e.deptno = d.deptno (+);

Left Join

Page 32: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Si queremos saber qué registros de una tabla NO encuentran correspondencia en la otra, es decir, no existe valor coincidente en la segunda, necesitamos otro tipo de combinación, "outer join" (combinación externa).

Las combinaciones externas combinan registros de dos tablas que cumplen la condición, más los registros de la

segunda tabla que no la cumplen; es decir, muestran todos los registros de las tablas relacionadas, aún cuando no haya

valores coincidentes entre ellas.

Left Join

Page 33: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Las combinaciones externas se realizan solamente entre 2 tablas.

Hay tres tipos de combinaciones externas: "left outer join", "right outer join" y "full outer join"; se pueden abreviar con "left join", "right join" y "full join" respectivamente.

Left Join

Page 34: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Se emplea una combinación externa izquierda para mostrar todos los registros de la tabla de la izquierda. Si no encuentra coincidencia con la tabla de la derecha, el registro muestra los campos de la segunda tabla seteados a "null".

Select titulo,nombre

From editoriales e

left join libros l

On codigoeditorial = e.codigo;

Left Join

Page 35: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select titulo,nombre

From editoriales e

left join libros l on codigoeditorial = e.codigo;

El resultado mostrará el título y nombre de la editorial; las editoriales de las cuales no hay libros, es decir, cuyo código de editorial no está presente en "libros" aparece en el resultado, pero con el valor "null" en el campo "titulo".

Left Join

Page 36: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Es importante la posición en que se colocan las tablas en un "left join", la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha.

En el siguiente ejemplo solicitamos el título y el nombre la editorial, la sentencia es similar a la anterior, la diferencia está en el orden de las tablas:

Left Join

Page 37: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select titulo,nombre

From libros l

left join editoriales e

On codigoeditorial = e.codigo;

El resultado mostrará el título del libro y el nombre de la editorial; los títulos cuyo código de editorial no está presente en "editoriales" aparecen en el resultado, pero con el valor "null" en el campo "nombre".

Left Join

Page 38: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Un "left join" puede tener clausula "where" que restringa el resultado de la consulta considerando solamente los registros que encuentran coincidencia en la tabla de la derecha, es decir, cuyo valor de código está presente en "libros":

select titulo,nombre

From editoriales e

left join libros l

On e.codigo=codigoeditorial

Where codigoeditorial is not null;

Left Join

Page 39: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

También podemos mostrar las editoriales que NO están presentes en "libros", es decir, que NO encuentran coincidencia en la tabla de la derecha:

Select titulo,nombre

From editoriales e

left join libros l

On e.codigo=codigoeditorial

Where codigoeditorial is null;

Left Join

Page 40: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Es aquel en el que se unen dos tablas A y B. En esta unión se incluyen todos los registros de B aunque no satisfagan la condición. Para hacer esto, se puede usar el Right Outer Join o el operador (+) en todas las columnas de A en la parte Where. Ejemplo:

right outer join o right join

Page 41: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select e.empno, e.ename, e.job, d.dname

From   emp e right

outer join dept d

On e.deptno = d.deptno;

Select e.empno, e.ename, e.job, d.dname  

From   emp  e,  dept d  

Where  e.deptno (+) = d.deptno;

right outer join o right join

Page 42: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Una combinación externa derecha opera del mismo modo sólo que la tabla derecha es la que localiza los registros en la tabla izquierda.

Select titulo,nombre as editorial

From libros l

right join editoriales e

On codigoeditorial = e.codigo;

right outer join o right join

Page 43: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Es FUNDAMENTAL tener en cuenta la posición en que se colocan las tablas en los "outer join". En un "left join" la primera tabla (izquierda) es la que busca coincidencias en la segunda tabla (derecha); en el "right join" la segunda tabla (derecha) es la que busca coincidencias en la primera tabla (izquierda).

right outer join o right join

Page 44: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

En la siguiente consulta empleamos un "left join" para conseguir el mismo resultado que el "right join" anterior":

Select titulo,nombre

From editoriales e

left join libros l

On codigoeditorial = e.codigo;

right outer join o right join

Page 45: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Note que la tabla que busca coincidencias ("editoriales") está en primer lugar porque es un "left join"; en el "right join" precedente, estaba en segundo lugar.

right outer join o right join

Page 46: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Un "right join" también puede tener cláusula "where" que restringa el resultado de la consulta considerando solamente los registros que encuentran coincidencia en la tabla izquierda:

Select titulo,nombre

From libros l

right join editoriales e

On e.codigo=codigoeditorial

Where codigoeditorial is not null;

right outer join o right join

Page 47: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Mostramos las editoriales que NO están presentes en "libros", es decir, que NO encuentran coincidencia en la tabla de la derecha empleando un "right join":

Select titulo,nombre

From libros l

right join editoriales e

On e.codigo=codigoeditorial

Where codigoeditorial is null;

right outer join o right join

Page 48: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Finalmente, este join es la combinación del right outer join y el left outer join; mostrándonos la información de ambas tablas unidas A y B no importando que haya registros que no satisfagan la condición. Para realizar esto, se usa la cláusula Full Outer Join o un Union con los dos querys del operador (+) como se puede apreciar en los ejemplos siguientes:

full outer join o full join

Page 49: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select e.empno, e.ename, e.job, d.dname  

From   emp e full outer join dept d

On     e.deptno = d.deptno;

Select e.empno, e.ename, e.job, d.dname  

From   emp  e, dept d  

Where  e.deptno (+) = deptno

Union  

Select e.empno, e.ename, e.job, d.dname  

From   emp  e, dept d  

Where  e.deptno = d.deptno (+);

full outer join o full join

Page 50: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Una combinación externa completa retorna todos los registros de ambas tablas. Si un registro de una tabla izquierda no encuentra coincidencia en la tabla derecha, las columnas correspondientes a campos de la tabla derecha aparecen seteadas a "null", y si la tabla de la derecha no encuentra correspondencia en la tabla izquierda, los campos de esta última aparecen conteniendo "null".

full outer join o full join

Page 51: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select titulo,nombre

From editoriales e

full join libros l

On codigoeditorial = e.codigo;

La salida del "full join" precedente muestra 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".

full outer join o full join

Page 52: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Las combinaciones cruzadas muestran todas las combinaciones de todos los registros de las tablas combinadas. Para este tipo de join no se incluye una condición de enlace. Se genera el producto cartesiano en el que el número de filas del resultado es igual al número de registros de la primera tabla multiplicado por el número de registros de la segunda tabla, es decir, si hay 3 registros en una tabla y 4 en la otra, retorna 12 filas.

cross join

Page 53: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select c.nombre as "plato principal", p.nombre as "postre"

From comidas c cross join postres p;

Este tipo de join no es muy utilizado.

cross join

Page 54: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Es un join de una tabla consigo misma. Se realiza de manera similar a un join normal; la diferencia sustancial, reside en que será comparada y unida por algún campo de la misma tabla. Un ejemplo claro de esto, es cuando se quiere mostrar el jefe de cada empleado en nuestra tabla emp 

Self Join

Page 55: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Select emp.empno, emp.ename, emp.job, mgr.ename, mgr.job

From   emp emp, emp mgr

Where  emp.mgr = mgr.empno;

Self Join

Page 56: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Un pequeño restaurante tiene almacenadas sus comidas en una tabla llamada "comidas" que consta de los siguientes campos:

nombre varchar(20),

precio decimal (4,2) y

rubro char(6) -- que indica con 'plato' si es un plato principal y 'postre' si es postre

Self Join

Page 57: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Podemos obtener la combinación de todos los platos empleando un "cross join" con una sola tabla:

Select c1.nombre, c2.nombre, c1.precio+c2.precio as total

From comidas c1

Cross join comidas c2;

Self Join

Page 58: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

En la consulta anterior aparecerán filas duplicadas, para evitarlo debemos emplear un "where":

select c1.nombre as "plato principal", c2.nombre as postre, c1.precio+c2.precio as total

From comidas c1

Cross join comidas c2

Where c1.rubro='plato' and c2.rubro='postre';

Self Join

Page 59: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

También se puede realizar una autocombinación con "join":

select c1.nombre as "plato principal", c2.nombre as postre, c1.precio+c2.precio as total

From comidas c1 join comidas c2

On c1.codigo<>c2.codigo where c1.rubro='plato' and c2.rubro='postre';

Self Join

Page 60: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Para resumir hemos llamado T1 y T2 las tablas de las que queremos sacar los datos y R la tabla lógica que representa el resultado de consulta. T1 y T2 podrían ser tablas guardadas o consultas.

En la última parte cuando se pregunta "En T1 hay filas que no tienen pareja en T2", la pregunta se debe de interpretar como "en alguna de las tablas hay filas que no tienen pareja".

Conclusiones

Page 61: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Conclusiones

Page 62: ∞ Un JOIN se utiliza para consultar datos de más de una tabla ∞ La condición de JOIN se escribe en la cláusula WHERE. ∞ Si existen columnas con el mismo.

Los Joins son muy útiles para traer información de dos o más tablas y poder combinar la información que reside en ellas.

Un abuso o mal uso de ellos sin embargo, puede causar dolores serios de cabeza. Para saber si estamos haciendo o

no un buen query, requerimos acudir a nuestro plan de ejecución y/o algún trace para saber si realmente, es

correcto lo que estamos construyendo.

Conclusiones