INNER JOIN digunakan untuk mencari data yang sama, sedangkan OUTER JOIN digunakan untuk mencari
data yang sama sekaligus data yang tidak sama
Natural Joins
Equijoin
non-equijoin
Cross Join
outer join
Full outter Join
Self Join
Cross 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
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.
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
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
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
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)
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