SQLite Join

de SQLiteJoinLa cláusula se utiliza para combinar registros de dos o más tablas en la base de datos. JOIN es un medio para combinar campos de dos tablas mediante valores comunes.

SQL define tres tipos principales de combinaciones:

  • Combinación cruzada - CROSS JOIN

  • Combinación interna - INNER JOIN

  • Combinación externa - OUTER JOIN

Antes de continuar, supongamos que tenemos dos tablas: COMPANY y DEPARTMENT. Ya hemos visto las sentencias INSERT utilizadas para poblar la tabla COMPANY. Ahora supongamos que la lista de registros de la tabla COMPANY es la siguiente:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

La otra tabla es DEPARTMENT, definida de la siguiente manera:

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

A continuación se muestran las sentencias INSERT para poblar la tabla DEPARTMENT:

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );

Finalmente, tenemos la siguiente lista de registros en la tabla DEPARTMENT:

ID          DEPT        EMP_ID
----------  ----------  ----------
1           IT Billing  1
2           Engineerin  2
3           Finance     7

Combinación cruzada - CROSS JOIN

La combinación cruzada (CROSS JOIN) empareja cada fila de la primera tabla con cada fila de la segunda tabla. Si las dos tablas de entrada tienen x e y filas respectivamente, la tabla resultante tendrá x*y filas. Dado que la combinación cruzada (CROSS JOIN) puede producir tablas muy grandes, se debe usar con precaución y solo cuando sea apropiado.

La operación de combinación cruzada devuelve el producto cartesiano de todas las filas de datos de las dos tablas combinadas. El número de filas devuelto es igual al número de filas que cumplen la condición de consulta en la primera tabla multiplicado por el número de filas que cumplen la condición de consulta en la segunda tabla.

A continuación se muestra la sintaxis de la combinación cruzada (CROSS JOIN):

SELECT ... FROM table1 CROSS JOIN table2 ...

Basándonos en las tablas anteriores, podemos escribir una combinación cruzada (CROSS JOIN) de la siguiente manera:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

La consulta anterior producirá el siguiente resultado:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Paul        Engineerin
7           Paul        Finance
1           Allen       IT Billing
2           Allen       Engineerin
7           Allen       Finance
1           Teddy       IT Billing
2           Teddy       Engineerin
7           Teddy       Finance
1           Mark        IT Billing
2           Mark        Engineerin
7           Mark        Finance
1           David       IT Billing
2           David       Engineerin
7           David       Finance
1           Kim         IT Billing
2           Kim         Engineerin
7           Kim         Finance
1           James       IT Billing
2           James       Engineerin
7           James       Finance

Combinación interna - INNER JOIN

La combinación interna (INNER JOIN) crea una nueva tabla de resultados combinando los valores de las columnas de dos tablas (table1 y table2) según un predicado de combinación. La consulta compara cada fila de table1 con cada fila de table2 y encuentra todos los pares de filas que cumplen el predicado de combinación. Cuando se cumple el predicado, los valores de las columnas de cada par coincidente de filas A y B se fusionan en una fila de resultado.

La combinación interna (INNER JOIN) es el tipo de combinación más común y es el tipo de combinación predeterminado. La palabra clave INNER es opcional.

A continuación se muestra la sintaxis de la combinación interna (INNER JOIN):

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

Para evitar redundancia y mantener una redacción más breve, se puede usarUSINGuna expresión para declarar la condición de la combinación interna (INNER JOIN). Esta expresión especifica una lista de una o más columnas:

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

La combinación natural (NATURAL JOIN) es similar aJOIN...USINGsolo que comprueba automáticamente la igualdad de valores entre cada columna que existe en ambas tablas:

SELECT ... FROM table1 NATURAL JOIN table2...

Basándonos en las tablas anteriores, podemos escribir una combinación interna (INNER JOIN) de la siguiente manera:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

La consulta anterior producirá el siguiente resultado:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineerin
7           James       Finance

Combinación externa - OUTER JOIN

La combinación externa (OUTER JOIN) es una extensión de la combinación interna (INNER JOIN). Aunque el estándar SQL define tres tipos de combinaciones externas: LEFT, RIGHT y FULL, SQLite solo admitela combinación externa izquierda (LEFT OUTER JOIN)。

La forma de declarar la condición en la combinación externa (OUTER JOIN) es la misma que en la combinación interna (INNER JOIN), utilizando las palabras clave ON, USING o NATURAL. La tabla de resultados inicial se calcula de la misma manera. Una vez que se completa la combinación principal, la combinación externa (OUTER JOIN) incorpora cualquier fila no combinada de una o ambas tablas, utilizando valores NULL para las columnas de la combinación externa, y las agrega a la tabla de resultados.

A continuación se muestra la sintaxis de la combinación externa izquierda (LEFT OUTER JOIN):

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

Para evitar redundancia y mantener una redacción más breve, se puede usarUSINGuna expresión para declarar la condición de la combinación externa (OUTER JOIN). Esta expresión especifica una lista de una o más columnas:

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

Basándonos en las tablas anteriores, podemos escribir una combinación externa (OUTER JOIN) de la siguiente manera:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

La consulta anterior producirá el siguiente resultado:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineerin
            Teddy
            Mark
            David
            Kim
7           James       Finance
Otras extensiones