ADERIR

Aplica-se a:verificar a verificação sim do SQL do Databricks marcada como sim Databricks Runtime

Combina as linhas de duas referências de tabela com base em critérios de associação.

Sintaxe

left_table_reference { [ join_type ] JOIN right_table_reference join_criteria |
           NATURAL join_type JOIN right_table_reference |
           CROSS JOIN right_table_reference }

join_type
  { [ INNER ] |
    LEFT [ OUTER ] |
    [ LEFT ] SEMI |
    RIGHT [ OUTER ] |
    FULL [ OUTER ] |
    [ LEFT ] ANTI |
    CROSS }

join_criteria
  { ON boolean_expression |
    USING ( column_name [, ...] ) }

Parâmetros

  • left_table_reference

    A referência da tabela no lado esquerdo da associação.

  • right_table_reference

    A referência da tabela no lado direito da associação.

  • join_type

    O tipo de associação.

    • [ INNER ]

      Devolve as linhas que têm valores correspondentes em ambas as referências de tabela. O tipo de associação predefinido.

    • LEFT [ OUTER ]

      Devolve todos os valores da referência da tabela esquerda e os valores correspondentes da referência de tabela à direita ou acrescenta NULL se não existir correspondência. Também é referida como uma associação externa à esquerda.

    • DIREITA [ EXTERIOR ]

      Devolve todos os valores da referência da tabela à direita e os valores correspondentes da referência da tabela esquerda ou acrescenta NULL se não existir correspondência. Também é referida como uma associação externa à direita.

    • FULL [OUTER]

      Devolve todos os valores de ambas as relações, acrescentando NULL valores no lado que não tem uma correspondência. Também é referida como uma associação externa completa.

    • [ ESQUERDA ] SEMI

      Devolve valores do lado esquerdo da referência da tabela que tem uma correspondência com a direita. Também é referida como uma semi-associação à esquerda.

    • [ ESQUERDA ] ANTI

      Devolve os valores da referência da tabela esquerda que não correspondem à referência da tabela à direita. Também é referido como uma associação anti-associação à esquerda.

  • ASSOCIAÇÃO CRUZADA

    Devolve o produto cartesiano de duas relações.

  • NATURAL

    Especifica que as linhas das duas relações serão implicitamente correspondidas na igualdade para todas as colunas com nomes correspondentes.

  • join_criteria

    Especifica como as linhas de uma referência de tabela são combinadas com as linhas de outra referência de tabela.

    • ON boolean_expression

      Uma expressão com um tipo de retorno de BOOLEAN que especifica a forma como as linhas das duas relações são correspondidas. Se o resultado for verdadeiro, as linhas são consideradas uma correspondência.

    • USING ( column_name [, ...] )

      Corresponde às linhas ao comparar a igualdade para a lista de colunas column_name que tem de existir em ambas as relações.

      USING (c1, c2) é um sinónimo de ON rel1.c1 = rel2.c1 AND rel1.c2 = rel2.c2.

  • table_alias

    Um nome temporário com uma lista de identificador de coluna opcional.

Notas

Quando especificar USING ou NATURAL, SELECT * mostrará apenas uma ocorrência para cada uma das colunas utilizadas para corresponder.

Se omitir a join_criteria semântica de qualquer join_type , torna-se a de um CROSS JOIN.

Exemplos

-- Use employee and department tables to demonstrate different type of joins.
> CREATE TEMP VIEW employee(id, name, deptno) AS
     VALUES(105, 'Chloe', 5),
           (103, 'Paul' , 3),
           (101, 'John' , 1),
           (102, 'Lisa' , 2),
           (104, 'Evan' , 4),
           (106, 'Amy'  , 6);

> CREATE TEMP VIEW department(deptno, deptname) AS
    VALUES(3, 'Engineering'),
          (2, 'Sales'      ),
          (1, 'Marketing'  );

-- Use employee and department tables to demonstrate inner join.
> SELECT id, name, employee.deptno, deptname
   FROM employee
   INNER JOIN department ON employee.deptno = department.deptno;
 103  Paul      3 Engineering
 101  John      1   Marketing
 102  Lisa      2       Sales

-- Use employee and department tables to demonstrate left join.
> SELECT id, name, employee.deptno, deptname
   FROM employee
   LEFT JOIN department ON employee.deptno = department.deptno;
 105 Chloe      5        NULL
 103  Paul      3 Engineering
 101  John      1   Marketing
 102  Lisa      2       Sales
 104  Evan      4        NULL
 106   Amy      6        NULL

-- Use employee and department tables to demonstrate right join.
> SELECT id, name, employee.deptno, deptname
    FROM employee
    RIGHT JOIN department ON employee.deptno = department.deptno;
 103  Paul      3 Engineering
 101  John      1   Marketing
 102  Lisa      2       Sales

-- Use employee and department tables to demonstrate full join.
> SELECT id, name, employee.deptno, deptname
    FROM employee
    FULL JOIN department ON employee.deptno = department.deptno;
 101  John      1   Marketing
 106   Amy      6        NULL
 103  Paul      3 Engineering
 105 Chloe      5        NULL
 104  Evan      4        NULL
 102  Lisa      2       Sales

-- Use employee and department tables to demonstrate cross join.
> SELECT id, name, employee.deptno, deptname
    FROM employee
    CROSS JOIN department;
 105 Chloe      5 Engineering
 105 Chloe      5   Marketing
 105 Chloe      5       Sales
 103  Paul      3 Engineering
 103  Paul      3   Marketing
 103  Paul      3       Sales
 101  John      1 Engineering
 101  John      1   Marketing
 101  John      1       Sales
 102  Lisa      2 Engineering
 102  Lisa      2   Marketing
 102  Lisa      2       Sales
 104  Evan      4 Engineering
 104  Evan      4   Marketing
 104  Evan      4       Sales
 106   Amy      4 Engineering
 106   Amy      4   Marketing
 106   Amy      4       Sales

-- Use employee and department tables to demonstrate semi join.
> SELECT *
    FROM employee
    SEMI JOIN department ON employee.deptno = department.deptno;
 103  Paul      3
 101  John      1
 102  Lisa      2

-- Use employee and department tables to demonstrate anti join.
> SELECT *
    FROM employee
    ANTI JOIN department ON employee.deptno = department.deptno;
 105 Chloe      5
 104  Evan      4
 106   Amy      6

-- Use employee and department tables to demonstrate lateral inner join.
> SELECT id, name, deptno, deptname
    FROM employee
    JOIN LATERAL (SELECT deptname
                    FROM department
                    WHERE employee.deptno = department.deptno);
 103 Paul    3  Engineering
 101 John    1  Marketing
 102 Lisa    2  Sales

-- Use employee and department tables to demonstrate lateral left join.
> SELECT id, name, deptno, deptname
    FROM employee
    LEFT JOIN LATERAL (SELECT deptname
                         FROM department
                         WHERE employee.deptno = department.deptno);
 105 Chloe   5      NULL
 103 Paul    3      Engineering
 101 John    1      Marketing
 102 Lisa    2      Sales
 104 Evan    4      NULL
 106 Amy     6      NULL