Bagikan melalui


JOIN

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Menggabungkan baris dari referensi left_table sebelumnya dengan referensi right_table berdasarkan kriteria gabungan.

Sintaks

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

Parameter

  • right_table_reference

    Referensi tabel di sisi kanan penggabungan.

  • join_type

    Jenis penggabungan.

    • [ INNER ]

      Mengembalikan baris yang memiliki nilai yang cocok di kedua referensi tabel. Jenis gabungan default.

    • KIRI [ LUAR ]

      Mengembalikan semua nilai dari referensi tabel kiri dan nilai yang cocok dari referensi tabel kanan, atau menambahkan NULL jika tidak ada kecocokan. Ini juga disebut sebagai gabungan luar kiri .

    • KANAN [ LUAR ]

      Mengembalikan semua nilai dari referensi tabel kanan dan nilai yang cocok dari referensi tabel kiri, atau menambahkan NULL jika tidak ada kecocokan. Ini juga disebut sebagai gabungan luar kanan antara dan.

    • PENUH [LUAR]

      Mengembalikan semua nilai dari kedua relasi, menambahkan nilai NULL di sisi yang tidak memiliki kecocokan. Ini juga disebut sebagai gabungan luar lengkap .

    • [ KIRI ] SEMI

      Mengembalikan nilai dari sisi kiri referensi tabel yang memiliki kecocokan dengan kanan. Ini juga disebut sebagai gabungan semi kiri .

    • [ KIRI ] ANTI

      Mengembalikan nilai dari referensi tabel kiri yang tidak cocok dengan referensi tabel kanan. Ini juga disebut sebagai kiri anti gabungan.

  • CROSS JOIN

    Mengembalikan produk Cartesian dari dua relasi.

  • NATURAL

    Menunjukkan bahwa baris dari dua relasi akan secara implisit dicocokkan berdasarkan kesetaraan untuk semua kolom dengan nama yang sama.

  • join_criteria

    Secara opsional menentukan bagaimana baris dari satu referensi tabel dikombinasikan dengan baris referensi tabel lain.

    Peringatan

    Jika Anda menghilangkan join_criteria semantik join_type mana pun menjadi CROSS JOIN.

    • ON boolean_expression

      Ekspresi dengan jenis BOOLEAN kembali yang menentukan bagaimana baris dari dua relasi dicocokkan. Jika hasilnya benar baris dianggap cocok.

    • MENGGUNAKAN ( nama_kolom [, …] )

      Mencocokkan baris dengan membandingkan kesetaraan untuk daftar kolom column_name yang harus ada di kedua relasi.

  • table_alias

    Nama sementara dengan daftar pengidentifikasi kolom opsional.

Catatan

Saat Anda menentukan USING atau NATURAL, SELECT * hanya akan menampilkan satu kemunculan untuk setiap kolom yang digunakan untuk mencocokkan terlebih dahulu, diikuti oleh kolom sebelah kiri, lalu tabel gabungan kanan tidak termasuk kolom yang digabungkan.

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

setara dengan:

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

Contoh

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