Junção SQLite

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 artistse albumsdo 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 artistse albums, você pode usar uma cláusula INNER JOIN, LEFT JOINou . CROSS JOINCada 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 JOINand 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 JOINcláusula corresponde cada linha da albumstabela com cada linha da artiststabela com base na condição de junção ( artists.ArtistId = albums.ArtistId) especificada após a ONpalavra-chave.

Se a condição de junção for avaliada como verdadeira (ou 1), as colunas de linhas das tabelas albumse artistsserão incluídas no conjunto de resultados.

Esta consulta usa aliases de tabela ( lpara a albumstabela e rpara artiststabela) 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 USINGsintaxe 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 artistse albumsusando a LEFT JOINclá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:

junção sqlite - exemplo de junção esquerda

A LEFT JOINclá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 artiststabela (ou tabela esquerda) e as linhas correspondentes da albumstabela (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 NULLpara as colunas da tabela direita.

Semelhante à INNER JOINcláusula, você pode usar a USINGsintaxe 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 WHEREclá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:

sqlite join - left join com um exemplo de cláusula where

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 JOINe LEFT OUTER JOINsão sinônimos.

SQLiteCROSS JOIN

A CROSS JOINcláusula cria um produto cartesiano de linhas das tabelas unidas.

Ao contrário das cláusulas INNER JOINand LEFT JOIN, a CROSS JOINnão possui uma condição de junção. Aqui está a sintaxe básica da CROSS JOINcláusula:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Combina CROSS JOINcada linha da primeira tabela ( table1) com cada linha da segunda tabela ( table2) para formar o conjunto de resultados.

Se a primeira tabela tiver Nlinhas, a segunda tabela tiver Mlinhas, o resultado final terá NxMlinhas.

Um exemplo prático da CROSS JOINclá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 productse 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 JOINclá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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *