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