Está en la página 1de 3

BASES DE DATOS 2020-1

Ejemplos aplicados de consultas multitabla

FUNCIONES LEFT JOIN y RIGHT JOIN

Como hemos visto los operadores LEFT JOIN y RIGHT JOIN son otro tipo
de composición de tablas, también denominada composición externa.
Son una extensión del INNER JOIN.

Las composiciones vistas básica ( INNER JOIN) es composición interna ya


que todos los valores de las filas del resultado son valores que están en
las tablas que se combinan.

Con una composición interna sólo se obtienen las filas que tienen al
menos una fila de la otra tabla que cumpla la condición, veamos un
ejemplo:

Queremos combinar los estudiantes con los programas para saber la


ciudad del programa donde esta inscrito cada estudiante, si utilizamos un
producto cartesiano tenemos:

SELECT estudiante.*,ciudad
FROM estudiante, programa
WHERE estudiante.programa = programa.ciudad

Con esta sentencia los estudiante que no tienen una ciudad asignada (un
valor nulo en el campo ciudad de la tabla estudiante) no aparecen en el
resultado .

Si utilizamos el INNER JOIN:


BASES DE DATOS 2020-1

SELECT estudiante.*, ciudad


FROM estudiantes INNER JOIN programas ON estudiante.programa =
programa.ciudad

Pues en los casos en que queremos que también aparezcan las filas que no
tienen una fila coincidente en la otra tabla, utilizaremos el LEFT o RIGHT
JOIN.

La descripción de la sintaxis es la misma que la del INNER JOIN (ver página


anterior), lo único que cambia es la palabra INNER por LEFT .

Esta operación consiste en añadir al resultado del INNER JOIN las filas de
la tabla de la izquierda que no tienen correspondencia en la otra tabla,
y rellenar en esas filas los campos de la tabla de la derecha con valores
nulos.

Ejemplo:

SELECT *FROM estudiantes LEFT JOIN programas ON estudiante.ciudad =


programa.ciudad

La sintaxis es la misma que la del INNER JOIN (ver página anterior), lo único
que cambia es la palabra INNER por RIGHT (derecha en inglés).

Esta operación consiste en añadir al resultado del INNER JOIN las filas de la
tabla de la derecha que no tienen correspondencia en la otra tabla,rellenar
en esas filas los campos de la tabla de la izquierda con valores nulos.
BASES DE DATOS 2020-1

Ejemplo:

SELECT *FROM estudiantes RIGHT JOIN programa ON estuadiante.ciudad =


programa.ciudad

Con el ejemplo anterior obtenemos una lista de los estudiantes con los
datos de su programa, y además aparece una fila por cada programa que no
está asignado a ningún estudiante con los datos del estudiante a nulos.

Una operación LEFT JOIN o RIGHT JOIN se puede anidar dentro de una
operación INNER JOIN, pero una operación INNER JOIN no se puede anidar
dentro de LEFT JOIN o RIGHT JOIN. Los anidamientos de JOIN de distinta
naturaleza no funcionan siempre, a veces depende del orden en que
colocamos las tablas, en estos casos lo mejor es probar y si no permite el
anudamiento, cambiar el orden de las tablas ( y por tanto de los JOINs)
dentro de la cláusula FROM.

Por ejemplo podemos tener:

SELECT *FROM materias INNER JOIN (estudiantes LEFT JOIN programas ON


estudiantes.programa = programas.programa) ON materias.repmat =
estudiantes.nummat

Combinamos estudiantes con programas para obtener los datos del


programa de cada estudiante, y luego añadimos las materias de cada
representante, así obtenemos los materias que tienen un representante
asignado y los datos de la programa del representante asignado.

También podría gustarte