Senin, 09 April 2012

JOIN

Sebelum memulai perhatikan schema HR terlebih dahulu
JOIN merupakan salah satu cara dalam SQL untuk menggabungkan beberapa tabel.

Perbedaan INNER JOIN dengan OUTER JOIN

  • INNER JOIN digunakan untuk mencari data yang sama, sedangkan OUTER JOIN digunakan untuk mencari data yang sama sekaligus data yang tidak sama

Tipe – tipe JOIN :

  • Natural Joins
  • Equijoin
  • non-equijoin
  • Cross Join
  • outer join
  • Full outter Join
  • Self Join
  • Cross Join

Ketentuan Natural JOIN

  • 2 Tabel yang ingin di NATURAL JOIN harus mempunyai minimal satu nama kolom yang sama
    contoh : tabel A mempunyai kolom employee_id dan tabel B juga mempunyai kolom employee_id. kolom employee_id inilah yang akan digunakan untuk menggabungkan ke dua tabel tersebut
  • Jika Kolom yang mempunyai nama sama tersebut memiliki type kolom yang berbeda, maka akan terjadi error
    contoh : Tabel A tipe kolom employee_idnya char sedangkan employee_id pada tabel B bertipe integer
  • Natural Join akan menampilkan data dimana data tersebut memiliki nilai yang sama antara nama kolom yang sama pada tabel A dan Tabel B
contoh query :
SELECT department_id, department_name, location_id, city
FROM departments NATURAL JOIN locations
Penjelasan :
Pada query diatas field department_id, department_name, location_id terdapat pada tabel Departments dan field location_id, city terdapat pada tabel Locations

JOIN dengan USING clause

Ketentuan dan Kegunaan USING Clause
  • USING clause berguna untuk menutupi salah satu kekurangan dari NATURAL JOIN yaitu menspesifikkan kolom mana yang akan digunakan sebagai penggabung 2 tabel. Hal ini bertujuan untuk menghindari terjadinya error ketika diantara tabel A dan Tabel B mempunyai beberapa nama kolom yang sama tetapi salah satu dari kolom yang sama tersebut memiliki tipe data yang berbeda
  • Gunakan hanya satu kolom yang akan dijadikan sebagai penggabung tabel
  • Jangan gunakan tabel alias atau nama tabel kepada kolom yang akan menggunakan USING clause
contoh query :
SELECT employees.employee_id, employees.last_name, departments.location_id, department_id
FROM employees JOIN departments
USING (department_id) ; // perhatihan kolom department_id. kolom tersebut sama sekali tidak memakai alias
Penjelasan :  employee_id, last_name, department_id terdapat pada tabel employees, sedangkan department_id, location_id terdapat pada departments. Karena department_id terdapat pada tabel employees dan departments, maka kolom tersebutlah yang akan digunakan sebagai penggabung.

Ambiguous Column Names

Ambiguouos Column Names atau nama kolom yang ambigu merupakan error yang terjadi pada saat execute, si system yang meng execute tersebut menjadi ‘bingung’ kolom mana yang mau dia ambil. untuk lebih jelasnya lihat contoh dibawah..
SELECT employee_id, last_name, department_id, department_name
FROM employees, departments
WHERE department_id = department_id
Jika query diatas dijalankan, pasti akan terjadi error, kenapa? karena pada tabel employee dan tabel departments sama-sama terdapat nama kolom yang sama, yaitu kolom department_id, sehingga si system menjadi pusing, kolom mana yang mau dia ambil, kolom di employees kah? atau kolom di departments kah?.
Untuk  menghindari kerancuan tersebut maka digunakanlah tabel alias seperti query di bawah.
SELECT employee_id, last_name, a.department_id, department_name // bisa juga b.department_id
FROM employees a, departments b
WHERE a.department_id = b.department_id

JOIN dengan ON Clause

Intinya penggunaan ON JOIN sama fungsinya dengan menggunakan query dibawah ini:
SELECT employee_id, last_name, a.department_id, department_name
FROM employees a, departments b
WHERE a.department_id = b.department_id
Kalau menggunakan Join dengan ON clause menjadi :
SELECT employee_id, last_name, a.department_id, department_name
FROM employees a JOIN departments b ON a.department_id = b.department_id

Menggabungkan 3 tabel dengan ON clause

SELECT employee_id, last_name, a.department_id, department_name, city
FROM employees a JOIN departments b ON a.department_id = b.department_id JOIN Locations c
ON b.Location_id = b.location_id

SELF JOIN dengan menggunakan ON clause

Perhatikan tabel employees dibawah :
Pada gambar diatas kita dapat melihat donald dan douglas mempunyai seorang manager yang memiliki ID = 124. bagaimana jika kasusnya kita ingin melihat siapa saja orang yang dikepalai oleh seorang manager dengan id = 124?? dengan kasus seperti inilah kita dapat menggunakan SELF JOIN
Query :
SELECT e.employee_id mgr, m.first_name nama_bawahan, m.employee_id bawahan_ID
FROM employees e join employees m ON e.employee_id=m.manager_id
WHERE e.employee_id=124
OUTER JOIN
Outer Join merupakan sebuah fungsi dimana fungsi tersebut dapat dipakai untuk menampilkan data yang memiliki kesamaan seperti join yang telah kita bahas sebelumnya, JUGA menampilkan data yang tidak memiliki kesamaan
Tipe-tipe OUTER JOIN
  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN

LEFT OUTER JOIN

Sebelum memulai kita asumsikan Tabel Employees berada Disebelah kiri Dan tabel Departments berada disebelah kanan. Jika kita melakukan LEFT OUTER JOIN terhadap kedua tabel tersebut, maka kita akan mendapatkan semua data di tabel employees yang sama dan tidak sama dengan di tabel departments. jadi ibaratnya kita menampilkan data Employees yang tidak dipakai di Departments
contoh :
SELECT last_name, e.department_id, department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id)

RIGHT OUTER JOIN
Right Outer Join kebalikan dari LEFT OUTER JOIN
contoh : 

SELECT last_name, e.department_id, department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id)
 

FULL OUTER JOIN
Full Outer Join merupakan gabungan dari LEFT OUTER JOIN dan RIGHT OUTER JOIN
contoh :
SELECT last_name, e.department_id, department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id)

CROSS JOIN
Cross Join disebut juga dengan CARTESIAN PRODUCT yaitu perkalian dari 2 buah tabel
contoh :
data tabel A : {a,b,c,d } , data Tabel B {F,G,H,I}
 Jika tabel A CROSS JOIN tabel B menjadi : {aF, aG, aH, aI, bF, bG, bH, bI, cF, cG, cH, cI, dF, dG, dH, dI}
query nya :
SELECT last_name, department_name FROM employees
CROSS JOIN departments
 

0 komentar:

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More