SQLite Unir: Ejemplo natural izquierdo exterior, interior, cruzado con tablas

SQLite soporta 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 los SQLite Cláusula UNIRSE

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 la siguiente sintaxis:

SQLite Sintaxis de la cláusula ÚNETE
SQLite Sintaxis de la cláusula ÚNETE

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: especifica el tipo de unión (INNER JOIN, LEFT OUTER JOIN 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 siguientes SQLite Ejemplos de UNIR tablas, debes ejecutar sqlite3.exe y abrir una conexión a la base de datos de muestra como se muestra a continuación:

Paso 1) En este paso,

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

SQLite Cláusula UNIRSE

Paso 2) Abre la base de datos “TutorialesSampleDB.db" mediante el siguiente comando:

SQLite Cláusula UNIRSE

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

SQLite INNER JOIN

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.

SQLite INNER JOIN
SQLite INNER JOIN

Ejemplo

En el siguiente 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 manera:

  • 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

SQLite Ejemplo de UNIÓN INTERNA

  • 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.
  • Por este motivo, solo se obtuvieron 8 de 10 estudiantes de esta consulta con 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 departmentId de la tabla de departamentos. Como se muestra a continuación:

    SQLite Ejemplo de UNIÓN INTERNA

SQLite ÚNETE… 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 detectará eso.

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 siguiente 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 automáticamente la condición de unión y compara 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:

SQLite UNIRSE Ejemplo

SQLite UNIÓN NATURAL

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

SQLite Ejemplo de UNIÓN NATURAL

  • La unión natural le proporcionará exactamente el mismo resultado que obtuvimos de los ejemplos INNER JOIN y JOIN USING, ya que en nuestro ejemplo las tres consultas son equivalentes. Pero en algunos casos, el resultado 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 unión interna hará coincidir solo las columnas en la condición de unión (más detalles en la siguiente sección; la diferencia entre la unión interna y la unión natural).

SQLite IZQUIERDA ÚNICA EXTERNA

El estándar SQL define tres tipos de UNIONES EXTERNAS: IZQUIERDA, DERECHA y COMPLETA, pero SQLite solo admite la UNIÓN EXTERIOR 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 siguiente ejemplo, probaremos el “LEFT JOIN” 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

  • SQLite La sintaxis de 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

SQLite Ejemplo de UNIÓN EXTERIOR IZQUIERDA

  • 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:

SQLite IZQUIERDA ÚNICA EXTERNA

SQLite IZQUIERDA ÚNICA EXTERNA

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.

SQLite UNIÓN CRUZADA

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 es necesario especificar una condición de unión, porque SQLite no lo necesita para la UNIÓN CRUZADA.

Los SQLite dará como resultado 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).
  • De igual forma, dos filas combinando el segundo valor de la colA que es 2 con los dos valores de la colB (3,4) que son (2,3), (2,4).

Ejemplo

En la siguiente consulta intentaremos realizar un CROSS JOIN entre las tablas Estudiantes y Departamentos:

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

Explicación

  • En Los SQLite seleccione 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

SQLite Ejemplo de unión cruzada

Como puede ver, el resultado son 40 filas; 10 valores de la tabla de estudiantes coincidentes con los 4 departamentos de la tabla de departamentos. Como se muestra a continuación:

  • 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.

Resum

Gracias a SQLite UNIRSE a la consulta, puede vincular una o más tablas o subconsultas para seleccionar columnas de ambas tablas o subconsultas.