Thursday, June 30, 2011

SQL Join Revealed -Part 1-

Sedikit catatan SQL Join karena sudah lama gak pegang SQL, biar gak lupa aja.
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;
 
Natural Join
SELECT *
  FROM employee NATURAL JOIN department;

Cross Join
SELECT *
  FROM employee CROSS JOIN department;

Ket: sintaks "Outer" sifatnya optional. Lebih disarankan tanpa kata "Outer".

Right Outer Join
SELECT *
  FROM employee RIGHT OUTER JOIN department
    ON employee.DepartmentID = department.DepartmentID;

Left Outer Join
SELECT *
  FROM employee LEFT OUTER JOIN department
    ON employee.DepartmentID = department.DepartmentID;

Full Outer Join
SELECT *
  FROM employee FULL OUTER JOIN department
    ON employee.DepartmentID = department.DepartmentID;

Dalam oracle, terdapat alternatif penulisan left join secara singkat, sbb:
Left Join
SELECT *
  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 ;

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

No comments:

Post a Comment