SQLite - UNE

SQLite JoinsLa cláusula se utiliza para combinar registros de dos o más tablas en una base de datos. Un JOIN es un medio para combinar campos de dos tablas utilizando valores comunes a cada uno.

SQL define tres tipos principales de combinaciones:

  • LA CRUZ SE UNE
  • El INNER JOIN
  • La UNIÓN EXTERIOR

Antes de continuar, consideremos dos tablas EMPRESA y DEPARTAMENTO. Ya hemos visto instrucciones INSERT para completar la tabla EMPRESA. Así que supongamos que la lista de registros disponibles en la tabla EMPRESA -

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

Otra tabla es DEPARTAMENTO con la siguiente definición:

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

Aquí está la lista de declaraciones INSERT para completar 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 disponibles en la tabla DEPARTMENT:

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

LA CRUZ SE UNE

CROSS JOIN hace coincidir cada fila de la primera tabla con cada fila de la segunda tabla. Si las tablas de entrada tienen filas xey, respectivamente, la tabla resultante tendrá filas x * y. Debido a que los CROSS JOIN tienen el potencial de generar tablas extremadamente grandes, se debe tener cuidado de usarlos solo cuando sea apropiado.

A continuación se muestra la sintaxis de CROSS JOIN:

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

Según las tablas anteriores, puede escribir un 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        Engineering
7           Paul        Finance
1           Allen       IT Billing
2           Allen       Engineering
7           Allen       Finance
1           Teddy       IT Billing
2           Teddy       Engineering
7           Teddy       Finance
1           Mark        IT Billing
2           Mark        Engineering
7           Mark        Finance
1           David       IT Billing
2           David       Engineering
7           David       Finance
1           Kim         IT Billing
2           Kim         Engineering
7           Kim         Finance
1           James       IT Billing
2           James       Engineering
7           James       Finance

El INNER JOIN

INNER JOIN crea una nueva tabla de resultados combinando valores de columna de dos tablas (table1 y table2) según el predicado de unión. La consulta compara cada fila de table1 con cada fila de table2 para encontrar todos los pares de filas que satisfacen el predicado de unión. Cuando se satisface el predicado de unión, los valores de columna para cada par de filas coincidentes de A y B se combinan en una fila de resultados.

Una INNER JOIN es el tipo de unión más común y predeterminado. Puede utilizar la palabra clave INNER opcionalmente.

A continuación se muestra la sintaxis de INNER JOIN:

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

Para evitar la redundancia y mantener la redacción más corta, las condiciones INNER JOIN se pueden declarar con un USINGexpresión. Esta expresión especifica una lista de una o más columnas.

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

UN NATURAL JOIN es similar a un JOIN...USING, solo prueba automáticamente la igualdad entre los valores de cada columna que existe en ambas tablas -

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

Según las tablas anteriores, puede escribir una 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       Engineering
7           James       Finance

La UNIÓN EXTERIOR

OUTER JOIN es una extensión de INNER JOIN. Aunque el estándar SQL define tres tipos de OUTER JOINs: LEFT, RIGHT y FULL, SQLite solo admiteLEFT OUTER JOIN.

Los OUTER JOIN tienen una condición que es idéntica a los INNER JOIN, expresados ​​con una palabra clave ON, USING o NATURAL. La tabla de resultados inicial se calcula de la misma manera. Una vez que se calcula el JOIN primario, un OUTER JOIN tomará las filas no unidas de una o ambas tablas, las rellenará con NULL y las agregará a la tabla resultante.

A continuación se muestra la sintaxis de LEFT OUTER JOIN:

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

Para evitar la redundancia y mantener la redacción más corta, las condiciones OUTER JOIN se pueden declarar con una expresión USING. Esta expresión especifica una lista de una o más columnas.

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

Según las tablas anteriores, puede escribir una combinación interna 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       Engineering
            Teddy
            Mark
            David
            Kim
7           James       Finance