una stuff que parte minus left extraer cadena sql sql-server join left-join right-join

stuff - Diferencia entre unir a la izquierda y unir a la derecha en SQL Server



sql server substring left (10)

Sé acerca de las uniones en SQL Server.

Por ejemplo. hay dos tablas Table1, Table2.

Allí están siguiendo la estructura de la mesa.

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

Tabla 2 Datos de la siguiente manera:

Id Name ------------- 1 A 2 B 3 C

Si ejecuto las dos sentencias de 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

Por favor, explique la diferencia entre la izquierda y la derecha en las declaraciones de SQL anteriores.



Creo que podemos exigir AND condicionar en where cláusula de la última cifra de Outer Excluding JOIN para que obtengamos el resultado deseado de A Union B Minus A Interaction B Siento que la consulta necesita actualizarse para

SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL AND B.Key IS NULL

Si usamos OR , obtendremos todos los resultados de A Union B


La tabla de la que está tomando los datos es ''IZQUIERDA''.
La tabla a la que se une es ''DERECHA''
ÚNASE A LA IZQUIERDA: tome todos los elementos de la tabla izquierda Y (solo) los elementos coincidentes de la tabla derecha.
ÚNASE A LA DERECHA: tome todos los elementos de la tabla derecha Y (solo) los elementos coincidentes de la tabla izquierda.
Asi que:

Select * from Table1 left join Table2 on Table1.id = Table2.id

da:

Id Name ------------- 1 A 2 B

pero:

Select * from Table1 right join Table2 on Table1.id = Table2.id

da:

Id Name ------------- 1 A 2 B 3 C

Tenías razón al unirte a la tabla con menos filas en la tabla con más filas
Y
de nuevo, uniéndose a la tabla con menos filas en la tabla con más filas
Tratar:

If Table1.Rows.Count > Table2.Rows.Count Then '' Left Join Else '' Right Join End If


Parece que estás preguntando: "Si puedo reescribir una RIGHT OUTER JOIN utilizando la sintaxis de LEFT OUTER JOIN , ¿por qué tener una sintaxis de RIGHT OUTER JOIN ?" Creo que la respuesta a esta pregunta es, porque los diseñadores del lenguaje no querían poner tal restricción en los usuarios (y creo que hubieran sido criticados si lo hicieran), lo que obligaría a los usuarios a cambiar el orden de las tablas. en la cláusula FROM en algunas circunstancias cuando simplemente se cambia el tipo de unión.


Tus dos afirmaciones son equivalentes.

La mayoría de las personas solo usan LEFT JOIN ya que parece más intuitiva, y su sintaxis es universal. No creo que todos los RDBMS sean compatibles con JUNTA RIGHT JOIN .


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 "on" palabra clave.

De manera similar, Por definición: la combinación correcta selecciona todas las columnas mencionadas con la palabra clave "seleccionar" de la Tabla 2 y las columnas de la Tabla 1 que coinciden con los criterios después de la palabra clave "en".

Refiriéndose a su pregunta, las identificaciones en ambas tablas se comparan con todas las columnas necesarias para ser lanzadas en la salida. Por lo tanto, los identificadores 1 y 2 son comunes tanto en las tablas como en el resultado, tendrá cuatro columnas con las columnas id y name de la primera y la segunda tabla en orden.

*select * from Table1 left join Table2 on Table1.id = Table2.id

En la expresión anterior, toma todos los registros (filas) de la tabla 1 y las columnas, con los id correspondientes a 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 la expresión anterior, toma todos los registros (filas) de la tabla 1 y las columnas, con los identificadores coincidentes de la tabla 1 y la tabla 2, de la tabla 2. (recuerde, esta es una combinación correcta, por lo que todas las columnas de la tabla 2 y no de la tabla 1 será considerado).


(INNER) JOIN: devuelve registros que tienen valores coincidentes en ambas tablas.

LEFT (OUTER) JOIN: Devuelve todos los registros de la tabla de la izquierda y los registros coincidentes de la tabla de la derecha.

JUNTA DERECHA (EXTERIOR): devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.

UNIR COMPLETO (EXTERIOR): 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:

Tabla a

id firstname lastname ___________________________ 1 Ram Thapa 2 sam Koirala 3 abc xyz 6 sruthy abc

Tabla b

id2 place _____________ 1 Nepal 2 USA 3 Lumbini 5 Kathmandu

Unir internamente

Nota: Da la intersección de dos tablas.

Sintaxis

SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

Aplícalo en tu tabla de muestra:

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA INNER JOIN TableB ON TableA.id = TableB.id2;

El resultado será:

firstName lastName Place _____________________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini

Unirse a la izquierda

Nota: proporcionará todas las filas seleccionadas en la Tabla A, más cualquier fila seleccionada común en la TablaB.

SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

Aplícalo en tu tabla de muestras.

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA LEFT JOIN TableB ON TableA.id = TableB.id2;

El resultado será:

firstName lastName Place ______________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini sruthy abc Null

Unirse a la derecha

Nota: proporcionará todas las filas seleccionadas en TableB, más cualquier fila seleccionada común en TableA.

Sintaxis:

SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;

Aplícalo en tu mesa samole:

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA RIGHT JOIN TableB ON TableA.id = TableB.id2;

El resultado será:

firstName lastName Place ______________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini Null Null Kathmandu

Unirse completo

Nota: es igual que la operación de unión, devolverá todos los valores seleccionados de ambas tablas.

Sintaxis:

SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Aplícalo en tu samp [tabla le:

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA FULL JOIN TableB ON TableA.id = TableB.id2;

El resultado será:

firstName lastName Place ______________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini sruthy abc Null Null Null Kathmandu

Algunos hechos

Para INNER se une el pedido no importa.

Para las combinaciones EXTERNAS (IZQUIERDA, DERECHA o COMPLETA), el orden es importante

Encuentre más en w3schools


seleccione * de Table1 left join table2 en Table1.id = Table2.id

En la primera consulta, la combinación izquierda compara la tabla de la tabla del lado izquierdo1 con la tabla de la tabla del lado derecho2 .

En el que se mostrarán todas las propiedades de table1 , mientras que en la tabla 2 solo se mostrarán aquellas propiedades en las que la condición sea verdadera.

seleccione * de Table2 right join Table1 en Table1.id = Table2.id

En la primera consulta, la combinación derecha compara la tabla de la derecha 1 con la tabla de la izquierda 2 .

En el que se mostrarán todas las propiedades de table1 , mientras que en la tabla 2 solo se mostrarán aquellas propiedades en las que la condición sea verdadera.

Ambas consultas darán el mismo resultado porque el orden de la declaración de la tabla en la consulta es diferente, ya que está declarando table1 y table2 en la izquierda y la derecha respectivamente en la primera consulta a la izquierda , y también declarando table1 y table2 en la derecha y la izquierda respectivamente en la segunda unión a la derecha consulta.

Esta es la razón por la que obtiene el mismo resultado en ambas consultas. Así que si quieres un resultado diferente, ejecuta estas dos consultas respectivamente,

seleccione * de Table1 left join table2 en Table1.id = Table2.id

seleccione * de Table1 right join Table2 en Table1.id = Table2.id


Select * from Table1 left join Table2 ...

y

Select * from Table2 right join Table1 ...

De hecho son completamente intercambiables. Sin embargo, intente Table2 left join Table1 (o su par idéntico, Table1 right join Table2 ) para ver una diferencia. Esta consulta debería proporcionarle más filas, ya que Table2 contiene una fila con un ID que no está presente en Table1.


select fields from tableA --left left join tableB --right on tableA.key = tableB.key

La tabla en la tabla from este ejemplo tableA , está en el lado izquierdo de la relación.

tableA <- tableB [left]------[right]

Entonces, si desea tomar todas las filas de la tabla de la izquierda (tabla tableA ), incluso si no hay coincidencias en la tabla de la derecha (tabla tableB ), usará la "combinación de la izquierda".

Y si desea tomar todas las filas de la tabla derecha (tabla tableB ), incluso si no hay coincidencias en la tabla izquierda (tabla tableA ), usará la right join .

Por lo tanto, la siguiente consulta es equivalente a la utilizada anteriormente.

select fields from tableB right join tableA on tableB.key = tableA.key