다음을 통해 공유


JOIN

적용 대상:예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime

이전 left_table 참조의 행을 조인 기준에 따라 right_table 참조의과 결합합니다.

구문

{ [ 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 [, ...] ) }

매개 변수

  • right_table_reference

    테이블 참조는 조인의 오른쪽에 있습니다.

  • join_type

    조인 형식입니다.

    • [ 내부 ]

      두 테이블 참조에서 일치하는 값이 있는 행을 반환합니다. 기본 조인 형식입니다.

    • LEFT [ OUTER ] (왼쪽 [ 외부 ])

      왼쪽 테이블 참조의 모든 값과 오른쪽 테이블 참조에서 일치하는 값을 반환하거나 일치하는 값이 없으면 NULL 추가합니다. 왼쪽 외부 조인이라고도 합니다.

    • RIGHT [ OUTER ]

      오른쪽 테이블 참조의 모든 값과 왼쪽 테이블 참조에서 일치하는 값을 반환하거나 일치하는 값이 없으면 NULL 추가합니다. 오른쪽 외부 조인라고도 합니다.

    • FULL [OUTER]

      두 관계의 모든 값을 반환하고, 일치하지 않는 쪽에 NULL 값을 추가합니다. 또한 전체 외부 조인라고도 합니다.

    • [ LEFT ] 반

      오른쪽과 일치하는 테이블 참조의 왼쪽에서 값을 반환합니다. 왼쪽 세미 조인으로도 불립니다.

    • [ LEFT ] 반

      오른쪽 테이블 참조와 일치하지 않는 왼쪽 테이블 참조의 값을 반환합니다. 왼쪽 반조인라고도 합니다.

  • 크로스 JOIN

    두 관계의 카티전 곱을 반환합니다.

  • 자연의

    이름이 일치하는 모든 열에 대해 두 관계의 행이 같음으로 암시적으로 일치되도록 지정합니다.

  • join_criteria

    필요에 따라 한 테이블 참조의 행을 다른 테이블 참조의 행과 결합하는 방법을 지정합니다.

    경고

    join_criteria를 생략하면 join_type의 의미 체계는 CROSS JOIN의 의미 체계가 됩니다.

    • ON boolean_expression

      두 관계의 행이 일치하는 방법을 지정하는 반환 형식이 BOOLEAN인 식입니다. 결과가 true이면 행이 일치하는 것으로 간주됩니다.

    • USING ( column_name [, ...] )

      두 관계에 모두 존재해야 하는 column_name 열 목록의 같음을 비교하여 행을 매칭합니다.

  • table_alias

    선택적 열 식별자 목록이 있는 임시 이름입니다.

주의

USING 또는 NATURAL을 지정하면, SELECT *는 먼저 일치하는 데 사용된 각 열에 대하여 하나의 항목만 표시되고, 그 후 왼쪽의 조인 테이블 열들이, 이어서 조인한 열을 제외한 오른쪽 조인 테이블의 열들이 표시됩니다.

SELECT * FROM first JOIN second USING (a, b)

위의 식은 아래의 식과 동일합니다.

SELECT first.a, first.b,
       first.* EXCEPT(a, b),
       second.* EXCEPT(a, b)
  FROM first JOIN second ON first.a = second.a AND first.b = second.b

예제

-- 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