Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:
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 [, ...] ) }
Параметры
-
Ссылка на таблицу справа от соединения.
join_type
Тип соединения.
[ INNER ]
Возвращает строки, соответствующие значениям в обеих таблицах. Тип соединения по умолчанию.
LEFT [ OUTER ]
Возвращает все значения из ссылки на левую таблицу и соответствующие значения из правой ссылки на таблицу или добавляется
NULL, если совпадения нет. Он также называется левым внешним соединением.RIGHT [ OUTER ]
Возвращает все значения из правой ссылки на таблицу и соответствующие значения из ссылки на левую таблицу или добавляется
NULL, если совпадения нет. Он также называется правым внешним соединением.FULL [ВНЕШНИЙ]
Возвращает все значения из обоих отношений, добавляя значения
NULLна стороне, не имеющей совпадений. Он также называется полным внешним соединением.[ СЛЕВА ] ПОЛУ
Возвращает значения из левой части ссылки на таблицу, которая имеет совпадение с правом. Он также называется левым полусоединяем.
[ СЛЕВА ] АНТИ
Возвращает значения из ссылки на левую таблицу, которые не соответствуют правой ссылке на таблицу. Он также называется левым анти-соединением.
ПЕРЕКРЁСТОК JOIN
Возвращает декартово произведение двух отношений.
NATURAL
Указывает, что строки из двух отношений будут неявно сопоставляться по равенству во всех столбцах с совпадающими именами.
join_criteria
При необходимости указывает, как строки из одной ссылки на таблицу объединяются со строками другой ссылки на таблицу.
Предупреждение
Если опустить
join_criteria, то любой изjoin_typeприобретает семантикуCROSS JOIN.ON boolean_expression
Выражение с типом возвращаемого значения BOOLEAN, которое указывает, как сопоставляются строки из двух отношений. Если результат имеет значение true, строки считаются совпадающими.
USING ( column_name [, ...] )
Соответствует строкам, сравнивая равенство для списка столбцов
column_name, которые должны существовать в обоих отношениях.
-
Временное имя с опциональным списком идентификаторов столбцов.
Примечания.
Если указано 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