Sé acerca de las uniones en SQL Server.
Por ejemplo. Hay dos tablas Tabla1, Tabla2.
Sus estructuras de tabla son las siguientes.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Tabla1 datos de la siguiente manera:
Id Name
-------------
1 A
2 B
Tabla2 datos de la siguiente manera:
Id Name
-------------
1 A
2 B
3 C
Si ejecuto las dos instrucciones SQL mencionadas a continuación, ambas salidas serán las mismas
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Explique la diferencia entre la unión izquierda y derecha en las declaraciones SQL anteriores.
sql
sql-server
join
left-join
right-join
Pankaj Agarwal
fuente
fuente
RIGHT JOIN
si podemos lograr cualquier resultado deseado con soloLEFT JOIN
? : PSelect * from Table1 left join Table 2
devolverá TODOS los registros de la tabla 1 más los registros coincidentes de la Tabla 2. Lo contrarioSelect * from Table1 right join Table 2
devolvería TODOS los registros de la Tabla 2 y los registros coincidentes de la Tabla 1. Espero que ayude.Codeproject tiene esta imagen que explica los conceptos básicos simples de las uniones SQL, tomadas de: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
fuente
JOIN Table_B b ON A.Key = B.Key
. La condición OR funciona bien.La tabla de la que está tomando datos es 'IZQUIERDA'.
La tabla a la que se está uniendo es 'DERECHA'.
IZQUIERDA: Tome todos los elementos de la tabla izquierda Y (solo) elementos coincidentes de la tabla derecha.
UNIÓN DERECHA: Tome todos los elementos de la tabla derecha Y (solo) elementos coincidentes de la tabla izquierda.
Entonces:
da:
pero:
da:
tenías derecho a unirte a la mesa con menos filas en la mesa con más filas
Y
nuevamente, a la izquierda unir la mesa con menos filas en la mesa con más filas
Prueba:
fuente
(INTERIOR) JOIN: Devuelve registros que tienen valores coincidentes en ambas tablas.
IZQUIERDA (EXTERIOR): devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
UNIÓN DERECHA (EXTERIOR): devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
FULL (OUTER) JOIN: devuelve todos los registros cuando hay una coincidencia en la tabla izquierda o derecha
Por ejemplo, supongamos que tenemos dos tablas con los siguientes registros:
Unir internamente
Sintaxis
Aplíquelo en su tabla de muestra:
El resultado será:
Izquierda unirse
Aplícalo en tu tabla de muestra
El resultado será:
Únete a la derecha
Sintaxis:
Aplícalo en tu tabla samole:
El resultado será:
Únete completo
Sintaxis:
Aplíquelo en su muestra [tabla de archivos:
El resultado será:
Para INNER se une, el orden no importa
Para las uniones EXTERIORES (IZQUIERDA, DERECHA o COMPLETA), el orden importa
Encuentre más en w3schools
fuente
La tabla en
from
este ejemplotableA
, está en el lado izquierdo de la relación.Entonces, si desea tomar todas las filas de la tabla izquierda (
tableA
), incluso si no hay coincidencias en la tabla derecha (tableB
), usará la "combinación izquierda".Y si desea tomar todas las filas de la tabla derecha (
tableB
), incluso si no hay coincidencias en la tabla izquierda (tableA
), utilizará elright join
.Por lo tanto, la siguiente consulta es equivalente a la utilizada anteriormente.
fuente
Parece que se pregunta: "Si puedo reescribir una sintaxis de
RIGHT OUTER JOIN
usoLEFT OUTER JOIN
, ¿por qué tener unaRIGHT OUTER JOIN
sintaxis?" Creo que la respuesta a esta pregunta es, porque los diseñadores del lenguaje no querían imponer una restricción a los usuarios (y creo que habrían sido criticados si lo hicieran), lo que obligaría a los usuarios a cambiar el orden de las tablas. en laFROM
cláusula en algunas circunstancias cuando simplemente se cambia el tipo de unión.fuente
Sus dos declaraciones son equivalentes.
La mayoría de las personas solo usan,
LEFT JOIN
ya que parece más intuitivo, y es una sintaxis universal: no creo que todos los RDBMS sean compatiblesRIGHT JOIN
.fuente
LEFT
pero noRIGHT
, indique cuáles.RIGHT
yFULL OUTER JOIN
: sqlite.org/omitted.htmlSiento que podemos requerir
AND
condición en lawhere
cláusula de la última figura deOuter Excluding JOIN
para que podamos obtener el resultado deseadoA Union B Minus A Interaction B
. Siento que la consulta debe actualizarse aSi usamos
OR
, obtendremos todos los resultados deA Union B
fuente
seleccione * de la Tabla1 a la izquierda, únase a la Tabla2 en la Tabla1.id = Tabla2.id
En la primera consulta, la unión izquierda compara la tabla del lado izquierdo table1 con la tabla del lado derecho table2 .
En el que todas las propiedades de la Tabla 1 se muestran, mientras que en tabla2 sólo aquellas propiedades se mostrarán en qué condición conseguir cierto.
seleccione * de Table2 unir a la derecha Table1 en Table1.id = Table2.id
En la primera consulta, la unión derecha compara la tabla del lado derecho table1 con la tabla del lado izquierdo table2 .
En el que todas las propiedades de la Tabla 1 se muestran, mientras que en tabla2 sólo aquellas propiedades se mostrarán en qué condición conseguir cierto.
Ambas consultas darán el mismo resultado porque el orden de la declaración de la tabla en la consulta es diferente, ya que declara table1 y table2 en la izquierda y la derecha respectivamente en la primera consulta de combinación izquierda , y también declara table1 y table2 en la derecha y la izquierda respectivamente en la segunda combinación derecha consulta.
Esta es la razón por la que obtiene el mismo resultado en ambas consultas. Entonces, si desea un resultado diferente, ejecute estas dos consultas respectivamente,
seleccione * de la Tabla1 a la izquierda, únase a la Tabla2 en la Tabla1.id = Tabla2.id
seleccione * desde la Tabla1 y únase a la Tabla2 en Table1.id = Table2.id
fuente
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
Por definición: Left Join selecciona todas las columnas mencionadas con la palabra clave "select" de la Tabla 1 y las columnas de la Tabla 2 que coinciden con los criterios después de la palabra clave "on".Del mismo modo, por definición: la unión derecha selecciona todas las columnas mencionadas con la palabra clave "select" de la tabla 2 y las columnas de la tabla 1 que coincide con los criterios después de la palabra clave "on".
Refiriéndose a su pregunta, las identificaciones en ambas tablas se comparan con todas las columnas necesarias para arrojarse en la salida. Por lo tanto, los identificadores 1 y 2 son comunes en ambas tablas y, como resultado, tendrá cuatro columnas con columnas de identificación y nombre de las tablas primera y segunda en orden.
*select * from Table1 left join Table2 on Table1.id = Table2.id
La expresión anterior, toma todos los registros (filas) de la tabla 1 y las columnas, con las identificaciones coincidentes de la tabla 1 y la tabla 2, de la tabla 2.
select * from Table2 right join Table1 on Table1.id = Table2.id**
De manera similar, a partir de la expresión anterior, toma todos los registros (filas) de la tabla 1 y las columnas, con las identificaciones coincidentes de la tabla 1 y la tabla 2, de la tabla 2. (recuerde, esta es una unión correcta, por lo que todas las columnas de la tabla2 y no de la tabla 1 se considerará).
fuente