JOIN es un operador del lenguaje SQL , que es una implementación de la operación de unión del álgebra relacional . Incluido en la cláusula FROM de las sentencias SELECT , UPDATE y DELETE .
La operación de combinación, como otras operaciones binarias , está diseñada para obtener datos de dos tablas e incluir esos datos en un conjunto de resultados. Las características distintivas de la operación de unión son las siguientes:
La determinación de qué cadenas de origen se incluirán en el resultado y en qué combinaciones depende del tipo de operación de combinación y de la condición de combinación especificada explícitamente . La condición de unión, es decir, la condición de hacer coincidir las filas de las tablas de origen entre sí, es una expresión lógica ( predicado ).
Si es necesario unir no dos, sino varias tablas, la operación de unión se aplica varias veces (sucesivamente).
La operación JOIN de SQL es una implementación de la operación de unión del álgebra relacional solo hasta cierto punto, ya que en el modelo de datos relacionales se realiza una unión en relaciones, que son conjuntos , y en SQL, en tablas, que son conjuntos múltiples . Los resultados de las operaciones también son, en general, diferentes: en álgebra relacional, el resultado de una unión da una relación (conjunto), y en SQL, una tabla (conjunto múltiple).
En la mayoría de DBMS, al especificar las palabras LEFT, RIGHT, se puede omitir FULLla palabra . OUTERLa palabra INNERtambién se puede omitir en la mayoría de los DBMS.
En el caso general, el DBMS verifica la condición ( predicado ) al realizar una conexión . Si los nombres de las columnas por las que se unen las tablas son los mismos, puede usar en su lugar . La condición no está especificada para. ONUSINGCROSS JOIN
Para unión cruzada (producto cartesiano) CROSS JOIN, algunas implementaciones de SQL usan el operador de coma ( , ):
DESDE Tabla1 , Tabla2Las siguientes tablas se utilizarán para obtener más explicaciones:
Ciudad (Ciudades)IDENTIFICACIÓN | Nombre |
---|---|
una | Moscú |
2 | San Petersburgo |
3 | Kazán |
Nombre | ID de la ciudad |
---|---|
Andrés | una |
leonidas | 2 |
sergey | una |
Gregorio | cuatro |
El operador de unión interna INNER JOIN une dos tablas. El orden de las tablas para el operador no es importante porque el operador es conmutativo .
La cabecera de la tabla de resultados es la unión ( concatenación ) de las cabeceras de las tablas unidas.
El cuerpo del resultado se forma lógicamente de la siguiente manera. Cada fila de una tabla se compara con cada fila de la segunda tabla, después de lo cual se verifica la condición de combinación para la fila "unida" resultante (se calcula el predicado de combinación). Si la condición es verdadera, la fila "unida" correspondiente se agrega a la tabla de resultados.
El algoritmo de acciones descrito es estrictamente lógico, es decir, solo explica el resultado que se debe obtener al realizar la operación, pero no prescribe que un DBMS en particular realice la conexión de la manera especificada. Hay varias formas de implementar la operación de combinación, por ejemplo, combinación de bucles anidados ( ing. combinación de bucles internos ), combinación hash ( ing. combinación hash ), combinación de combinación ( ing. combinación de combinación ). El único requisito es que cualquier implementación debe producir lógicamente el mismo resultado que al aplicar el algoritmo descrito.
SELECCIONE * DE Persona INTERNA ÚNASE Ciudad ON Persona . CityId = ciudad . IDENTIFICACIÓNResultado:
Persona.Nombre | Persona.CityId | Ciudad.Id | Nombre de la ciudad |
---|---|---|---|
Andrés | una | una | Moscú |
leonidas | 2 | 2 | San Petersburgo |
sergey | una | una | Moscú |
Una unión entre dos tablas que necesariamente incluye todas las filas en una o ambas tablas.
UNIÓN EXTERNA IZQUIERDAEl operador de unión externa izquierda LEFT OUTER JOIN une dos tablas. El orden de las tablas para un operador es importante porque el operador no es conmutativo .
La cabecera de la tabla de resultados es la unión ( concatenación ) de las cabeceras de las tablas unidas.
El cuerpo del resultado se forma lógicamente de la siguiente manera. Deje que las tablas izquierda y derecha estén unidas por el predicado (condición) p .
Resultado:
Persona.Nombre | Persona.CityId | Ciudad.Id | Nombre de la ciudad |
---|---|---|---|
Andrés | una | una | Moscú |
leonidas | 2 | 2 | San Petersburgo |
sergey | una | una | Moscú |
Gregorio | cuatro | NULO | NULO |
El operador de unión exterior derecho RIGHT OUTER JOIN une dos tablas. El orden de las tablas para un operador es importante porque el operador no es conmutativo .
La cabecera de la tabla de resultados es la unión ( concatenación ) de las cabeceras de las tablas unidas.
El cuerpo del resultado se forma lógicamente de la siguiente manera. Deje que las tablas izquierda y derecha estén unidas por el predicado (condición) p .
Resultado:
Persona.Nombre | Persona.CityId | Ciudad.Id | Nombre de la ciudad |
---|---|---|---|
Andrés | una | una | Moscú |
sergey | una | una | Moscú |
leonidas | 2 | 2 | San Petersburgo |
NULO | NULO | 3 | Kazán |
El operador de unión externa completa FULL OUTER JOIN une dos tablas. El orden de las tablas para el operador no es importante porque el operador es conmutativo .
La cabecera de la tabla de resultados es la unión ( concatenación ) de las cabeceras de las tablas unidas.
El cuerpo del resultado se forma lógicamente de la siguiente manera. Deje que la primera y la segunda tablas estén unidas por el predicado (condición) p . Las palabras "primero" y "segundo" aquí no indican el orden en que se escribe la expresión (lo cual no es importante), sino que se usan solo para distinguir entre tablas.
Resultado:
Persona.Nombre | Persona.CityId | Ciudad.Id | Nombre de la ciudad |
---|---|---|---|
Andrés | una | una | Moscú |
sergey | una | una | Moscú |
leonidas | 2 | 2 | San Petersburgo |
NULO | NULO | 3 | Kazán |
Gregorio | cuatro | NULO | NULO |
El operador de unión cruzada , o producto cartesiano, CROSS JOIN une dos tablas. El orden de las tablas para el operador no es importante porque el operador es conmutativo .
La cabecera de la tabla de resultados es la unión ( concatenación ) de las cabeceras de las tablas unidas.
El cuerpo del resultado se forma lógicamente de la siguiente manera. Cada fila de una tabla está conectada a cada fila de la segunda tabla, dando como resultado todas las combinaciones posibles de filas de dos tablas.
SELECCIONE * DE Persona CROSS JOIN Ciudado
SELECCIONE * DE Persona , CiudadResultado:
Persona.Nombre | Persona.CityId | Ciudad.Id | Nombre de la ciudad |
---|---|---|---|
Andrés | una | una | Moscú |
Andrés | una | 2 | San Petersburgo |
Andrés | una | 3 | Kazán |
leonidas | 2 | una | Moscú |
leonidas | 2 | 2 | San Petersburgo |
leonidas | 2 | 3 | Kazán |
sergey | una | una | Moscú |
sergey | una | 2 | San Petersburgo |
sergey | una | 3 | Kazán |
Gregorio | cuatro | una | Moscú |
Gregorio | cuatro | 2 | San Petersburgo |
Gregorio | cuatro | 3 | Kazán |
Si agrega una condición de combinación (predicado p ) en la cláusula WHERE , es decir, restricciones en combinaciones de tuplas, entonces el resultado es equivalente a una operación con la misma condición: INNER JOIN
SELECCIONE * FROM Persona , Ciudad DONDE Persona . CityId = ciudad . IDENTIFICACIÓNPor lo tanto, las expresiones t1, t2 WHERE py t1 INNER JOIN t2 ON pson formas sintácticamente alternativas de escribir la misma operación de unión interna lógica en el predicado p . Se dice que la sintaxis CROSS JOIN + WHEREpara la operación de combinación está en desuso y en desuso por el estándar SQL ANSI [1] [2] .
sql | |
---|---|
Versiones |
|
Palabras clave | |
Artículos relacionados | |
Partes de ISO/IEC SQL |
|
Base de datos | |
---|---|
Conceptos | |
Objetos |
|
Llaves | |
sql |
|
Componentes |