SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Associaçã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 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.