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_IDOUTER JOIN
FROM employees e join employees m ON e.employee_id=m.manager_id
WHERE e.employee_id=124
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
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