JOIN
Berlaku untuk: Databricks SQL
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
-
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
semantikjoin_type
mana pun menjadiCROSS 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.
-
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