Tablas de unión SQLite: interior, natural, exterior izquierdo, cruzado (ejemplos)

Tabla de contenido:

Anonim

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

En este tutorial, aprenderá:

  • Introducción a la cláusula JOIN de SQLite
  • UNIR INTERNAMENTE
  • ÚNETE ... USANDO
  • UNIÓN NATURAL
  • IZQUIERDA COMBINACIÓN EXTERNA
  • ÚNETE CRUZADO

Introducción a la cláusula JOIN de SQLite

Cuando trabaja en una base de datos con múltiples 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, puede definir por qué columna necesita vincular las tablas y por qué condiciones.

Cualquier cláusula JOIN debe tener la siguiente sintaxis:

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).
  • Operador JOIN: especifique el tipo de combinación (INNER JOIN, LEFT OUTER JOIN o CROSS JOIN).
  • Restricción de unión: 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 las filas coincidentes que coincidan con esa condición se seleccionarán según el tipo de unión.

Tenga en cuenta que, para todos los siguientes ejemplos, debe ejecutar sqlite3.exe y abrir una conexión a la base de datos de muestra mientras fluye:

Paso 1) En este paso,

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

Paso 2) Abra la base de datos " TutorialsSampleDB.db " con el siguiente comando:

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

INNER JOIN SQLite

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

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:

SELECCIONEStudents.StudentName,Departments.DepartmentNameDE EstudiantesINNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explicación del código:

INNER JOIN funciona de la siguiente manera:

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

Producción:

  • INNER JOIN produce los registros de ambos - los estudiantes y las tablas del departamento que coinciden con la condición que es " S tudents.DepartmentId = Departments.DepartmentId ". 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 regresaron de esta consulta con 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 departmentId de la tabla de departamentos. Como sigue:

SQLite JOIN ... USANDO

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

Puede usar "JOIN ... USING" siempre que las columnas que comparará en la condición de combinació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 "UNIRSE

... USANDO "no escribe una condición de unión, simplemente escribe la columna de unión que es común entre las dos tablas unidas, en lugar de escribir table1" INNER JOIN table2 ON table1.cola = table2.cola "lo escribimos como" table1 UNIRSE a table2 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:

SELECCIONEStudents.StudentName,Departments.DepartmentNameDE EstudiantesINNER JOIN Departamentos USING (DepartmentId);

Explicación

  • A diferencia del ejemplo anterior, no escribimos " ON Students.DepartmentId = Departments.DepartmentId ". Simplemente escribimos " USING (DepartmentId) ".
  • SQLite infiere la condición de unión automáticamente y compara el ID de departamento de ambas tablas: Estudiantes y Departamentos.
  • Puede utilizar esta sintaxis siempre que las dos columnas que está comparando tengan el mismo nombre.

Producción

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

UNIÓN NATURAL DE SQLite

Un NATURAL JOIN es similar a un 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 INNER JOIN y NATURAL JOIN:

  • En INNER JOIN, debe especificar una condición de combinación que la combinación interna utiliza para unir las dos tablas. Mientras que en la combinación natural, no escribe una condición de combinación. Simplemente escriba los nombres de las dos tablas sin ninguna condición. Luego, la combinación natural probará automáticamente la igualdad entre los valores para cada columna que exista 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 columna en común (las dos columnas existen con el mismo nombre en las dos tablas), entonces la combinación natural unirá las dos tablas comparando los valores de ambas columnas y no solo de una. columna.

Ejemplo

SELECCIONEStudents.StudentName,Departments.DepartmentNameDE EstudiantesDepartamentos de Natural JOIN;

Explicación

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

Producción

  • 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 combinación interna y luego en una combinación natural. Por ejemplo, si hay más tablas con los mismos nombres, la combinación natural hará coincidir todas las columnas entre sí. Sin embargo, la combinación interna coincidirá solo con las columnas en la condición de combinación (más detalles en la siguiente sección; la diferencia entre la combinación interna y la combinación natural).

UNIÓN EXTERIOR IZQUIERDA DE SQLite

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

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 consulta, por lo que independientemente de que el valor coincida con la condición de unión o no, 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 combinación, contendrá un valor "nulo".

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

Ejemplo

En el siguiente ejemplo, probaremos el "LEFT JOIN" para unir las dos tablas "Estudiantes" y "Departamentos":

SELECCIONEStudents.StudentName,Departments.DepartmentNameDE Estudiantes: esta es la tabla de la izquierdaLEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explicación

  • La sintaxis de LEFT JOIN es la misma que INNER JOIN; escribe LEFT JOIN entre las dos tablas, y luego la condición de combinació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 de la combinación de la izquierda es la tabla de la derecha.
  • La cláusula OUTER es opcional; LEFT OUTER JOIN es lo mismo que LEFT JOIN.

Producción

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

Démosle a la consulta anterior usando la combinación de la izquierda una explicación más profunda usando diagramas de Van:

LEFT JOIN le dará a todos los estudiantes los nombres 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 no coincidentes.

UNIÓN CRUZADA DE SQLite

A CROSS JOIN da el producto cartesiano para las columnas seleccionadas de las dos tablas unidas, haciendo 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 la necesita para CROSS JOIN.

El SQLite dará como resultado un conjunto de resultados lógicos 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). El colA contiene dos valores (1,2) y el colB también contiene dos valores (3,4).

Entonces el resultado de CROSS JOIN será 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).
  • Del mismo modo, 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 la siguiente consulta intentaremos CROSS JOIN entre las tablas de Estudiantes y Departamentos:

SELECCIONEStudents.StudentName,Departments.DepartmentNameDE EstudiantesDepartamentos CROSS JOIN;

Explicación

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

Producción:

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

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

    … etcétera.

Resumen

Con SQLite JOIN, puede vincular una o más tablas o subconsultas para seleccionar columnas de ambas tablas o subconsultas.