Unión SQLite: ejemplo natural izquierdo exterior, interior, cruzado con tablas

SQLite admite diferentes tipos de SQL Uniones, como INNER JOIN, LEFT OUTER JOIN y CROSS JOIN. Cada tipo de JOIN se utiliza para una situación diferente como veremos en este tutorial.

Introducción a la cláusula JOIN de SQLite

Cuando trabaja en una base de datos con varias tablas, a menudo necesita obtener datos de estas múltiples tablas.

Con la cláusula JOIN, puede vincular dos o más tablas o subconsultas uniéndolas. Además, puedes definir por qué columna necesitas vincular las tablas y por qué condiciones.

Cualquier cláusula JOIN debe tener lo siguientewing sintaxis:

Sintaxis de la cláusula JOIN de SQLite
Sintaxis de la cláusula JOIN de SQLite

Cada cláusula de unión contiene:

  • Una tabla o una subconsulta que es la tabla de la izquierda; la tabla o la subconsulta antes de la cláusula de unión (a la izquierda de la misma).
  • Operador JOIN: especifique el tipo de unión (ya sea INNER JOIN, IZQUIERDA EXTERIOR IZQUIERDA o CROSS JOIN).
  • Restricción JOIN: después de especificar las tablas o subconsultas para unir, debe especificar una restricción de unión, que será una condición en la que se seleccionarán las filas coincidentes que coincidan con esa condición según el tipo de unión.

Tenga en cuenta que, para todos los siguienteswing Ejemplos de tablas SQLite JOIN, debe ejecutar sqlite3.exe y abrir una conexión a la base de datos de muestra como flowing:

Paso 1) En este paso,

  1. Abra Mi PC y navegue hasta el siguientewing directorio “C:\sqlite"Y
  2. Luego abre “sqlite3.exe"

Cláusula JOIN de SQLite

Paso 2) Abre la base de datos “TutorialesSampleDB.db” por el siguientewing mando:

Cláusula JOIN de SQLite

Ahora está listo para ejecutar cualquier tipo de consulta en la base de datos.

UNIÓN INTERNA SQLite

INNER JOIN devuelve solo las filas que coinciden con la condición de unión y elimina todas las demás filas que no coinciden con la condición de unión.

UNIÓN INTERNA SQLite
UNIÓN INTERNA SQLite

Ejemplo

en el siguientewing Por ejemplo, uniremos las dos tablas “Estudiantes y Departamentos” con DepartmentId para obtener el nombre del departamento de cada estudiante, de la siguiente manera:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explicación del código

La UNIÓN INTERNA funciona de la siguiente manerawing:

  • En la cláusula Seleccionar, puede seleccionar las columnas que desee de las dos tablas a las que se hace referencia.
  • La cláusula INNER JOIN se escribe después de la primera tabla a la que se hace referencia con la cláusula "De".
  • Luego, la condición de unión se especifica con ON.
  • Se pueden especificar alias para las tablas a las que se hace referencia.
  • La palabra INTERIOR es opcional, puedes simplemente escribir UNIRSE.

Salida

Ejemplo de unión interna de SQLite

  • INNER JOIN produce los registros de ambos: los estudiantes y las tablas del departamento que coinciden con la condición que es "Sestudiantes.DepartamentoId = Departamentos.DepartamentoId “. Las filas no coincidentes se ignorarán y no se incluirán en el resultado.
  • Es por eso que solo 8 estudiantes de 10 estudiantes respondieron a esta consulta en los departamentos de TI, matemáticas y física. Mientras que los estudiantes "Jena" y "George" no se incluyeron porque tienen un Id. de departamento nulo, que no coincide con la columna Id.departamento de la tabla de departamentos. Como siguewing:

    Ejemplo de unión interna de SQLite

ÚNETE A SQLite… USANDO

INNER JOIN se puede escribir usando la cláusula "USING" para evitar redundancia, por lo que en lugar de escribir "ON Students.DepartmentId = Departments.DepartmentId", puede simplemente escribir "USING(DepartmentID)".

Puede utilizar "UNIRSE... USANDO" siempre que las columnas que comparará en la condición de unión tengan el mismo nombre. En tales casos, no es necesario repetirlos usando la condición on y simplemente indique los nombres de las columnas y SQLite lo detectará.

La diferencia entre INNER JOIN y JOIN... USANDO:

Con “JOIN…USING” no escribes una condición de unión, simplemente escribes la columna de unión que es común entre las dos tablas unidas, en lugar de escribir tabla1 “INNER JOIN table2 ON table1.cola = table2.cola” escribimos es como "tabla1 ÚNETE a la tabla2 USANDO (cola)".

Ejemplo

en el siguientewing Por ejemplo, uniremos las dos tablas “Estudiantes y Departamentos” con DepartmentId para obtener el nombre del departamento de cada estudiante, de la siguiente manera:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

Explicación

  • A diferencia del ejemplo anterior, no escribimos “ON Estudiantes.IdDepartamento = Departamentos.IdDepartamento“. Acabamos de escribir “USANDO(Id.departamento)".
  • SQLite infiere la condición de unión automáticamente y compares el DepartmentId de ambas tablas: Estudiantes y Departamentos.
  • Puede utilizar esta sintaxis siempre que las dos columnas que está comparando tengan el mismo nombre.

Salida

  • Esto le dará exactamente el mismo resultado que el ejemplo anterior:

Ejemplo de unión de SQLite

UNIÓN NATURAL SQLite

UNA JOIN NATURAL es similar a una JOIN...USING, la diferencia es que automáticamente prueba la igualdad entre los valores de cada columna que existe en ambas tablas.

La diferencia entre UNIÓN INTERNA y UNIÓN NATURAL:

  • En INNER JOIN, debe especificar una condición de unión que la unión interna utiliza para unir las dos tablas. Mientras que en la unión natural, no se escribe una condición de unión. Simplemente escribe los nombres de las dos tablas sin ninguna condición. Luego, la unión natural probará automáticamente la igualdad entre los valores de cada columna que existe en ambas tablas. La unión natural infiere la condición de unión automáticamente.
  • En NATURAL JOIN, todas las columnas de ambas tablas con el mismo nombre se compararán entre sí. Por ejemplo, si tenemos dos tablas con dos nombres de columnas en común (las dos columnas existen con el mismo nombre en las dos tablas), entonces la unión natural unirá las dos tablas comparando los valores de ambas columnas y no solo de una. columna.

Ejemplo

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

Explicación

  • No necesitamos escribir una condición de unión con nombres de columnas (como hicimos en INNER JOIN). Ni siquiera necesitábamos escribir el nombre de la columna una vez (como hicimos en JOIN USING).
  • La unión natural escaneará ambas columnas de las dos tablas. Detectará que la condición debe consistir en comparar el ID de departamento de las dos tablas Estudiantes y Departamentos.

Salida

Ejemplo de unión natural de SQLite

  • Natural JOIN le dará exactamente el mismo resultado que el resultado que obtuvimos de los ejemplos INNER JOIN y JOIN USING. Porque en nuestro ejemplo las tres consultas son equivalentes. Pero en algunos casos, la salida será diferente de la unión interna que de una unión natural. Por ejemplo, si hay más tablas con los mismos nombres, la unión natural hará coincidir todas las columnas entre sí. Sin embargo, la combinación interna coincidirá sólo con las columnas en la condición de combinación (más información).tails en la siguiente sección; la diferencia entre la unión interna y la unión natural).

UNIÓN EXTERNA IZQUIERDA de SQLite

El estándar SQL define tres tipos de UNIONES EXTERNAS: IZQUIERDA, DERECHA y COMPLETA, pero SQLite solo admite la UNIÓN EXTERNA IZQUIERDA natural.

En LEFT OUTER JOIN, todos los valores de las columnas que seleccione de la tabla de la izquierda se incluirán en el resultado de la pregunta, por lo que independientemente de que el valor coincida o no con la condición de unión, se incluirá en el resultado.

Entonces, si la tabla de la izquierda tiene "n" filas, los resultados de la consulta tendrán "n" filas. Sin embargo, para los valores de las columnas que provienen de la tabla de la derecha, si algún valor no coincide con la condición de unión, contendrá un valor "nulo".

Entonces, obtendrá una cantidad de filas equivalente a la cantidad de filas en la combinación izquierda. De modo que obtendrá las filas coincidentes de ambas tablas (como los resultados de INNER JOIN), más las filas que no coinciden de la tabla de la izquierda.

Ejemplo

en el siguientewing Por ejemplo, intentaremos “UNIRSE IZQUIERDA” para unir las dos tablas “Estudiantes” y “Departamentos”:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explicación

  • La sintaxis de SQLite LEFT JOIN es la misma que INNER JOIN; escribe LEFT JOIN entre las dos tablas y luego la condición de unión viene después de la cláusula ON.
  • La primera tabla después de la cláusula from es la tabla de la izquierda. Mientras que la segunda tabla especificada después del LEFT JOIN natural es la tabla derecha.
  • La cláusula OUTER es opcional; LA UNIÓN EXTERNA natural IZQUIERDA es lo mismo que la UNIÓN IZQUIERDA.

Salida

Ejemplo de UNIÓN EXTERNA IZQUIERDA de SQLite

  • Como puede ver, se incluyen todas las filas de la tabla de estudiantes, que son 10 estudiantes en total. Incluso si los ID de departamento del cuarto y último estudiante, Jena y George, no existen en la tabla Departamentos, también se incluyen.
  • Y en estos casos, el valor de nombre de departamento para Jena y George será "nulo" porque la tabla de departamentos no tiene un nombre de departamento que coincida con su valor de Id de departamento.

Demos a la consulta anterior usando el enlace izquierdo una explicación más profunda usando diagramas de Van:

UNIÓN EXTERNA IZQUIERDA de SQLite

UNIÓN EXTERNA IZQUIERDA de SQLite

LEFT JOIN dará a todos los nombres de los estudiantes de la tabla de estudiantes incluso si el estudiante tiene una identificación de departamento que no existe en la tabla de departamentos. Por lo tanto, la consulta no le dará solo las filas coincidentes como INNER JOIN, sino que le dará la parte adicional que tiene las filas no coincidentes de la tabla de la izquierda, que es la tabla de estudiantes.

Tenga en cuenta que cualquier nombre de estudiante que no tenga un departamento coincidente tendrá un valor "nulo" para el nombre del departamento, porque no hay ningún valor coincidente para él y esos valores son los valores en las filas que no coinciden.

UNIÓN CRUZADA SQLite

UNA UNIÓN CRUZADA proporciona el producto cartesiano para las columnas seleccionadas de las dos tablas unidas, al hacer coincidir todos los valores de la primera tabla con todos los valores de la segunda tabla.

Entonces, para cada valor en la primera tabla, obtendrá 'n' coincidencias de la segunda tabla, donde n es el número de filas de la segunda tabla.

A diferencia de INNER JOIN y LEFT OUTER JOIN, con CROSS JOIN, no necesita especificar una condición de unión, porque SQLite no la necesita para CROSS JOIN.

SQLite generará resultados lógicos establecidos al combinar todos los valores de la primera tabla con todos los valores de la segunda tabla.

Por ejemplo, si seleccionó una columna de la primera tabla (colA) y otra columna de la segunda tabla (colB). La colA contiene dos valores (1,2) y la colB también contiene dos valores (3,4).

Entonces el resultado de CROSS JOIN serán cuatro filas:

  • Dos filas combinando el primer valor de colA que es 1 con los dos valores de colB (3,4) que serán (1,3), (1,4).
  • Me gustawise, dos filas combinando el segundo valor de colA que es 2 con los dos valores de colB (3,4) que son (2,3), (2,4).

Ejemplo

en el siguientewing consulta intentaremos CROSS JOIN entre las tablas de Estudiantes y Departamentos:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

Explicación

  • En la selección de SQLite de varias tablas, simplemente seleccionamos dos columnas "nombre de estudiante" de la tabla de estudiantes y "nombre de departamento" de la tabla de departamentos.
  • Para la unión cruzada, no especificamos ninguna condición de unión, solo las dos tablas combinadas con CROSS JOIN en el medio de ellas.

Salida

Ejemplo de unión cruzada de SQLite

Como puedes ver, el resultado son 40 filas; 10 valores de la tabla de estudiantes comparados con los 4 departamentos de la tabla de departamentos. Como siguewing:

  • Cuatro valores para los cuatro departamentos de la tabla de departamentos coincidieron con el primer estudiante Michel.
  • Cuatro valores para los cuatro departamentos de la tabla de departamentos coincidieron con el segundo estudiante, John.
  • Cuatro valores para los Cuatro departamentos de la tabla de departamentos coincidieron con el tercer estudiante Jack... y así sucesivamente.

Resumen

Al utilizar la consulta SQLite JOIN, puede vincular una o más tablas o subconsultas para seleccionar columnas de ambas tablas o subconsultas.