Snowpark Migration Accelerator: Join

描述

使用指定的联接条件合并来自两个 表参考 (https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-table-reference.html) 中的行。有关更多详细信息,请参阅 Databricks SQL 语言参考 JOIN (https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-join.html)。

JOIN 将来自两个源(如表或视图)的数据合并到一个结果集中。结果中的每一行都包含基于指定条件的来自两个源的列。有关联接的详细说明,请参阅 使用联接。(Snowflake SQL 语言参考 JOIN

语法

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 [, ...] ) }
Copy
SELECT ...
FROM <object_ref1> [
                     {
                       INNER
                       | { LEFT | RIGHT | FULL } [ OUTER ]
                     }
                   ]
                   JOIN <object_ref2>
  [ ON <condition> ]
[ ... ]

SELECT *
FROM <object_ref1> [
                     {
                       INNER
                       | { LEFT | RIGHT | FULL } [ OUTER ]
                     }
                   ]
                   JOIN <object_ref2>
  [ USING( <column_list> ) ]
[ ... ]

SELECT ...
FROM <object_ref1> [
                     {
                       | NATURAL [ { LEFT | RIGHT | FULL } [ OUTER ] ]
                       | CROSS
                     }
                   ]
                   JOIN <object_ref2>
[ ... ]
Copy

示例源模式

设置数据

Databricks

-- 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'  );
Copy

Snowflake

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

CREATE TEMP VIEW department(deptno, deptname) AS
SELECT deptno, deptname
  FROM (VALUES(3, 'Engineering'),
          (2, 'Sales'      ),
          (1, 'Marketing'  )) AS v1 (deptno, deptname);
Copy

模式代码

Databricks

-- 1. 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;
 
-- 2. We will use the employee and department tables to show how a left join works. This example will help you understand how to combine data from two tables while keeping all records from the left (first) table.
SELECT id, name, employee.deptno, deptname
   FROM employee
   LEFT JOIN department ON employee.deptno = department.deptno;

-- 3. Demonstrate a RIGHT JOIN using employee and department tables. This query retrieves all departments and matching employees.
SELECT id, name, employee.deptno, deptname
    FROM employee
    RIGHT JOIN department ON employee.deptno = department.deptno;

-- 4. Demonstrate a FULL JOIN operation using the employee and department tables.
SELECT id, name, employee.deptno, deptname
    FROM employee
    FULL JOIN department ON employee.deptno = department.deptno;

-- 5. Demonstrate a cross join operation using the employee and department tables. This query returns all possible combinations of employees and departments.
SELECT id, name, employee.deptno, deptname
    FROM employee
    CROSS JOIN department;

-- 6. This example shows how to use a semi join between employee and department tables. A semi join returns records from the first table (employee) where there is a matching record in the second table (department).
```sql
SELECT *
    FROM employee
    SEMI JOIN department ON employee.deptno = department.deptno;
Copy
  1. 我们将以两个表(“员工表”和“部门表”)为例,演示内部联接的工作原理。内部联接合并了两个表中指定列之间存在匹配项的行。

id

name

deptno

deptname

103

Paul

3

Engineering

101

John

1

Marketing

102

Lisa

2

Sales


  1. 我们将以员工表和部门表为例,演示左联接的工作原理。此示例将帮助您了解如何合并两个表中的数据,同时保留左侧(第一个)表中的所有记录。

id

name

deptno

deptname

105

Chloe

5

null

103

Paul

3

Engineering

101

John

1

Marketing

102

Lisa

2

Sales

104

Evan

4

null

106

Amy

6

null


  1. 我们将以员工表和部门表为例,演示 RIGHT JOIN 在 SQL 中的运作方式。

id

name

deptno

deptname

103

Paul

3

Engineering

102

Lisa

2

Sales

101

John

1

Marketing


  1. 我们将以员工表和部门表为例,演示完全联接的工作原理。完全联接可合并两个表中的所有记录,包括任一表中不匹配的行。

id

name

deptno

deptname

101

John

1

Marketing

102

Lisa

2

Sales

103

Paul

3

Engineering

104

Evan

4

null

105

Chloe

5

null

106

Amy

6

null


  1. 在员工表和部门表之间创建交叉联接,以展示如何将一个表中的每一行与另一个表中的每一行合并。

id

name

deptno

deptname

105

Chloe

5

Engineering

105

Chloe

5

Sales

105

Chloe

5

Marketing

103

Paul

3

Engineering

103

Paul

3

Sales

103

Paul

3

Marketing

101

John

1

Engineering

101

John

1

Sales

101

John

1

Marketing

102

Lisa

2

Engineering

102

Lisa

2

Sales

102

Lisa

2

Marketing

104

Evan

4

Engineering

104

Evan

4

Sales

104

Evan

4

Marketing

106

Amy

6

Engineering

106

Amy

6

Sales

106

Amy

6

Marketing


  1. 我们将以员工表和部门表为例,演示半联接的工作原理。半联接返回在第二个表中有匹配记录的第一个表中的记录。

id

name

deptno

103

Paul

3

101

John

1

102

Lisa

2

Snowflake

-- 1. 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;
 
-- 2. 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;


-- 3. 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;


-- 4. 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;


-- 5. Use employee and department tables to demonstrate cross join.
SELECT id, name, employee.deptno, deptname
    FROM employee
    CROSS JOIN department;

-- 6. Use employee and department tables to demonstrate semi join.
SELECT e.*
    FROM employee e, department d
    WHERE e.deptno = d.deptno;
Copy
  1. 我们将以两个表(“员工表”和“部门表”)为例,演示内部联接的工作原理。内部联接可合并两个表中指定列中存在匹配值的记录。

id

name

deptno

deptname

103

Paul

3

Engineering

101

John

1

Marketing

102

Lisa

2

Sales


  1. 使用员工表和部门表来演示左联接。

id

name

deptno

deptname

105

Chloe

5

null

103

Paul

3

Engineering

101

John

1

Marketing

102

Lisa

2

Sales

104

Evan

4

null

106

Amy

6

null


  1. 我们将以员工表和部门表为例,演示右联接的工作原理。

id

name

deptno

deptname

103

Paul

3

Engineering

102

Lisa

2

Sales

101

John

1

Marketing


  1. 我们将以员工表和部门表为例,演示完全联接的工作原理。完全联接可合并两个表中的所有记录,包括任一表中不匹配的行。

id

name

deptno

deptname

105

Chloe

5

null

103

Paul

3

Engineering

101

John

1

Marketing

102

Lisa

2

Sales

104

Evan

4

null

106

Amy

6

null


  1. 在员工表和部门表之间创建交叉连接,以展示如何将每位员工与每个部门配对。此示例通过合并两个表中所有可能的行组合来演示交叉联接的工作原理。

id

name

deptno

deptname

105

Chloe

5

Engineering

105

Chloe

5

Sales

105

Chloe

5

Marketing

103

Paul

3

Engineering

103

Paul

3

Sales

103

Paul

3

Marketing

101

John

1

Engineering

101

John

1

Sales

101

John

1

Marketing

102

Lisa

2

Engineering

102

Lisa

2

Sales

102

Lisa

2

Marketing

104

Evan

4

Engineering

104

Evan

4

Sales

104

Evan

4

Marketing

106

Amy

6

Engineering

106

Amy

6

Sales

106

Amy

6

Marketing


  1. 我们将以员工表和部门表为例,演示半联接的工作原理。半联接返回在第二个表中有匹配记录的第一个表中的记录。

id

name

deptno

103

Paul

3

101

John

1

102

Lisa

2

已知问题

未发现任何问题

语言: 中文