JOIN Dalam menampilkan sebuah data seringkali kita perlu menggunakan lebih dari 1 tabel, 2 tabel, bahkan lebih, karena data yang akan ditampilkan terletak pada beberapa tabel. Setiap tabel biasanya memiliki keterkaitan melalui primary key dan foreign key nya. Keyword JOIN digunakan di SQL statement untuk men-query data dari 2 atau lebih tabel, berdasarkan relationship antar kolom di tabel-tabel. Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert dibawah ini: CREATE TABLE Karyawan ( nama varchar (100), email varchar (100), kode_jabatan char (5), kode_dept char (5) ) CREATE TABLE Jabatan ( kode_jabatan char (5), jabatan varchar (100), salary int ) CREATE TABLE Departemen ( kode_dept char (5), dept varchar (100), alamat varchar (100) ) INSERT INTO Karyawan VALUES ('Fajar','
[email protected]', 'JB001', 'DP001') INSERT INTO Karyawan VALUES ('Jonsis','
[email protected]', 'JB002', 'DP002') INSERT INTO Karyawan VALUES ('Nita','
[email protected]', null, 'DP003') INSERT INTO Jabatan VALUES ('JB001','Direktur', 15000000) INSERT INTO Jabatan VALUES ('JB002','Direktur Utama', 20000000) INSERT INTO Jabatan VALUES (null,'Sekretaris', 10000000) INSERT INTO Departemen VALUES ('DB001','Akunting', 'Jalan Luwuk') INSERT INTO Departemen VALUES ('DB002','IT', 'Jalan Bogor') INSERT INTO Departemen VALUES ('DB003','Layanan', 'Jalan Bekazeh')
Tabel Karyawan
Tabel Jabatan
Tabel Departemen
Beberapa macam tipe JOIN: 1.
CROSS JOIN Cross join seringkali disebut juga sebagai Cartesian Product. Bila menggunakan cross join, maka akan menampilkan hasil yang didasarkan pada semua kemungkinan kombinasi baris dalam kedua atau lebih set data. Banyaknya record cross join = jumlah record tabel pertama x jumlah record tabel kedua Contoh: Tampilkan semua data pada tabel karyawan dan departemen Command: SELECT * from Karyawan CROSS JOIN Departemen
Hasil:
Keterangan : Cross join menggabungkan lebih dari satu tabel tanpa syarat apapun (tabel karyawan dan departemen). Jika tabel karyawan memiliki 3 baris dan tabel departemen juga memiliki 3 baris, maka hasil cross join adalah 9 baris.
2.
JOIN (INNER JOIN) Menampilkan baris jika setidak-tidaknya terdapat satu kesamaan foreign key dan primary key yang dihubungkan dengan sintaks JOIN. Contoh: Tampilkan data nama, email, jabatan, salary Command: SELECT a.nama, a.email, b.jabatan, b.salary FROM Karyawan a JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan
Hasil:
Keterangan : Menampilkan field nama, email, jabatan, dan salary berdasarkan kesamaan kode_jabatan pada kedua tabel yang masing-masing memiliki data pada fieldnya. Jika ada data yang tidak ada nilainya, maka tidak akan ditampilkan. Dalam kasus ini, data karyawan atas nama Nita tidak ditampilkan karena kode_jabatannya null. 3.
LEFT JOIN (LEFT OUTER JOIN) a. Left Outer Join tanpa klausa where Menampilkan semua baris dari tabel yang ada di sebelah kiri perintah JOIN, bahkan jika tidak terdapat kesamaan antara foreign key dan primary di kedua tabel. Contoh: Tampilkan data nama, email, salary Command: SELECT a.nama, a.email, b.salary FROM Karyawan a LEFT JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan
Hasil:
Keterangan: Pada hasil di atas, terdapat nilai null karena sintaks left outer join menjadikan tabel yang sebelah kiri atau yang pertama kali disebut (tabel: karyawan) sebagai referensi. Dan jika tidak ada nilainya berdasarkan tabel jabatan, maka data tetap akan di tampilkan, namun nilai nya adalah null. Dalam kasus ini, salary karyawan atas nama Nita tetap ditampilkan, namun nilainya null. b. Left Outer Join dengan klausa where Command: SELECT a.nama, a.email, b.salary FROM Karyawan a LEFT JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan WHERE b.salary IS NULL
Hasil:
Keterangan: Sama seperti left outer join sebelumnya, namun dalam kasus ini ditambahkan klausa where dimana data yang ditampilkan hanya karyawan yang salarynya bernilai null. 4.
RIGHT JOIN (RIGHT OUTER JOIN) a. Right Outer Join tanpa klausa where Menampilkan semua baris dari tabel yang ada di sebelah kanan perintah JOIN, bahkan jika tidak terdapat kesamaan antara foreign key dan primary di kedua tabel. Contoh: Tampilkan data nama, email, salary, jabatan Command: SELECT a.nama, a.email, b.jabatan, b.salary FROM Karyawan a RIGHT JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan
Hasil:
Keterangan: Pada hasil di atas, terdapat nilai null karena sintaks right outer join menjadikan tabel yang sebelah kanan atau yang kedua kali disebut (tabel: jabatan) sebagai referensi. Dan jika ada tabel sebelah kiri yang memiliki nilai, maka data tetap akan di tampilkan, namun nilainya akan null. Dalam kasus ini, nama dan email karyawan atas nama Nita tetap ditampilkan, namun nilainya null. b. Right Outer Join dengan klausa where Command: SELECT a.nama, a.email, b.jabatan, b.salary FROM Karyawan a RIGHT JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan WHERE a.nama IS NULL OR a.email IS NULL
Hasil:
Keterangan: Sama seperti right outer join sebelumnya, namun dalam kasus ini ditambahkan klausa where dimana data yang ditampilkan hanya karyawan yang nama dan emailnya bernilai null.
5.
FULL JOIN (FULL OUTER JOIN) a. Full Outer Join tanpa klausa where Menampilkan semua baris dari tabel yang ada disebelah kiri maupun kanan perintah JOIN walaupun tidak terdapat kesamaan antara foreign key dan primary di kedua tabel. Contoh: Tampilkan data nama, email, salary, jabatan Command: SELECT a.nama, a.email, b.jabatan, b.salary FROM Karyawan a FULL JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan
Hasil:
Keterangan: Full outer join menghasilkan semua data yang ditemukan dan cocok satu sama lain pada kedua tabel, jika ada yang tidak cocok, bagian yang tidak ada tersebut akan berisi null. Jadi bisa dikatakan, full outer join ini akan menampilkan semua data yang ada di kedua tabel termasuk yang tidak cocok satu sama lain. b. Full Outer Join dengan klausa where Command: SELECT a.nama, a.email, b.jabatan, b.salary FROM Karyawan a FULL JOIN Jabatan b on a.kode_jabatan=b.kode_jabatan WHERE a.nama IS NULL or a.email IS NULL
Hasil:
Keterangan: Sama seperti full outer join sebelumnya, namun dalam kasus ini ditambahkan klausa where dimana data yang ditampilkan hanya karyawan yang nama dan emailnya bernilai null.