Ada 2 jenis Join dalam SQL:
1. Inner Join
2. Outer Join
Join / inner join itu kalo kita belajar diagram venn analoginya seperti intersect.
Outer join analoginya seperti Union / gabungan.
Dibedakan menjadi 3 macam :
Biar mudah, saya masukkan juga contoh output dan sample tablenya :)
- Left Join
Output semua isi table kiri yang dijoin, sekalipun tidak ada key/PK yang sama/cocok di table kanannya.
- Right Join
Output isi table kanan yang dijoin, sekalipun tidak ada key/PK yang sama/cocok di table kirinya.
- Full Join
Menggabungkan/output isi kedua table sekalipun tidak ada key/PK yang sama/cocok).
Setiap relasi/hubungan antar key yang di join tidak mempunyai pasangannya, maka akan di replace dengan NULL.
Belakangan ini saya juga menemukan ada 2 jenis inner join yang baru bagi saya.
Yaitu:
- Natural Join
Menggabungkan/output isi kedua table berdasarkan nama kolom yang sama tanpa suatu kondisi(qualifier).
Menurut para pengamat, natural join sangat disarankan tidak digunakan.
- Cross Join
Menggabungkan/output isi kedua table secara permutasi (Cartesian Products)
Dengan kata lain, cross join akan menghubungkan tiap-tiap kolom table A dengan masing-masing kolom di table B tanpa memperhatikan PK.
Contoh sintaks:
Ket: Khusus untuk inner join bisa di tuliskan secara implisit.
Inner Join
SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID;
Secara emplisit:
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
Natural Join
SELECT * FROM employee NATURAL JOIN department;
SELECT * FROM employee CROSS JOIN department;
Ket: sintaks "Outer" sifatnya optional. Lebih disarankan tanpa kata "Outer".
SELECT * FROM employee RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
SELECT * FROM employee FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
Dalam oracle, terdapat alternatif penulisan left join secara singkat, sbb:
Left JoinSELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID (+);
Namun sangat tidak disarankan karena tidak menganut standard ANSI. Dan dapat menjadi ambigu.
Dalam Sysbase juga terdapat alternatif penulisan, yaitu dengan menambahkan "*"
SELECT *
FROM employee, department
WHERE employee.DepartmentID *= department.DepartmentID ;
FROM employee, department
WHERE employee.DepartmentID *= department.DepartmentID ;
Setiap database (Oracle, MSSQL, MySql, PostgreSQL, DB2, dll) memiliki implementasi INNER dan OUTER JOIN yang berbeda-beda. Ada yang tidak memiliki natural join, ada juga yang memiliki. Ada yang memiliki penyingkatan penulisan left dan right join, ada yang tidak.
Kalo ada yang salah, mohon beri comment untuk revisinya ya :D