Intersecciones

Bajo la teoría de bases de datos relacionales, se esconde una ampliación de la teoría de conjuntos. En las tablas, al igual que con los conjuntos, podemos realizar diversas operaciones que afecten a más de una tabla. La más corriente es la intersección, que se realiza mediante la cláusula JOIN. La intersección permite combinar registros de dos tablas siempre que haya concordancia de valores en un campo común.

Sintaxis:

SELECT campos FROM tb1 INNER JOIN tb2 ON tb1.campo1 comp tb2.campo2

  • tb1, tb2 = Son los nombres de las tablas desde las que se combinan los registros.
  • campo1, campo2 = Son los nombres de los campos que se combinan. Si no son numéricos, los campos deben ser del mismo tipo de datos y contener el mismo tipo de datos, pero no tienen que tener el mismo nombre.
  • comp = Es cualquier operador de comparación relacional : =, <, >, <=, >=, o <>.

Si empleamos la operación INNER JOIN en la consulta se seleccionarán sólo aquellos registros de la tabla de la que hayamos escrito a la izquierda de INNER JOIN que contengan al menos un registro de la tabla que hayamos escrito a la derecha. Sin embargo, tenemos la posibilidad de emplear otras dos formas más de intersección:

  • LEFT JOIN toma todos los registros de la tabla de la izquierda aunque no tengan ningún registro en la tabla de la derecha.
  • RIGHT JOIN realiza la misma operación pero al contrario, toma todos los registros de la tabla de la derecha aunque no tenga ningún registro en la tabla de la izquierda.

Para probar los ejemplos necesitaremos crear una base de datos que contenga las tablas cuya definición y datos os podéis bajar aquí.

INNER JOIN

Vamos a ver cada uno de los tipos de interersecciones con detenimiento. Empezaremos con la que más se usa, que es INNER JOIN. Vemos que los campos de ambas tablas que no tienen registro relacionado en la otra desaparecen ("Lógica difusa para torpes" y "Otilio Marchante").

a9.jpg
a10.jpg
a11.jpg
a12.jpg

Esta consulta sería equivalente.

SELECT titulo, fecha, nombre FROM articulos,autores
WHERE articulos.idautor=autores.id;

Vemos que en este caso conservamos los registros de la tabla de la izquierda que no tienen relación con las de la derecha.

a13.jpg
a14.jpg
a15.jpg
a16.jpg

Finalmente, en el RIGHT JOIN sucederá al revés, de modo que tendremos un registro con autor "Otilio Marchante" pero sin artículo correspondiente.

a17.jpg
a18.jpg
a19.jpg
a20.jpg

Ejemplo 1:

Se puede utilizar INNER JOIN con las tablas Departamentos y Empleados para seleccionar todos los empleados de cada departamento.

SELECT salario, apellido, nombre,
D.departamento
FROM empleados AS E
INNER JOIN departamentos AS D
ON D.departamento = E.departamento;

Ejemplo 2:

Para seleccionar todos los empleados (incluso si alguno no está asignado a ningún departamento) se emplea LEFT JOIN

SELECT salario, apellido, nombre,
D.departamento
FROM empleados AS E
LEFT JOIN departamentos AS D
ON D.departamento = E.departamento;

Ejemplo 3:

Todos los departamentos (incluso si alguno de ellos no tiene ningún empleado asignado), en este caso RIGHT JOIN.

SELECT salario, apellido, nombre,
D.departamento
FROM empleados AS E
RIGHT JOIN departamentos AS D
ON D.departamento = E.departamento;

Nota: La concordancia existe entre los campos "departamento" de la tabla empleados y de la tabla departamentos.

Otras posibilidades sintácticas

Aunque ya hemos visto toda la funcionalidad del JOIN aún no conocemos todas sus formas sintácticas. Las más útiles (porque nos pueden ahorrar trabajo) son el empleo de USING y NATURAL.

USING se puede emplear como sustituto de ON cuando el campo por el que se realiza la intersección recibe el mismo nombre en ambas tablas y la relación entre ambos campos es la de igualdad (=).

Sintaxis:

SELECT campos FROM tb1
[INNER|LEFT|RIGHT] JOIN tb2 USING (campo)

Ejemplo 4:

Como el nombre del campo es departamento en ambas tablas, podemos emplear USING.

SELECT salario, apellido, nombre,
D.departamento
FROM empleados AS E
INNER JOIN departamentos AS D
USING (departamento);

NATURAL se puede emplear como sustituto de USING cuando no hay más campos en ambas tablas que se denominen igual además de aquellos por los que se busca realizar la intersección.

Sintaxis:

SELECT campos FROM tb1
NATURAL [LEFT|RIGHT] JOIN tb2

Ejemplo 5:

Sólo hay un campo que se denomine igual en ambas tablas y es departamento, de modo que podemos emplear NATURAL.

SELECT salario, apellido, nombre,
D.departamento
FROM empleados AS E
NATURAL JOIN departamentos AS D;

Ejemplo 6:

Mostrar trabajo, salario, apellido y localidad en la que ejercen los empleados ordenados por el tipo de trabajo y salario

SELECT apellido, trabajo, salario, localidad
FROM departamentos
NATURAL JOIN empleados
ORDER BY trabajo, salario;

« MySQL 4 | Consulta de datos avanzada

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License