Resumo :neste tutorial, você aprenderá sobre vários tipos de junções SQLite para consultar dados de duas ou mais tabelas.
Para a demonstração, usaremos os
artists
e albums
tabelas do banco de dados de exemplo. Um artista pode ter zero ou muitos álbuns enquanto um álbum pertence a um artista.
Para consultar dados de ambos os
artists
e albums
tabelas, você pode usar um INNER JOIN
, LEFT JOIN
, ou CROSS JOIN
cláusula. Cada cláusula de junção determina como o SQLite usa os dados de uma tabela para corresponder às linhas de outra tabela. Observe que o SQLite não suporta diretamente o
RIGHT JOIN
e FULL OUTER JOIN
. SQLite INNER JOIN
A declaração a seguir retorna os títulos dos álbuns e os nomes dos artistas:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Aqui está a saída parcial:
Neste exemplo, o
INNER JOIN
cláusula corresponde a cada linha dos albums
tabela com cada linha dos artists
tabela com base na condição de junção (artists.ArtistId = albums.ArtistId
) especificado após o ON
palavra-chave. Se a condição de junção for avaliada como verdadeira (ou 1), as colunas de linhas de ambos os
albums
e artists
tabelas são incluídas no conjunto de resultados. Esta consulta usa aliases de tabela (
l
para os albums
tabela e r
para artists
table) para encurtar a 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)
Caso os nomes das colunas das tabelas unidas sejam iguais, por exemplo,
ArtistId
, você pode usar o USING
sintaxe da seguinte forma:SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);
Code language: SQL (Structured Query Language) (sql)
A cláusula
USING(ArtistId)
é equivalente à cláusula ON artists.ArtistId = albums.ArtistId
. SQLite LEFT JOIN
Esta declaração seleciona os nomes dos artistas e os títulos dos álbuns dos
artists
e albums
tabelas usando o 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)
Aqui está a saída:
O
LEFT JOIN
cláusula seleciona os dados a partir da tabela à esquerda (artists
) e as linhas correspondentes na tabela correta (albums
) com base na condição de junção (artists.ArtistId = albums.ArtistId
). A junção esquerda retorna todas as linhas dos
artists
tabela (ou tabela esquerda) e as linhas correspondentes dos albums
mesa (ou mesa direita). Se uma linha da tabela à esquerda não tiver uma linha correspondente na tabela à direita, o SQLite incluirá colunas das linhas da tabela à esquerda e
NULL
para as colunas da tabela direita. Semelhante ao
INNER JOIN
cláusula, você pode usar a cláusula USING
sintaxe para a condição de junção da seguinte forma:SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;
Code language: SQL (Structured Query Language) (sql)
Se você quiser encontrar artistas que não têm nenhum álbum, você pode adicionar um
WHERE
cláusula conforme mostrado na consulta a seguir: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 imagem mostra a saída parcial:
Geralmente, esse tipo de consulta permite encontrar linhas disponíveis na tabela à esquerda, mas que não possuem linhas correspondentes na tabela à direita.
Observe que
LEFT JOIN
e LEFT OUTER JOIN
são sinônimos. SQLite CROSS JOIN
O
CROSS JOIN
cláusula cria um produto cartesiano de linhas das tabelas unidas. Ao contrário do
INNER JOIN
e LEFT JOIN
cláusulas, um CROSS JOIN
não tem uma condição de junção. Aqui está a sintaxe básica do CROSS JOIN
cláusula:SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
O
CROSS JOIN
combina todas as linhas da primeira tabela (table1
) com cada linha da segunda tabela (table2
) para formar o conjunto de resultados. Se a primeira tabela tiver
N
linhas, a segunda tabela tem M
linhas, o resultado final terá NxM
linhas. Um exemplo prático do
CROSS JOIN
cláusula é combinar dois conjuntos de dados para formar um conjunto de dados inicial para processamento posterior. Por exemplo, você tem uma lista de produtos e meses e deseja planejar quando poderá vender quais produtos. O script a seguir cria os
products
e calendars
tabelas: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 usa o
CROSS JOIN
cláusula para combinar os produtos com os meses:SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)
Aqui está a saída:
Neste tutorial, você aprendeu vários tipos de junções SQLite que permitem consultar várias tabelas.