tipos right left inner externas entre ejemplos ejemplo diferencias combinaciones sql database join

sql - right - ¿Cuál es la diferencia entre las combinaciones izquierda, derecha, exterior e interior?



left join sql server ejemplos (10)

Al principio tienes que entender qué hace unirte? Conectamos varias tablas y obtenemos resultados específicos de las tablas unidas. La forma más sencilla de hacer esto es la unión cruzada .

Digamos que la tabla A tiene dos columnas A y B. Y la tabla B tiene tres columnas C y D. Si aplicamos la combinación cruzada, se producirá una gran cantidad de filas sin sentido. Entonces tenemos que hacer coincidir el uso de la clave principal para obtener datos reales.

Izquierda: devolverá todos los registros de la tabla izquierda y el registro coincidente de la tabla derecha.

Derecha: volverá frente a la izquierda. Devolverá todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.

Interior: Esto es como una intersección. Solo devolverá registros coincidentes de ambas tablas.

Exterior: Y esto es como unión. Devolverá todos los registros disponibles de ambas tablas.

Algunas veces no necesitamos todos los datos y también necesitamos datos o registros comunes. Podemos obtenerlo fácilmente usando estos métodos de unión. Recuerde que la unión izquierda y la derecha también son la unión externa.

Puede obtener todos los registros simplemente utilizando la unión cruzada. Pero podría ser costoso cuando se trata de millones de registros. Así que hazlo simple usando la unión izquierda, derecha, interior o exterior.

Gracias

Me pregunto cómo diferenciar todas estas uniones diferentes ...



Echa un vistazo a unirse (SQL) en Wikipedia

  • Combinación interna: dadas dos tablas, una combinación interna devuelve todas las filas que existen en ambas tablas
  • unión izquierda / derecha (exterior) - Dadas dos tablas devuelve todas las filas que existen en la tabla izquierda o derecha de su unión, más las filas del otro lado se devolverán cuando la cláusula de unión sea una coincidencia o se devuelva un valor nulo para esas columnas

  • Completo externo: las dos tablas dadas devuelven todas las filas y devolverán nulos cuando la columna izquierda o derecha no esté allí

  • Uniones cruzadas: se unen cartesianas y pueden ser peligrosas si no se usan con cuidado


Hacerlo más visible podría ayudar. Un ejemplo:

Tabla 1:

ID_STUDENT STUDENT_NAME

1 Raony 2 Diogo 3 Eduardo 4 Luiz

Tabla 2:

ID_STUDENT LOCKER

3 l1 4 l2 5 l3

Lo que obtengo cuando hago:

-Inner join of Table 1 and Table 2: - Inner join returns both tables merged only when the key (ID_STUDENT) exists in both tables ID_STUDENT STUDENT_NAME LOCKER 3 Eduardo l1 4 Luiz l2 -Left join of Table 1 and Table 2: - Left join merges both tables with all records form table 1, in other words, there might be non-populated fields from table 2 ID_ESTUDANTE NOME_ESTUDANTE LOCKER 1 Raony - 2 Diogo - 3 Eduardo l1 4 Luiz l2 -Right join of table 1 and table 2: - Right join merges both tables with all records from table 2, in other words, there might be non-populated fields from table 1 ID_STUDENT STUDENT_NAME LOCKER 3 Eduardo l1 4 Luiz l2 5 - l3 -Outter join of table 1 and table 2: - Returns all records from both tables, in other words, there might be non-populated fields either from table 1 or 2. ID_STUDENT STUDENT_NAME LOCKER 1 Raony - 2 Diogo - 3 Eduardo l1 4 Luiz l2 5 - l3


Hay tres tipos básicos de unión:

  • INNER compara dos tablas y solo devuelve resultados donde existe una coincidencia. Los registros de la primera tabla se duplican cuando coinciden con varios resultados en la segunda. Las combinaciones INNER tienden a hacer que los conjuntos de resultados sean más pequeños, pero debido a que los registros se pueden duplicar, esto no está garantizado.
  • CROSS combinación CROSS compara dos tablas y devuelve todas las combinaciones posibles de filas de ambas tablas. Puede obtener una gran cantidad de resultados de este tipo de unión que incluso podrían no ser significativos, así que úselo con precaución.
  • OUTER combinación OUTER compara dos tablas y devuelve datos cuando hay una coincidencia disponible o, de lo contrario, valores NULL. Al igual que con la combinación INNER, esto duplicará las filas en una tabla cuando coincida con varios registros en la otra tabla. Las combinaciones EXTERIORES tienden a hacer que los conjuntos de resultados sean más grandes, ya que no eliminarán ningún registro del conjunto. También debe calificar una combinación EXTERNA para determinar cuándo y dónde agregar los valores NULL:
    • LEFT significa mantener todos los registros de la primera tabla sin importar qué, e insertar valores NULL cuando la segunda tabla no coincide.
    • RIGHT significa lo contrario: mantenga todos los registros de la segunda tabla sin importar qué, e inserte valores NULL cuando la primera tabla no coincida.
    • FULL significa mantener todos los registros de ambas tablas e insertar un valor NULO en cualquiera de las tablas si no hay coincidencia.

A menudo se ve la palabra clave OUTER omitida en la sintaxis. En su lugar, solo será "UNIRSE IZQUIERDO", "UNIR A LA DERECHA" o "UNIR COMPLETO". Esto se hace porque las combinaciones INNER y CROSS no tienen ningún significado con respecto a la IZQUIERDA, DERECHA o LLENA, por lo que son suficientes por sí mismas para indicar inequívocamente una unión EXTERNA.

Aquí hay un ejemplo de cuándo querría usar cada tipo:

  • INNER : Desea devolver todos los registros de la tabla "Factura", junto con sus correspondientes "Líneas de factura". Esto supone que cada Factura válida tendrá al menos una línea.
  • OUTER : desea devolver todos los registros "InvoiceLines" para una factura en particular, junto con sus correspondientes registros "InventoryItem". Este es un negocio que también vende servicios, por lo que no todas las líneas de facturación tendrán un IventoryItem.
  • CROSS : Tiene una tabla de dígitos con 10 filas, cada una con valores de ''0'' a ''9''. Desea crear una tabla de rango de fechas para unirse, de modo que termine con un registro por cada día dentro del rango. Al unir CROSS esta tabla consigo mismo repetidamente, puede crear tantos enteros consecutivos como sea necesario (dado que comienza desde 10 hasta la 1ª potencia, cada combinación agrega 1 al exponente). Luego use la función DATEADD () para agregar esos valores a su fecha base para el rango.

Sólo hay 4 tipos:

  1. Unión interna : El tipo más común. Se produce una fila de salida para cada par de filas de entrada que coinciden en las condiciones de unión.
  2. Combinación externa izquierda : igual que una combinación interna, excepto que si hay alguna fila para la que no se puede encontrar una fila coincidente en la tabla de la derecha, se genera una fila que contiene los valores de la tabla de la izquierda, con NULL para Cada valor en la tabla de la derecha. Esto significa que cada fila de la tabla de la izquierda aparecerá al menos una vez en la salida.
  3. Combinación externa derecha : igual que una combinación externa izquierda, excepto con los roles de las tablas invertidos.
  4. Unión externa completa : una combinación de combinaciones externas izquierda y derecha. Cada fila de ambas tablas aparecerá en la salida al menos una vez.

Una "unión cruzada" o "unión cartesiana" es simplemente una unión interna para la cual no se han especificado condiciones de unión, lo que resulta en la salida de todos los pares de filas.

Gracias a RusselH por señalar las uniones COMPLETAS, que había omitido.


SQL une la diferencia:

Muy simple de recordar:

INNER JOIN solo muestra registros comunes a ambas tablas.

OUTER JOIN todo el contenido de ambas tablas se fusionan, ya sea que coincidan o no.

LEFT JOIN es igual que LEFT OUTER JOIN - (Seleccione los registros de la primera tabla (la más a la izquierda) con los registros de la tabla a la derecha).

RIGHT JOIN es igual que RIGHT OUTER JOIN - (Seleccione los registros de la segunda tabla (la más a la derecha) con los registros de la tabla de la izquierda).


LEFT JOIN y RIGHT JOIN son tipos de OUTER JOIN s.

INNER JOIN es el valor predeterminado: las filas de ambas tablas deben coincidir con la condición de unión.


Ejemplo simple : Digamos que tienes una tabla de Students y una tabla de Lockers . En SQL, la primera tabla que especifique en una combinación, Students , es la tabla IZQUIERDA , y la segunda, Lockers , es la tabla RIGHT .

Cada estudiante puede ser asignado a un casillero, por lo que hay una columna LockerNumber en la tabla de Student . Más de un estudiante podría estar potencialmente en un solo casillero, pero especialmente al comienzo del año escolar, es posible que haya algunos estudiantes entrantes sin casilleros y otros que no tienen estudiantes asignados.

Por el bien de este ejemplo, digamos que tiene 100 estudiantes , 70 de los cuales tienen casilleros. Tiene un total de 50 casilleros , 40 de los cuales tienen al menos 1 estudiante y 10 armarios no tienen estudiante.

INNER JOIN es equivalente a " mostrarme a todos los estudiantes con casilleros ".
Cualquier estudiante sin casilleros, o cualquier casillero sin estudiantes falta.
Devuelve 70 filas

LEFT OUTER JOIN sería " mostrarme a todos los estudiantes, con su correspondiente casillero si tienen uno ".
Esto podría ser una lista general de estudiantes, o podría usarse para identificar estudiantes sin casillero.
Devuelve 100 filas

La JUNTA EXTERNA ADECUADA sería " muéstrame todos los casilleros, y los estudiantes asignados a ellos si hay alguno ".
Esto podría usarse para identificar casilleros que no tienen estudiantes asignados, o casilleros que tienen demasiados estudiantes.
Devuelve 80 filas (lista de 70 estudiantes en los 40 casilleros, más los 10 casilleros sin estudiante)

La ÚLTIMA INSCRIPCIÓN EXTERNA sería una tontería y probablemente no sea de mucha utilidad.
Algo así como " muéstrame a todos los estudiantes y a todos los casilleros, y hazlos coincidir donde puedas "
Devuelve 110 filas (todos los 100 estudiantes, incluidos los que no tienen casilleros. Además de los 10 casilleros sin estudiante)

CROSS JOIN también es bastante tonto en este escenario.
No usa el campo del número de lockernumber vinculado en la tabla de estudiantes, por lo que básicamente terminas con una gran lista gigante de cada posible pareja de estudiantes a casilleros, ya sea que exista o no.
Devuelve 5000 filas (100 estudiantes x 50 casilleros). Podría ser útil (con filtrado) como punto de partida para hacer coincidir a los nuevos estudiantes con los casilleros vacíos.


Unión interna : solo muestra filas, cuando tiene datos de ambas tablas.

Unión externa : (izquierda / derecha) : muestra todos los resultados de la tabla izquierda / derecha con las filas emparejadas, si existe o no.