Requisitos previos para la aparición del operador JOIN
A medida que crece la cantidad de datos en las tablas, a menudo aparecen valores duplicados en ellas. Por ejemplo, la tabla de productos tiene nombres de marca. que a veces se repiten. Sería útil tener una tabla de marca separada para ellos, que contendría, por ejemplo, tales datos:
- id - id de la marca;
- nombre – marca;
- company_owner - el nombre de la empresa propietaria de la marca;
- company_contacts: contactos de la empresa del propietario de la marca.
Luego nos gustaría crear una tabla de direcciones en la que pudiéramos poner todas las direcciones:
- id – direcciones de id;
- país;
- región;
- ciudad;
- calle;
- casa;
- cremallera.
Además, en esta tabla sería posible almacenar las direcciones no solo de las empresas propietarias de la marca, sino también las direcciones de los clientes y empleados. Y este enfoque es simplemente una consecuencia del crecimiento en la cantidad de datos (el número de filas en las tablas). Esto facilita la manipulación de datos en tablas y mantiene su integridad.
Cuando tenga 5 empleados, simplemente ingrese su ocupación en la columna de ocupación . Si tiene 5 mil empleados en su empresa, entonces necesita una tabla con una lista de x profesiones y sus responsabilidades.
En el lenguaje Java, por cierto, hay algo similar. Si tiene mucho código en un método, existe el deseo de dividirlo en varios métodos. Si hay muchos métodos en una clase, quiero dividirla en varias clases.
Es por eso que las grandes bases de datos tienen miles de tablas. Y casi todas las consultas se ejecutan en varias tablas a la vez. Y el producto cartesiano de las filas de tres tablas en cada una de las cuales tiene mil registros ya es mil millones de filas.
Pero solo filtrar mil millones de filas usando WHERE puede llevar horas. Por lo tanto, los creadores del lenguaje SQL ofrecieron su solución: el operador JOIN.
Introducción al operador JOIN
El operador JOIN se usa para decirle explícitamente al servidor SQL que no necesitamos un producto cartesiano de todas las filas de tablas para todos, sino un pegado inteligente de filas de diferentes tablas que se refieren entre sí usando una ID (o de otra manera) . El servidor tiene un algoritmo separado para procesar uniones de tablas usando el operador JOIN, lo que permite que tales operaciones se realicen mucho más rápido. La forma general del operador JOIN es la siguiente:
table 1 JOIN table 2 ON condition
Aquí dice que necesita combinar las tablas table1 y table2 en una sola tabla, y usar la condición como criterio de unión .
Tomemos nuestro viejo ejemplo:
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
Y reescríbelo usando el operador JOIN:
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
Ambas consultas darán el mismo resultado en nuestro caso, pero esto es solo porque las consultas son muy simples. En el futuro, WHERE le permite construir exactamente el filtro de fila, y el especificado después de ON le permite escribir scripts complejos para vincular tablas. También puede usar alias (alias de tabla) cuando usa la instrucción JOIN. Ejemplo:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id