sql >> Base de Datos >  >> RDS >> SQLite

Unirse a SQLite

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.