MODUL MENGGUNAKAN BAHASA PEMROGRAMAN SQL TINGKAT LANJUT MATERI : VIEW DAN JOIN
A. JOIN Join adalah penggabungan table yang dilakukan melalui kolom / key tertentu yang memiliki nilai terkait untuk mendapatkan satu set data dengan informasi lengkap. Perintah JOIN dalam SQL digunakan untuk menampilkan data pada table yang saling berhubungan atau berelasi. Artinya kita dapat menampilkan data dalam beberapa table hanya dengan satu kali perintah
JOIN Pada MySQL
Untuk menggabungkan tabel pada MySQL, kita gunakan klausa JOIN. Pada MySQL terdapat beberapa macam bentuk join, yaitu INNER JOIN, LEFT OUTER JOIN, dan RIGHT OUTER JOIN. Format penulisannya adalah sebagai berikut: SELECT nama_kolom FROM tabel INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN tabel ON kondisi Selain menggunakan klausa ON untuk mendefinisikan kondisi, kita dapat menggunakan klausa USING, format penulisannya adalah: SELECT nama_kolom FROM tabel INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN tabel USING(nama_kolom) Klausa USING ini akan menggunakan nama kolom yang ada di dalam tanda kurung untuk menghubungkan kedua tabel, kolom ini harus ada pada tabel yang ingin dihubungkan dan harus memiliki nama yang sama. Biasanya kolom yang berhubungan didefinisikan sebagai Primary Key dan Foreign Key, namun tidak masalah jika keduanya bukan primary key maupun foreign key.
INNER JOIN
INNER JOIN adalah tipe join yang akan kita bahas pertama. Tipe join ini akan mengambil semua row dari table asal dan table tujuan dengan kondisi nilai key yang terkait saja, dan jika tidak maka row tersebut tidak akan muncul. Inner Join merupakan perintah untuk menampilkan semua data yang mempunyai nilai sama. Contoh: SELECT * FROM karyawan INNER JOIN gaji ON karyawan.karyawan_id=gaji.karyawan_id; Query diatas akan menghasilakn output seperti berikut:
Coba Kita perhatikan jumlah record yang ditampilkan! Record yang ditampilkan sebanyak 5 record. Karena INNER JOIN hanya memperhitungkan kondisi key yang terkait antara table karyawan dengan table gaji. Sedangkan karyawan dengan karyawan_id=’006’ tidak ditampilkan, karena tidak terkait dengan table gaji. Jika dibuat diagram venn-nya akan terlihat seperti gambar berikut:
OUTER JOIN
Cara kedua untuk menggabungkan tabel pada MySQL adalah menggunakan outer join. Pada outer join, data pada salah satu tabel akan ditampilkan semua, sedangkan data pada tabel yang lain hanya akan ditampilkan jika data tersebut ada pada tabel pertama. Pada MySQL, OUTER JOIN dibagi menjadi dua, yaitu LEFT OUTER JOIN dan RIGHT OUTER JOIN. 1) LEFT JOIN
LEFT JOIN atau biasa juga dikenal dengan LEFT OUTER JOIN merupakan perintah join untuk menampilkan semua data sebelah kiri dari table yang di joinkan dan menampilkan data sebelah kanan yang cocok dengan kondisi join. Jika tidak ditemukan kecocokan, maka akan di set NULL secara otomatis. Contoh: SELECT * FROM karyawan LEFT JOIN gaji ON karyawan.karyawan_id=gaji.karyawan_id; Query diatas akan menghasilkan output seperti berikut:
Coba Kita perhatikan jumlah record yang ditampilkan! Record yang ditampilkan sebanyak 6 record. Karena LEFT JOIN akan menampilkan semua table sebelah kiri dari kondisi join yaitu table karyawan. Semua data pada table karyawan akan ditampilkan, meskipun tidak ada kecocokan key pada table gaji. Jika dibuat diagram venn-nya akan terlihat seperti gambar berikut:
Selain kondisi diatas, LEFT JOIN juga bisa menampilkan data yang hanya kondisi key pada table tamu ( foreign key ) kosong ( NULL). Contoh: SELECT * FROM karyawan LEFT JOIN gaji ON karyawan.karyawan_id=gaji.karyawan_id WHERE gaji.karyawan_id IS NULL; Query diatas akan menghasilkan output seperti berikut:
Data yang ditampilkan hanya 1 record. Hal ini dikarenakan, hanya ada satu data yang belum memiliki kecocokan key pada table tamu. Untuk mempermudah kita memahami perbedaan antara kedua LEFT JOIN ini coba perhatikan diagram venn berikut:
Dengan melihat perbedaan dari diagram venn tersebut, maka Kita akan mudah memahami bagaimana left join ini bekerja. Ingat LEFT JOIN ini sangat penting untuk kita pahami, karena disaat Kita mulai mengerjakan project yang cukup kompleks, maka kita akan banyak berkutat dengan left join ini. Contoh pada kasus diatas, hanya dengan memanfaatkan left join kita bisa menampilkan semua data karyawan yang sudah ada gajinya dan siapa yang belum ada gajinya. Selain itu kita juga dapat menampilkan semua data karyawan yang belum ada gajinya dengan fungsi LEFT JOIN WHERE NULL
2 RIGHT JOIN
Kebalikan dari LEFT JOIN adalah RIGHT JOIN, atau biasa juga dikenal dengan RIGHT OUTER JOIN. RIGHT JOIN akan menampilkan semua data yang ada di table sebelah kanan dan mencari kecocokan key pada table sebelah kiri. Jika tidak ditemukan kecocokan, maka akan di set NULL secara otomatis pada table sebelah kiri. Contoh: SELECT * FROM gaji RIGHT JOIN karyawan ON gaji.karyawan_id=karyawan.karyawan_id; Query diatas akan menampilkan output seperti gambar be rikut:
Pada output diatas, kita dapat melihat bahwa terdapat NULL pada table sebelah kiri. Hal ini dikarenakan tidak ditemukan kecocokan key diantara kedua table. Untuk lebih mudah memahaminya, perhatikan diagram venn berikut:
Selain kondisi diatas, RIGHT JOIN juga bisa menampilkan data yang hanya kondisi key pada table tamu ( foreign key ) kosong ( NULL). Contoh: SELECT * FROM gaji RIGHT JOIN karyawan ON gaji.karyawan_id=karyawan.karyawan_id WHERE gaji.karyawan_id IS NULL; Query diatas akan menghasilkan output seperti gambar berikut:
Data yang ditampilkan hanya 1 record. Hal ini dikarenakan, hanya ada satu data yang belum memiliki kecocokan key pada table tamu. Untuk mempermudah kita memahami perbedaan antara kedua RIGHT JOIN ini coba perhatikan diagram venn berikut:
Perhatikan diagram venn diatas, dan bandingkan dengan diagram venn sebelumnya.
B. VIEW View adalah perintah query yang disimpan pada database dengan suatu nama tertentu, sehingga bisa digunakan setiap saat untuk melihat data tanpa menuliskan ulang query tersebut. Di dalam MySQL, View dapat didefenisikan sebagai ‘tabel virtual’. Tabel ini bisa berasal dari tabel lain, atau gabungan dari beberapa tabel. Tujuan dari pembuatan VIEW adalah untuk kenyamanan (mempermudah penulisan query), untuk keamanan (menyembunyikan beberapa kolom yang bersifat rahasia), atau dalam beberapa kasus bisa digunakan untuk mempercepat proses menampilkan data (terutama jika kita akan menjalankan query tersebut secara berulang). Keuntungan VIEW : 1. Membatasi akses data 2. Menyediakan data yang independen 3. Menampilkan view yang berbeda-beda dengan data yang sama 4. Memudahkan query yang kompleks
Sebagai contoh, misalkan kita ingin menampilkan nama dosen yang berdomisi di Jakarta, maka kita bisa menggunakan query berikut: mysql> SELECT NIP, nama_dosen, alamat FROM daftar_dosen WHERE alamat = 'Jakarta'; +------------+--------------+---------+ | NIP | nama_dosen | alamat | +------------+--------------+---------+ | 0576431001 | M. Siddiq | Jakarta | | 1080432007 | Arif Budiman | Jakarta | +------------+--------------+---------+ 2 rows in set (0.00 sec) Misalkan query tersebut akan dijalankan setiap beberapa detik (diakses dari website yang sibuk), pada setiap permintaan data, MySQL server harus melakukan pemrosesan untuk mencari seluruh dosen yang memiliki alamat di Jakarta. Selain itu, dengan menggunakan VIEW kita bisa menyembunyikan beberapa kolom dari tabel daftar_dosen (tabel sumbernya). Cara Penggunaan VIEW di dalam MySQL
Untuk membuat View di dalam MySQL, kita tinggal menggunakan format dasar sebagai berikut. Sintak dasar untuk membuat view di MySQL: CREATE VIEW nama_view AS SELECT kolom_1, kolom_2, kolom_n FROM nama_table
WHERE kondisi; Selanjutnya VIEW bisa diakses seperti tabel ‘biasa’. Agar lebih jelas, langsung saja kita praktek menggunakan tabel daftar_dosen dari database mahasiswa: mysql> CREATE VIEW dosen_jakarta AS SELECT NIP, nama_dosen, alamat FROM daftar_dosen WHERE alamat = 'Jakarta'; Query OK, 0 rows affected (0.17 sec)
mysql> SELECT * FROM dosen_jakarta; +------------+--------------+---------+ | NIP | nama_dosen | alamat | +------------+--------------+---------+ | 0576431001 | M. Siddiq | Jakarta | | 1080432007 | Arif Budiman | Jakarta | +------------+--------------+---------+ 2 rows in set (0.15 sec) Dalam query diatas, kita membuat sebuah VIEW bernama dosen_jakarta. Kita juga menyembunyikan kolom no_hp dari tabel asli daftar_dosen. Untuk mengakses data yang terdapat di VIEW, cukup menggunakan query SELECT: mysql> SELECT * FROM dosen_jakarta; +------------+--------------+---------+ | NIP | nama_dosen | alamat | +------------+--------------+---------+ | 0576431001 | M. Siddiq | Jakarta | | 1080432007 | Arif Budiman | Jakarta | +------------+--------------+---------+ 2 rows in set (0.18 sec) Sekarang, pada setiap pemanggilan VIEW, MySQL Server tidak perlu memfilter hasil pencarian, namun cukup memanggil tabel virtual. Hal ini akan mempercepat proses tampilan data. VIEW juga berfungsi sama seperti layaknya tabel ‘biasa’, sebagai contoh, kita bisa melakukan query berikut: mysql> SELECT nama_dosen FROM dosen_jakarta WHERE NIP = '1080432007'; +--------------+ | nama_dosen | +--------------+ | Arif Budiman | +--------------+ 1 row in set (0.20 sec) Meng-Update View
Kita dapat meng-update view sesuai dengan kebutuhan Kita seperti menambahkan kolom pada view ataupun menambahkan filter pada Where Clause di view tersebut. Untuk mengupdate view, Kita bisa menggunakan perintah CREATE OR REPLACE VIEW. Di bawah ini adalah sintak dasar untuk mengupdate view yang sudah ada di MySQL: CREATE OR REPLACE VIEW nama_view AS SELECT kolom_1, kolom_2, kolom_n FROM nama_tabel
WHERE kondisi;
Sebagai Latihan, coba Kita modifikasi view V_KARYAWAN_IT yang semula menampilkan semua jenis kelamin, dengan menambahkan filter HANYA karyawan yang berjenis kelamin laki-laki saja.
mysql> CREATE OR REPLACE VIEW V_KARYAWAN_IT AS SELECT nik, nama, gender "Jenis Kelamin", gaji_pokok+tunjangan "Gaji Bersih" FROM karyawan WHERE department = 'IT' AND gender = 'L';
Query OK, 0 rows affected (0.04 sec) Menghapus View (Drop View)
Di bawah ini adalah sintak dasar untuk menghapus view di MySQL DROP VIEW nama_view; Contoh: DROP VIEW V_KARYAWAN_IT;