Resumen :en este tutorial, aprenderá sobre varios tipos de uniones de SQLite para consultar datos de dos o más tablas.
Para la demostración, usaremos los artists
y albums
tablas de la base de datos de ejemplo.
Un artista puede tener cero o varios álbumes, mientras que un álbum pertenece a un artista.
Para consultar datos de ambos artists
y albums
tablas, puede usar un INNER JOIN
, LEFT JOIN
, o CROSS JOIN
cláusula. Cada cláusula de unión determina cómo SQLite utiliza los datos de una tabla para hacer coincidir las filas de otra tabla.
Tenga en cuenta que SQLite no es compatible directamente con RIGHT JOIN
y FULL OUTER JOIN
.
SQLite INNER JOIN
La siguiente declaración devuelve los títulos de los álbumes y sus nombres de artista:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Aquí está la salida parcial:
En este ejemplo, INNER JOIN
la cláusula coincide con cada fila de los albums
tabla con cada fila de los artists
tabla basada en la condición de unión (artists.ArtistId = albums.ArtistId
) especificado después de ON
palabra clave.
Si la condición de unión se evalúa como verdadera (o 1), las columnas de filas de ambos albums
y artists
las tablas se incluyen en el conjunto de resultados.
Esta consulta utiliza alias de tabla (l
para los albums
tabla y r
para artists
tabla) para acortar la consulta:
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)
En caso de que los nombres de las columnas de las tablas unidas sean los mismos, por ejemplo, ArtistId
, puede usar el USING
sintaxis de la siguiente manera:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);
Code language: SQL (Structured Query Language) (sql)
La cláusula USING(ArtistId)
es equivalente a la cláusula ON artists.ArtistId = albums.ArtistId
.
SQLite LEFT JOIN
Esta declaración selecciona los nombres de los artistas y los títulos de los álbumes de los artists
y albums
tablas usando LEFT JOIN
cláusula:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Aquí está la salida:
El LEFT JOIN
cláusula selecciona datos a partir de la tabla de la izquierda (artists
) y filas coincidentes en la tabla de la derecha (albums
) según la condición de unión (artists.ArtistId = albums.ArtistId
).
La combinación izquierda devuelve todas las filas de los artists
tabla (o tabla de la izquierda) y las filas correspondientes de los albums
mesa (o mesa de la derecha).
Si una fila de la tabla de la izquierda no tiene una fila coincidente en la tabla de la derecha, SQLite incluye las columnas de las filas de la tabla de la izquierda y NULL
para las columnas de la tabla de la derecha.
Similar a INNER JOIN
cláusula, puede usar el USING
sintaxis para la condición de unión de la siguiente manera:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;
Code language: SQL (Structured Query Language) (sql)
Si desea encontrar artistas que no tienen ningún álbum, puede agregar un WHERE
cláusula como se muestra en la siguiente consulta:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
WHERE Title IS NULL
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Esta imagen muestra la salida parcial:
Generalmente, este tipo de consulta le permite encontrar filas que están disponibles en la tabla de la izquierda pero que no tienen filas correspondientes en la tabla de la derecha.
Tenga en cuenta que LEFT JOIN
y LEFT OUTER JOIN
son sinónimos.
SQLite CROSS JOIN
El CROSS JOIN
cláusula crea un producto cartesiano de filas de las tablas unidas.
A diferencia de INNER JOIN
y LEFT JOIN
cláusulas, un CROSS JOIN
no tiene una condición de unión. Esta es la sintaxis básica de CROSS JOIN
cláusula:
SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
El CROSS JOIN
combina cada fila de la primera tabla (table1
) con cada fila de la segunda tabla (table2
) para formar el conjunto de resultados.
Si la primera tabla tiene N
filas, la segunda tabla tiene M
filas, el resultado final tendrá NxM
filas.
Un ejemplo práctico del CROSS JOIN
La cláusula es combinar dos conjuntos de datos para formar un conjunto de datos inicial para su posterior procesamiento. Por ejemplo, tiene una lista de productos y meses, y quiere hacer un plan de cuándo puede vender qué productos.
El siguiente script crea los products
y calendars
tablas:
CREATE TABLE products(
product text NOT null
);
INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');
CREATE TABLE calendars(
y int NOT NULL,
m int NOT NULL
);
INSERT INTO calendars(y,m)
VALUES
(2019,1),
(2019,2),
(2019,3),
(2019,4),
(2019,5),
(2019,6),
(2019,7),
(2019,8),
(2019,9),
(2019,10),
(2019,11),
(2019,12);
Code language: SQL (Structured Query Language) (sql)
Esta consulta utiliza CROSS JOIN
cláusula para combinar los productos con los meses:
SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)
Aquí está la salida:
En este tutorial, ha aprendido varios tipos de combinaciones de SQLite que le permiten consultar desde varias tablas.