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.