Perintah join menggunakan Syntax Join ANSI/SQL
A. INNER JOIN
Sebuah inner join adalah operasi bergabung paling umum digunakan dalam aplikasi dan dapat dianggap sebagai default join-type. Inner join membuat tabel hasil baru dengan menggabungkan nilai kolom dari dua tabel (A dan B) berdasarkan predikat join. Permintaan membandingkan setiap baris A dengan setiap baris dari B untuk menemukan semua pasang baris yang memenuhi join-predikat. Ketika join-predikat puas, nilai kolom untuk setiap pasangan yang cocok dari baris A dan B digabungkan menjadi satu baris hasil. Hasil dari join dapat didefinisikan sebagai hasil pertama mengambil Cartesian product (atau Cross join) dari semua catatan dalam tabel (menggabungkan setiap record dalam tabel A dengan setiap record dalam tabel B)-kemudian kembali semua catatan yang memenuhi join predikat. Aktual SQL implementasi biasanya menggunakan pendekatan lain seperti hash join atau semacam sort-merge join, karena menghitung Cartesian Product sangat tidak efisien.
SQL menetapkan dua cara yang berbeda untuk mengekspresikan sintaksis join: "eksplicit join notation" dan "implicit Join notation".
"eksplisit join notation" menggunakan join keyword untuk menentukan tabel untuk bergabung, dan ON keyword untuk menentukan predikat untuk bergabung, seperti dalam contoh berikut:
SELECT *
FROM employee
INNER JOIN department ON employee.DepartmentID = department.DepartmentID;
"implicit join notation" hanya berisi daftar tabel untuk bergabung, dalam klausa FROM dari pernyataan SELECT, menggunakan koma untuk memisahkan mereka. Oleh karena itu menentukan cross join, dan klausa WHERE tambahan mungkin berlaku filter-predikat.
Contoh berikut ini adalah setara dengan yang sebelumnya, tapi kali ini menggunakan implicit join notation:
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
Query yang diberikan pada contoh di atas akan bergabung dengan tabel Employee dan Department menggunakan kolom DepartmentId dari kedua tabel. Dimana DepartmentId ini pertandingan tabel (yaitu join-predikat puas), query akan menggabungkan kolom LastName, DepartmentId dan DepartmentName dari dua tabel menjadi baris hasil. Dimana DepartmentId tidak cocok, tidak ada baris hasil yang dihasilkan.
B. EQUI-JOIN
Sebuah equi-join adalah jenis tertentu
dari komparator berbasis join, yang hanya menggunakan perbandingan kesetaraan
dalam predikat join. Menggunakan operator perbandingan lainnya (seperti <)
mendiskualifikasi bergabung sebagai equi-join.
Kita bisa menulis equi-join sebagai berikut
SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID;
Jika kolom dalam equi-join memiliki nama yang sama, SQL-92 menyediakan notasi singkatan opsional untuk mengekspresikan equi-join, dengan cara menggunakan construct:
SELECT *
FROM employee
INNER JOIN department USING (DepartmentID);
C. NATURAL JOIN
Sebuah natural join adalah jenis equi-join mana predikat bergabung timbul implisit dengan membandingkan semua kolom di kedua tabel yang memiliki kolom yang sama-nama dalam tabel bergabung. Tabel bergabung dihasilkan hanya berisi satu kolom untuk setiap pasangan kolom sama bernama.
Permintaan contoh di atas untuk inner joins dapat dinyatakan sebagai natural join dengan cara berikut:
SELECT *
FROM employee
NATURAL JOIN department;
D. CROSS JOIN
CROSS JOIN mengembalikan produk Cartesian dari baris dari tabel dalam bergabung. Dengan kata lain, hal itu akan menghasilkan baris yang menggabungkan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua.
Contoh eksplisit cross join:
SELECT *
FROM employee
CROSS JOIN department;
E. LEFT OUTER JOIN
Menampilkan semua data yang ada di tabel kiri dan hanya data yang bersesuaian di tabel kanan, jika tabel kiri tidak mempunyai lawan di tabel kanan maka tabel kanan akan diisi dengan null.
Contoh :
SELECT *
FROM employee
LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
Oracle mendukung alternatif syntax, yaitu :
SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID(+)
F. RIGHT OUTER JOIN
Menampilkan semua data yang ada di tabel kanan dan hanya data yang bersesuaian di tabel kiri, jika tabel kanan tidak mempunyai lawan di tabel kiri maka tabel kiri akan diisi dengan null.
Contoh :
SELECT *
FROM employee
RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
racle mendukung alternatif syntax, yaitu:
SELECT * FROM employee, department WHERE employee.DepartmentID(+) = department.DepartmentID
G. FULL JOIN
Gabungan dari left outer join dan right outer join.
Contoh :
Select first_name, department_name
From employees
FULL OUTER JOIN departments ON employees.department_id=departments.department_id;
H. SELF JOIN
Join yang dilakukan antar kolom dalam satu tabel.
Contoh :
Select pegawai.first_name as pegawai, manager.first_name as manager
From employees pegawai
INNER JOIN employees manager ON pegawai.manager_id=manager.employee.id;