Tema 2 Parte B

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

2.

4 Joins
Las consultas multitabla nos permiten consultar información en más de una tabla.
La única diferencia respecto a las consultas sencillas es que vamos a tener que
especificar en la cláusula FROM cuáles son las tablas que vamos a usar y cómo las
vamos a relacionar entre sí.
Para realizar este tipo de consultas podemos usar dos alternativas, la sintaxis de
SQL 1 (SQL-86), que consiste en realizar el producto cartesiano de las tablas y
añadir un filtro para relacionar los datos que tienen en común, y la sintaxis de SQL
2 (SQL-92 y SQL-2003) que incluye todas las cláusulas de tipo JOIN.

29
Consultas multitabla SQL 1
Composiciones cruzadas (Producto cartesiano)
El producto cartesiano de dos conjuntos, es una operación que
consiste en obtener otro conjunto cuyos elementos son todas las
parejas que pueden formarse entre los dos conjuntos.
Por ejemplo, tendríamos que tomar el primer elemento del primer
conjunto y formar una pareja con cada uno de los elementos del
segundo conjunto. Una vez hecho esto, repetimos el mismo proceso
para cada uno de los elementos del primer conjunto

30
31
Para los siguientes ejemplos se utilizará la BD
“Empleados”

32
Ejemplo
Suponemos que tenemos una base de datos con dos tablas: empleado y
departamento.

SELECT *
FROM empleado;

SELECT *
FROM departamento;

El producto cartesiano de las dos tablas se realiza con la siguiente


consulta:
SELECT *
FROM empleado, departamento;
33
Composiciones
internas
(Intersección)

La intersección de dos
conjuntos es una operación
que resulta en otro conjunto
que contiene sólo los
elementos comunes que
existen en ambos conjuntos.

34
35
36
Ejemplo
Para realizar una operación de intersección entre las dos tablas
debemos utilizar la cláusula WHERE para indicar la columna con la
que queremos relacionar las dos tablas. Por ejemplo, para obtener
un listado de los empleados y el departamento donde trabaja cada
uno podemos realizar la siguiente consulta:
SELECT *
FROM empleado, departamento
WHERE empleado.codigo_departamento = departamento.codigo

Nota: Se debe tener en cuenta que con la operación de intersección sólo obtendremos los elementos
de existan en ambos conjuntos. Por lo tanto, en el ejemplo anterior puede ser que existan filas en la
tabla empleado que no aparecen en el resultado porque no tienen ningún departamento asociado, al
igual que pueden existir filas en la tabla departamento que no aparecen en el resultado porque no
tienen ningún empleado asociado.

37
Consultas multitabla SQL 2
Composiciones cruzadas
• Producto cartesiano
– CROSS JOIN

Ejemplo de CROSS JOIN:


SELECT *
FROM empleado CROSS JOIN departamento;

Esta consulta nos devolvería el producto cartesiano de las dos tablas.

38
Composiciones internas
• Join interna
– INNER JOIN o JOIN
– NATURAL JOIN
Ejemplo de INNER JOIN:
SELECT *
FROM empleado INNER JOIN departamento
ON empleado.codigo_departamento = departamento.codigo

Esta consulta nos devolvería la intersección entre las dos tablas.


La palabra reservada INNER es opcional, de modo que la consulta anterior también se puede
escribir así:
SELECT *
FROM empleado JOIN departamento
ON empleado.codigo_departamento = departamento.codigo

39
NOTA: Tenga en cuenta que si olvidamos incluir la cláusula ON
obtendremos el producto cartesiano de las dos tablas.

Por ejemplo, la siguiente consulta nos devolverá el producto cartesiano


de las tablas empleado y departamento.
SELECT *
FROM empleado INNER JOIN departamento

40
Ejemplo de NATURAL JOIN:
SELECT *
FROM empleado NATURAL JOIN departamento

Esta consulta nos devolvería la intersección de las dos tablas, pero


utilizaría las columnas que tengan el mismo nombre para
relacionarlas. En este caso usaría las columnas código y nombre.
Sólo deberíamos utilizar una composición de tipo NATURAL JOIN
cuando estemos seguros que los nombres de las columnas sobre las
que quiero relacionar las dos tablas se llaman igual en las dos
tablas. Lo normal es que no suelan tener el mismo nombre y que
debamos usar una composición de tipo INNER JOIN.

41
Composiciones externas
• Join externa
– LEFT OUTER JOIN
– RIGHT OUTER JOIN
– FULL OUTER JOIN (No implementada en MySQL)
– NATURAL LEFT OUTER JOIN
– NATURAL RIGHT OUTER JOIN

42
43
44
Ejemplo de LEFT OUTER JOIN:
SELECT *
FROM empleado LEFT JOIN departamento
ON empleado.codigo_departamento = departamento.codigo
Esta consulta devolverá todas las filas de la tabla que hemos colocado
a la izquierda de la composición, en este caso la tabla empleado. Y
relacionará las filas de la tabla de la izquierda (empleado) con las filas
de la tabla de la derecha (departamento) con las que encuentre una
coincidencia.
Si no encuentra ninguna coincidencia, se mostrarán los valores de la
fila de la tabla izquierda (empleado) y en los valores de la tabla
derecha (departamento) donde no ha encontrado una coincidencia
mostrará el valor NULL.

45
46
47
Ejemplo de RIGHT OUTER JOIN:
SELECT *
FROM empleado RIGHT JOIN departamento
ON empleado.codigo_departamento = departamento.codigo
Esta consulta devolverá todas las filas de la tabla que hemos colocado
a la derecha de la composición, en este caso la tabla departamento. Y
relacionará las filas de la tabla de la derecha (departamento) con las
filas de la tabla de la izquierda (empleado) con las que encuentre una
coincidencia. Si no encuentra ninguna coincidencia, se mostrarán los
valores de la fila de la tabla derecha (departamento) y en los valores
de la tabla izquierda (empleado) donde no ha encontrado una
coincidencia mostrará el valor NULL.

48
Ejemplo de NATURAL LEFT JOIN:
SELECT *
FROM empleado NATURAL LEFT JOIN departamento
Esta consulta realiza un LEFT JOIN entre las dos tablas, la única
diferencia es que en este caso no es necesario utilizar la cláusula ON
para indicar sobre qué columna vamos a relacionar las dos tablas. En
este caso las tablas se van a relacionar sobre aquellas columnas que
tengan el mismo nombre.
Por lo tanto, sólo deberíamos utilizar una composición de tipo
NATURAL LEFT JOIN cuando estemos seguros de que los nombres de
las columnas sobre las que quiero relacionar las dos tablas se llaman
igual en las dos tablas.

49
El orden en las tablas no afecta al resultado final
Estas dos consultas devuelven el mismo resultado:
SELECT *
FROM empleado INNER JOIN departamento
ON empleado.codigo_departamento = departamento.codigo

SELECT *
FROM departamento INNER JOIN empleado
ON empleado.codigo_departamento = departamento.codigo

50
Podemos usar alias en las tablas
SELECT *
FROM empleado AS e INNER JOIN departamento AS d
ON e.codigo_departamento = d.codigo

SELECT *
FROM empleado e INNER JOIN departamento d
ON e.codigo_departamento = d.codigo

51
Se pueden unir tres o más tablas
Ejemplo:
SELECT *
FROM cliente INNER JOIN empleado
ON cliente.codigo_empleado_rep_ventas =
empleado.codigo_empleado
INNER JOIN pago
ON cliente.codigo_cliente = pago.codigo_cliente;

Nota: sólo es un ejemplo, las tablas aún no están creadas en la BD

52

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy