IKUTI
Berlaku untuk: Databricks SQL Databricks Runtime
Menggabungkan baris dari dua referensi tabel berdasarkan kriteria gabungan.
Sintaks
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 [, ...] ) }
Parameter
-
Referensi tabel di sisi kiri gabungan.
-
Referensi tabel di sisi kanan gabungan.
join_type
Jenis gabungan.
[ 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.PENUH [LUAR]
Mengembalikan semua nilai dari kedua relasi, menambahkan nilai
NULL
di sisi yang tidak memiliki kecocokan. Ini juga disebut sebagai gabungan luar penuh.[ 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 anti join kiri.
GABUNGAN SILANG
Mengembalikan produk Cartesian dari dua relasi.
NATURAL
Menentukan bahwa baris dari dua relasi secara implisit akan dicocokkan pada kesetaraan untuk semua kolom dengan nama yang cocok.
join_criteria
Menentukan bagaimana baris dari satu referensi tabel dikombinasikan dengan baris referensi tabel lain.
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 dengan kolom sebelah kiri, lalu tabel gabungan kanan tidak termasuk kolom yang digabungkan.
SELECT * FROM left JOIN right USING (a, b)
setara dengan:
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
Jika Anda menghilangkan join_criteria
semantik join_type
mana pun menjadi CROSS JOIN
.
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