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 as tabelas artists
e albums
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 tabelas artists
e albums
, você pode usar uma cláusula INNER JOIN
, LEFT JOIN
ou . CROSS JOIN
Cada cláusula de junção determina como o SQLite usa dados de uma tabela para corresponder às linhas de outra tabela.
Observe que o SQLite não suporta diretamente o RIGHT JOIN
and FULL OUTER JOIN
.
SQLiteINNER JOIN
A instrução a seguir retorna os títulos dos álbuns e seus nomes de artistas:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída parcial:
Neste exemplo, a INNER JOIN
cláusula corresponde cada linha da albums
tabela com cada linha da artists
tabela com base na condição de junção ( artists.ArtistId = albums.ArtistId
) especificada após a ON
palavra-chave.
Se a condição de junção for avaliada como verdadeira (ou 1), as colunas de linhas das tabelas albums
e artists
serão incluídas no conjunto de resultados.
Esta consulta usa aliases de tabela ( l
para a albums
tabela e r
para artists
tabela) para encurtar a consulta:
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Caso os nomes das colunas das tabelas unidas sejam iguais, por exemplo ArtistId
, você pode usar a USING
sintaxe da seguinte forma:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A cláusula USING(ArtistId)
é equivalente à cláusula ON artists.ArtistId = albums.ArtistId
.
SQLiteLEFT JOIN
Esta declaração seleciona os nomes dos artistas e títulos dos álbuns das tabelas artists
e albums
usando a LEFT JOIN
cláusula:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
A LEFT JOIN
cláusula seleciona dados começando na tabela esquerda ( artists
) e linhas correspondentes na tabela direita ( albums
) com base na condição de junção ( artists.ArtistId = albums.ArtistId
).
A junção esquerda retorna todas as linhas da artists
tabela (ou tabela esquerda) e as linhas correspondentes da albums
tabela (ou tabela direita).
Se uma linha da tabela esquerda não tiver uma linha correspondente na tabela direita, o SQLite inclui colunas das linhas da tabela esquerda e NULL
para as colunas da tabela direita.
Semelhante à INNER JOIN
cláusula, você pode usar a USING
sintaxe para a condição de junção da seguinte maneira:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se quiser encontrar artistas que não possuem nenhum álbum, você pode adicionar uma WHERE
cláusula conforme mostrado na seguinte consulta:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
WHERE Title IS NULL
ORDER BY Name;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta imagem mostra a saída parcial:
Geralmente, esse tipo de consulta permite encontrar linhas que estão disponíveis na tabela da esquerda, mas que não possuem linhas correspondentes na tabela da direita.
Observe que LEFT JOIN
e LEFT OUTER JOIN
são sinônimos.
SQLiteCROSS JOIN
A CROSS JOIN
cláusula cria um produto cartesiano de linhas das tabelas unidas.
Ao contrário das cláusulas INNER JOIN
and LEFT JOIN
, a CROSS JOIN
não possui uma condição de junção. Aqui está a sintaxe básica da CROSS JOIN
cláusula:
SELECT
select_list
FROM table1
CROSS JOIN table2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Combina CROSS JOIN
cada linha 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 tiver M
linhas, o resultado final terá NxM
linhas.
Um exemplo prático da CROSS JOIN
cláusula é combinar dois conjuntos de dados para formar um conjunto inicial de dados para processamento posterior. Por exemplo, você tem uma lista de produtos e meses e deseja fazer um plano para vender quais produtos.
O script a seguir cria as tabelas products
e calendars
:
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);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta consulta utiliza a CROSS JOIN
cláusula para combinar os produtos com os meses:
SELECT *
FROM products
CROSS JOIN calendars;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Neste tutorial, você aprendeu vários tipos de junções SQLite que permitem consultar várias tabelas.