|
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 (izquierda
en inglés). 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 empleados LEFT JOIN oficinas ON empleados.oficina = oficinas.oficina
Con el ejemplo anterior obtenemos una lista de los empleados
con los datos de su oficina, y el empleado 110 que no tiene oficina aparece
con sus datos normales y los datos de su oficina a nulos.
La sintaxis del RIGHT JOIN
es la siguiente:

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, y rellenar
en esas filas los campos de la tabla
de la izquierda con valores
nulos. Ejemplo: SELECT *
FROM empleados RIGHT JOIN oficinas ON empleados.oficina = oficinas.oficina Con el ejemplo anterior obtenemos una lista de los
empleados con los datos de su oficina, y además aparece una fila
por cada oficina que no está asignada a ningún empleado
con los datos del empleado 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 clientes INNER JOIN (empleados LEFT JOIN oficinas ON empleados.oficina
= oficinas.oficina) ON clientes.repclie = empleados.numclie Combinamos empleados con oficinas para obtener los datos
de la oficina de cada empleado, y luego añadimos los clientes de
cada representante, así obtenemos los clientes que tienen un representante
asignado y los datos de la oficina del representante asignado. Si hubiéramos puesto INNER
en vez de LEFT no saldrían
los clientes que tienen el empleado 110 (porque no tiene oficina y por
tanto no aparece en el resultado del LEFT
JOIN y por tanto no entrará en el cálculo del
INNER JOIN con clientes). |