English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Junção SQLite

SQLite JunçõesA cláusula é usada para combinar registros de duas ou mais tabelas em um banco de dados. JOIN é um método para combinar campos de duas tabelas usando valores comuns em cada uma

O SQL define três tipos principais de junções-

  • Juntura cruzada

  • JOIN interno

  • conexão externa

Antes de continuar, vamos considerar duas tabelas: COMPANY e DEPARTMENT. Já vimos as instruções INSERT para preencher a tabela COMPANY. Portanto, vamos assumir que a lista de registros disponíveis na tabela COMPANY-

ID NAME AGE ADDRESS SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Outra tabela é DEPARTMENT, com as seguintes definições-

CREATE TABLE DEPARTMENT
   ID INT PRIMÁRIA CHAVE NOT NULL
   DEPT					CHAR(50) NOT NULL,
   EMP_ID				INT			NOT NULL
);

Esta é a lista de declarações INSERT usadas para preencher a tabela DEPARTMENT-

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'Billing de TI', 1 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engenharia', 2 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finanças', 7 );

Por fim, temos a seguinte lista de registros disponíveis na tabela DEPARTMENT-

ID				DEPT				EMP_ID
----------  ----------  ----------
1           Billing de TI  1
2           Engenharia 2
3           Finanças     7

CROSS JOIN - Juntura cruzada

CROSS JOIN combina cada linha da primeira tabela com cada linha da segunda tabela. Se as tabelas de entrada possuírem x e y linhas, a tabela de resultado terá x * y linhas. Devido ao CROSS JOIN poder gerar tabelas muito grandes, deve-se ter atenção para usá-los apenas quando apropriado.

Aqui está a sintaxe do CROSS JOIN:-

SELECT ... FROM tabela1 CROSS JOIN table2 ...

Segundo a tabela acima, você pode escrever CROSS JOIN da seguinte forma:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

A consulta acima produzirá os seguintes resultados-

EMP_ID  NOME  DEPT
----------  ----------  ----------
1           Paul  IT Faturamento
2           Paul				Engenharia
7           Paul				Finanças
1           Allen			Billing de TI
2           Allen  Engenharia
7           Allen			Finanças
1           Teddy			Billing de TI
2           Teddy			Engenharia
7           Teddy			Finanças
1           Mark				Billing de TI
2           Mark				Engenharia
7           Mark				Finanças
1           David			Billing de TI
2           David			Engenharia
7           David			Finanças
1           Kim			Billing de TI
2           Kim			Engenharia
7           Kim			Finanças
1           James			Billing de TI
2           James			Engenharia
7           James  Finance

INNER JOIN - JOIN interno

INNER JOIN combina duas tabelas (tabela1e a tabela2) para criar uma nova tabela de resultado. A consulta preencherá a tabela1de cada linha com a tabela2de cada linha para comparar com a tabela

O INNER JOIN é o tipo mais comum de JOIN padrão. Você pode optar por usar a palavra-chave INNER.

Aqui está a sintaxe do INNER JOIN-

SELECT ... FROM tabela1 [INNER] JOIN tabela2 ON expressão_condicional ...

Para evitar redundância e encurtar a frase, você pode usarUSINGA expressão declara a condição do JOIN interno. Esta expressão especifica uma lista de uma ou mais colunas.

SELECT ... FROM tabela1 JOIN tabela2 USING ( coluna1 ,... ) ...

JOIN NATURAL comJOIN...USINGNaturalmente semelhante, apenas ele testa automaticamente se os valores de cada coluna nas duas tabelas são iguais-

SELECT ... FROM tabela1 JOIN NATURAL tabela2...

Baseado na tabela acima, você pode escrever um INNER JOIN, conforme mostrado a seguir:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

A consulta acima produzirá os seguintes resultados-

EMP_ID  NOME  DEPT
----------  ----------  ----------
1           Paul  IT Faturamento
2           Allen  Engenharia
7           James  Finance

OUTER JOIN - conexão externa

O JOIN externo é uma extensão do JOIN interno. Embora o padrão SQL defina três tipos de JOIN externo: LEFT, RIGHT e FULL, o SQLite suporta apenasLEFT OUTER JOIN.

As condições do JOIN externo e do JOIN interno são as mesmas, representadas pelos termos ON, USING ou NATURAL. O cálculo da tabela de resultado inicial é o mesmo. Assim que o JOIN principal é calculado, o JOIN externo obterá todas as linhas não conectadas de uma ou duas tabelas, preencherá-as com NULL e as adicionará à tabela de resultado.

Aqui está a sintaxe do LEFT OUTER JOIN-

SELECT ... FROM tabela1 LEFT OUTER JOIN tabela2 ON expressão_condicional ...

Para evitar redundância e encurtar a frase, você pode usar a expressão USING para declarar a condição do JOIN externo. Esta expressão especifica uma lista de uma ou mais colunas.

SELECT ... FROM tabela1 LEFT OUTER JOIN tabela2 USING ( coluna1 ,... ) ...

Baseado na tabela acima, você pode escrever uma JOIN interna, conforme mostrado a seguir:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

A consulta acima produzirá os seguintes resultados-

EMP_ID  NOME  DEPT
----------  ----------  ----------
1           Paul  IT Faturamento
2           Allen  Engenharia
            Teddy
            Mark
            David
            Kim
7           James  Finance