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

Unión interna de SQLite

Resumen :este tutorial le muestra cómo usar la cláusula de combinación interna de SQLite para consultar datos de varias tablas.

Introducción a la cláusula de unión interna de SQLite

En las bases de datos relacionales, los datos a menudo se distribuyen en muchas tablas relacionadas. Una tabla se asocia con otra tabla mediante claves foráneas.

Para consultar datos de varias tablas, usa INNER JOIN cláusula. La INNER JOIN La cláusula combina columnas de tablas correlacionadas.

Suponga que tiene dos tablas:A y B.

A tiene columnas a1, a2 y f. B tiene columnas b1, b2 y f. La tabla A se vincula a la tabla B mediante una columna de clave externa denominada f.

A continuación se ilustra la sintaxis de la cláusula de unión interna:

SELECT a1, a2, b1, b2
FROM A
INNER JOIN B on B.f = A.f;Code language: SQL (Structured Query Language) (sql)

Para cada fila en la tabla A, el INNER JOIN La cláusula compara el valor de la columna f con el valor de la columna f en la tabla B. Si el valor de la columna f en la tabla A es igual al valor de la columna f en la tabla B, combina datos de las columnas a1, a2, b1, b2 e incluye esta fila en el conjunto de resultados.

En otras palabras, el INNER JOIN cláusula devuelve filas de la tabla A que tiene la fila correspondiente en la tabla B.

Esta lógica se aplica si te unes a más de 2 mesas.

Vea el siguiente ejemplo.

Solo las filas de la tabla A:(a1,1), (a3,3) tienen las filas correspondientes de la tabla B (b1,1), (b2,3) se incluyen en el conjunto de resultados.

El siguiente diagrama ilustra el INNER JOIN cláusula:

SQLite INNER JOIN ejemplos

Echemos un vistazo a las tracks y albums tablas en la base de datos de ejemplo. Las tracks la tabla enlaza con los albums tabla a través de AlbumId columna.

En las tracks tabla, el AlbumId columna es una clave foránea. Y en los albums tabla, el AlbumId es la clave principal.

Para consultar datos de ambas tracks y albums tablas, utiliza la siguiente instrucción:

SELECT
	trackid,
	name,
	title
FROM
	tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;Code language: SQL (Structured Query Language) (sql)

Pruébalo

Para cada fila en la tabla de pistas, SQLite usa el valor en el albumid columna de las tracks tabla para comparar con el valor en el albumid de los albums mesa. Si SQLite encuentra una coincidencia, combina datos de filas en ambas tablas en el conjunto de resultados.

Puede incluir el AlbumId columnas de ambas tablas en el conjunto de resultados final para ver el efecto.

SELECT
    trackid,
    name,
    tracks.albumid AS album_id_tracks,
    albums.albumid AS album_id_albums,
    title
FROM
    tracks
    INNER JOIN albums ON albums.albumid = tracks.albumid;Code language: SQL (Structured Query Language) (sql)

Pruébalo

Unión interna de SQLite:ejemplo de 3 tablas

Ver las siguientes tablas:tracks albums y artists

Una pista pertenece a un álbum y un álbum tiene muchas pistas. Las tracks tabla asociada con los albums tabla a través de albumid columna.

Un álbum pertenece a un artista y un artista tiene uno o varios álbumes. Los albums enlaces de la tabla a los artists tabla a través de artistid columna.

Para consultar datos de estas tablas, debe usar dos cláusulas de unión interna en el SELECT declaración de la siguiente manera:

SELECT
    trackid,
    tracks.name AS track,
    albums.title AS album,
    artists.name AS artist
FROM
    tracks
    INNER JOIN albums ON albums.albumid = tracks.albumid
    INNER JOIN artists ON artists.artistid = albums.artistid;Code language: SQL (Structured Query Language) (sql)

Pruébalo

Puede usar una cláusula WHERE para obtener las pistas y álbumes del artista con id 10 como la siguiente declaración:

SELECT
	trackid,
	tracks.name AS Track,
	albums.title AS Album,
	artists.name AS Artist
FROM
	tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid
WHERE
	artists.artistid = 10;Code language: SQL (Structured Query Language) (sql)

Pruébalo

En este tutorial, ha aprendido a usar SQLite INNER JOIN cláusula para consultar datos de varias tablas.