JOIN
적용 대상: Databricks SQL Databricks Runtime
조인 기준에 따라 두 테이블 참조의 행을 결합합니다.
구문
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 [, ...] ) }
매개 변수
-
조인의 왼쪽에 있는 테이블 참조입니다.
-
조인의 오른쪽에 있는 테이블 참조입니다.
join_type
조인 형식입니다.
[ INNER ]
두 테이블 참조 모두에서 일치하는 값이 있는 행을 반환합니다. 기본 조인 형식입니다.
LEFT [ OUTER ]
왼쪽 테이블 참조의 모든 값과 오른쪽 테이블 참조의 일치하는 값을 반환하거나 일치하는 항목이 없으면
NULL
을 추가합니다. 왼쪽 우선 외부 조인이라고도 합니다.RIGHT [ OUTER ]
오른쪽 테이블 참조의 모든 값과 왼쪽 테이블 참조의 일치하는 값을 반환하거나 일치하는 항목이 없으면
NULL
을 추가합니다. 오른쪽 우선 외부 조인이라고도 합니다.FULL [OUTER]
일치하지 않는 쪽에
NULL
값을 추가하여 두 관계의 모든 값을 반환합니다. 완전 외부 조인이라고도 합니다.[ LEFT ] 반
오른쪽과 일치하는 테이블 참조의 왼쪽에서 값을 반환합니다. 왼쪽 우선 세미 조인이라고도 합니다.
[ LEFT ] 반
오른쪽 테이블 참조와 일치하지 않는 왼쪽 테이블 참조의 값을 반환합니다. 왼쪽 우선 안티 조인이라고도 합니다.
크로스 조인
두 관계의 카티전 곱을 반환합니다.
자연의
두 관계의 행이 이름이 일치하는 모든 열에 대해 동일할 때 암시적으로 일치되도록 지정합니다.
join_criteria
한 테이블 참조의 행이 다른 테이블 참조의 행과 결합되는 방법을 지정합니다.
ON boolean_expression
두 관계의 행이 일치하는 방법을 지정하는 반환 형식이 BOOLEAN인 식입니다. 결과가 true이면 행이 일치하는 것으로 간주됩니다.
USING ( column_name [, …] )
두 관계에 모두 존재해야 하는
column_name
열 목록의 동일성을 비교하여 행을 찾습니다.
-
선택적 열 식별자 목록이 있는 임시 이름입니다.
주의
지정 USING
하거나 NATURAL
지정 SELECT *
하면 먼저 일치하는 데 사용되는 각 열에 대해 하나의 항목만 표시되고 왼쪽의 열 다음에는 조인된 열을 제외한 오른쪽 조인 테이블이 표시됩니다.
SELECT * FROM left JOIN right USING (a, b)
위의 식은 아래의 식과 동일합니다.
SELECT left.a, left.b,
left.* EXCEPT(a, b),
right.* EXCEPT(a, b)
FROM left JOIN right ON left.a = right.a AND left.b = right.b
join_criteria
를 생략하면 join_type
의 의미 체계는 CROSS JOIN
의 의미 체계가 됩니다.
예제
-- 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