SlideShare une entreprise Scribd logo
1  sur  5
Télécharger pour lire hors ligne
MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net
MySQL: Perintah Query untuk Mencari
Record yang Tidak Ada di Tabel Lain
Tutorial ini ditulis oleh Achmad Solichin
dan sudah dipublikasikan di http://achmatim.net pada tanggal 25 Mei 2013
Sebagai programmer, saat membangun suatu aplikasi seringkali kita menemukan
permasalahan atau kondisi yang mengharuskan kita melakukan perbandingan record pada
tabel basis data. Sebagai contoh sederhana adalah pada kasus sistem perpustakaan. Jika
data transaksi peminjaman dan pengembalian terpisah dalam tabel berbeda, maka akan
timbul permasalahan saat kita ingin menampilkan buku atau transaksi yang belum
dikembalikan. Dengan kata lain, kita harus dapat melakukan perbandingan diantara tabel
peminjaman dan pengembalian. Untuk menampilkan data transaksi yang belum
dikembalikan, tentu kita harus mencari record yang ada di tabel peminjaman namun tidak
ada di tabel pengembalian.
Pada tutorial ini akan dibahas mengenai perintah query untuk mencari atau menampilkan
record yang ada di suatu tabel namun tidak ada di tabel yang lainnya, seperti pada kasus
peminjaman dan pengembalian buku perpustakaan di atas. Seluruh perintah query dalam
tutorial ini diujicobakan dalam database MySQL. Dan sebelum melanjutkan tutorial ini,
alangkah baiknya jika Anda mengenal terlebih dahulu perintah-perintah dasar MySQL1
dan bagaimana perintah penggabungan (join) beberapa tabel di MySQL2
. Semoga tutorial
ini bermanfaat untuk kita semua.
Contoh Tabel dan Record: Sistem Informasi Perpustakaan
Sebagai contoh dalam tutorial ini, dibuat struktur basis data untuk Sistem Informasi
Perpustakaan sederhana. Lihat Gambar 1 . Data buku tersimpan di tabel buku, dan untuk
setiap copy buku disimpan di tabel copy_buku. Untuk meminjam buku di perpustakaan,
peminjam harus menjadi anggota terlebih dahulu. Tidak ada batasan jumlah buku untuk
setiap transaksi peminjaman, namun lama peminjaman normal dibatasi hanya 1 minggu
kalender (tidak memperhitungkan hari libur). Untuk seluruh buku yang dipinjam dalam satu
transaksi peminjaman harus dikembalikan bersamaan, dan pengembalian setelah batas
waktu pinjam akan dikenakan denda.
1 http://achmatim.net/2009/12/09/pengenalan-perintah-dasar-sql-di-mysql/
2 http://achmatim.net/2010/01/18/perintah-mysql-untuk-menampilkan-data-dari-beberapa-tabel/
Halaman 1 dari 5
MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net
Perintah SQL untuk membuat dan mengisi data pada struktur basis data di atas dapat
diunduh di http://achmatim.net/_downloads/dbperpustakaan.sql.
Penggabungan (JOIN) Beberapa Tabel
Dalam pembuatan sistem informasi, seringkali kita membutuhkan penggabungan beberapa
tabel sekaligus. Untuk melakukan penggabungan tabel, hal utama yang harus diperhatikan
adalah setiap tabel yang akan digabungkan harus saling terhubung atau ber-relasi. Sebagai
contoh pada struktur basis data Gambar 1 di atas, tabel anggota dan tabel peminjaman
dapat digabungkan (di-JOIN) karena terdapat field yang menjadi primary key di tabel
anggota dan foreign key di tabel peminjaman, yaitu kd_anggota. Field tersebut-lah yang
menjadi penghubung kedua tabel. Sementara itu, antara tabel anggota dan pengembalian
tidak dapat digabung secara langsung karena tidak memiliki field penghubung. Keduanya
dapat digabungkan dengan menyertakan tabel peminjaman dalam proses penggabungan.
Lebih jelas mengenai perintah penggabungan beberapa tabel di MySQL dapat mempelajari
tutorial saya sebelumnya berjudul Perintah MySQL untuk Menampilkan Data Dari
Beberapa Tabel 3
.
Menampilkan Transaksi Peminjaman yang Belum Kembali
Kembali ke permasalahan utama tutorial ini, yaitu menampilkan data di suatu tabel yang
tidak ada di tabel yang lainnya. Dalam contoh kasus Sistem Informasi Perpustakaan di atas,
kita akan menampilkan transaksi peminjaman yang belum dikembalikan. Data yang akan
ditampilkan adalah ID Peminjaman, tanggal peminjaman, nama anggota peminjam dan
3 http://achmatim.net/2010/01/18/perintah-mysql-untuk-menampilkan-data-dari-beberapa-tabel/
Halaman 2 dari 5
Gambar 1: Struktur Basis Data Sistem Perpustakaan
MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net
batas akhir pengembalian. Untuk melakukan hal tersebut, kita perlu menggabungkan 3
(tiga) buah tabel sekaligus yaitu tabel (1) anggota, (2) peminjaman dan (3) pengembalian.
Kita akan menampilkan data yang ada di tabel peminjaman namun belum ada di tabel
pengembalian.
Perhatikan perintah query sebagai berikut. Antara tabel anggota dan peminjaman dilakukan
INNER JOIN sedangkan antara peminjaman dan pengembalian dilakukan LEFT JOIN karena
terdapat kemungkinan data di peminjaman tidak ada di tabel pengembalian. Jika ingin
menampilkan data peminjaman yang belum kembali cukup menambahkan kondisi dimana
ID pinjam di tabel pengembalian masih kosong (NULL).
Query 1: Menampilkan Transaksi Peminjaman yang Belum Kembali
1
2
3
4
SELECT b.id_pinjam, b.tgl_pinjam, a.nama, b.tgl_hrskembali 
FROM anggota a INNER JOIN peminjaman b ON a.kd_anggota=b.kd_anggota
LEFT JOIN pengembalian c ON b.id_pinjam=c.id_pinjam
WHERE c.id_pinjam IS NULL
Cara lain untuk menyelesaikan permasalahan yang sama adalah dengan menggunakan
sub-query atau sub-select. Cara kedua ini tidak memerlukan join dengan tabel
pengembalian.
Query 2 : Menampilkan Transaksi Peminjaman yang Belum Kembali (SUB-SELECT)
1
2
3
SELECT b.id_pinjam, b.tgl_pinjam, a.nama, b.tgl_hrskembali 
FROM anggota a INNER JOIN peminjaman b ON a.kd_anggota=b.kd_anggota
WHERE b.id_pinjam NOT IN (SELECT id_pinjam FROM pengembalian)
Kedua query di atas akan menampilkan hasil yang sama, namun demikian query 1 yang
menggunakan JOIN lebih disarankan karena memiliki performa / kecepatan yang lebih baik.
Beberapa sumber menyatakan bahwa query JOIN lebih baik dari SUBQUERY dari sisi
performa, diantaranya salah satu diskusi di situs StackOverflow ini 4
.
Berikut ini hasil dari perintah query diatas.
Menampilkan Buku yang Masih Dipinjam (Belum Dikembalikan)
Pada dasarnya permasalahan ini sama seperti sebelumnya, hanya saja data yang ingin
ditampilkan adalah data buku, bukan data transaksi peminjaman. Kolom yang akan
ditampilkan meliputi kode buku, judul buku, nama peminjam, tanggal peminjaman dan
tanggal harus kembali. Untuk menyelesaikannya, kita perlu melibatkan tabel detil_pinjam
4 http://stackoverflow.com/questions/3856164/sql-joins-vs-sql-subqueries-performance
Halaman 3 dari 5
MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net
serta tabel terkait buku dan copy buku. Dengan kata lain, kita perlu menggabungkan semua
tabel pada Gambar 1.
Perhatikan dan pahami query 3 berikut ini.
Query 3 : Menampilkan Buku yang Masih Dipinjam (Belum Dikembalikan)
1
2
3
4
5
6
7
8
SELECT e.kd_buku, e.judul, a.nama, b.tgl_pinjam, b.tgl_hrskembali
FROM anggota a INNER JOIN peminjaman b ON a.kd_anggota=b.kd_anggota
INNER JOIN detil_pinjam c ON b.id_pinjam=c.id_pinjam
INNER JOIN copy_buku d ON c.kd_copybuku=d.kd_copybuku
INNER JOIN buku e ON d.kd_buku=e.kd_buku
LEFT JOIN pengembalian f ON b.id_pinjam=f.id_pinjam
WHERE f.id_pinjam IS NULL
ORDER BY e.judul
Hasil dari perintah query 3 di atas sebagai berikut.
Kesimpulan
Tutorial ini menjelaskan secara singkat mengenai bagaimana perintah query untuk mencari
record atau data yang ada di suatu tabel namun tidak ada di tabel yang lainnya. Dalam
tutorial ini dicontohkan kasus sistem informasi perpustakaan. Solusi permasalahan dapat
menggunakan query dengan penggabungan LEFT JOIN dan query dengan SUB-SELECT atau
SUBQUERY. Keduanya dapat digunakan namun lebih disarankan menggunakan LEFT JOIN
karena lebih baik secara performa.
Download
• Tutorial ini dapat dibaca dan diunduh secara online di
http://achmatim.net/2013/05/19/mysql-perintah-query-untuk-mencari-record-yang-tidak
-ada-di-tabel-lain/
Semoga tutorial ini bermanfaat untuk kita semua dan berbagilah hal baik ke
sebanyak-banyaknya orang maka kebahagiaan akan menghampiri Anda. Satu Karya untuk
Indonesia!
Referensi Terkait
• Buku Gratis MySQL: Dari Pemula Hingga Mahir.
http://achmatim.net/buku-gratis/mysql-5-dari-pemula-hingga-mahir/
Halaman 4 dari 5
MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net
Tentang Penulis
Achmad Solichin. Adalah Lulusan Teknik Informatika, Fakultas Teknologi
Informasi, Universitas Budi Luhur, Jakarta (S1, 2005) dan Magister Teknologi
Informasi, Universitas Indonesia (S2, 2010). Saat ini sedang menempuh
program Doktoral dalam bidang Ilmu Komputer di Universitas Gadjah Mada,
Jogjakarta. Kegiatan sehari-hari adalah sebagai Dosen di Universitas Budi
Luhur (http://www.budiluhur.ac.id). Kegiatan lain aktif sebagai programmer,
web developer, system analyst, konsultan dan memberikan pelatihan di
berbagai bidang komputer serta membuat tutorial-tutorial praktis di bidang
komputer. Penulis memiliki situs utama di http://achmatim.net yang berisi berbagai tutorial
praktis di bidang komputer serta menyediakan buku gratis komputer. Penulis dapat
dihubungi melalui email di achmad.solichin@budiluhur.ac.id dan achmatim@gmail.com, YM
achmatim, Facebook achmatim dan Twitter @achmatim.
Lisensi Dokumen
Seluruh isi dalam dokumen ini dapat digunakan, dimodifikasi dan
disebarluaskan secara bebas untuk tujuan pendidikan, pembelajaran dan
bukan komersial (non profit), dengan syarat tidak menghilangkan, menghapus atau
mengubah atribut penulis dokumen ini dan pernyataan dalam lisensi dokumen yang
disertakan di setiap dokumen. Tidak diperbolehkan mengkomersialkan tutorial ini kecuali
mendapatkan ijin terlebih dahulu dari penulis.
Halaman 5 dari 5

Contenu connexe

Plus de Achmad Solichin

Materi Webinar Web 3.0 (16 Juli 2022)
Materi Webinar Web 3.0 (16 Juli 2022)Materi Webinar Web 3.0 (16 Juli 2022)
Materi Webinar Web 3.0 (16 Juli 2022)Achmad Solichin
 
Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)
Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)
Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)Achmad Solichin
 
Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)
Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)
Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)Achmad Solichin
 
Webinar PHP-ID: Machine Learning dengan PHP
Webinar PHP-ID: Machine Learning dengan PHPWebinar PHP-ID: Machine Learning dengan PHP
Webinar PHP-ID: Machine Learning dengan PHPAchmad Solichin
 
Webinar Data Mining dengan Rapidminer | Universitas Budi Luhur
Webinar Data Mining dengan Rapidminer | Universitas Budi LuhurWebinar Data Mining dengan Rapidminer | Universitas Budi Luhur
Webinar Data Mining dengan Rapidminer | Universitas Budi LuhurAchmad Solichin
 
TREN DAN IDE RISET BIDANG DATA MINING TERBARU
TREN DAN IDE RISET BIDANG DATA MINING TERBARUTREN DAN IDE RISET BIDANG DATA MINING TERBARU
TREN DAN IDE RISET BIDANG DATA MINING TERBARUAchmad Solichin
 
Metodologi Riset: Literature Review
Metodologi Riset: Literature ReviewMetodologi Riset: Literature Review
Metodologi Riset: Literature ReviewAchmad Solichin
 
Materi Seminar: Artificial Intelligence dengan PHP
Materi Seminar: Artificial Intelligence dengan PHPMateri Seminar: Artificial Intelligence dengan PHP
Materi Seminar: Artificial Intelligence dengan PHPAchmad Solichin
 
Percobaan Perpindahan Kalor melalui Konduksi, Konveksi dan Radiasi
Percobaan Perpindahan Kalor melalui Konduksi, Konveksi dan RadiasiPercobaan Perpindahan Kalor melalui Konduksi, Konveksi dan Radiasi
Percobaan Perpindahan Kalor melalui Konduksi, Konveksi dan RadiasiAchmad Solichin
 
Metodologi Riset: Literature Review
Metodologi Riset: Literature ReviewMetodologi Riset: Literature Review
Metodologi Riset: Literature ReviewAchmad Solichin
 
Depth First Search (DFS) pada Graph
Depth First Search (DFS) pada GraphDepth First Search (DFS) pada Graph
Depth First Search (DFS) pada GraphAchmad Solichin
 
Breadth First Search (BFS) pada Graph
Breadth First Search (BFS) pada GraphBreadth First Search (BFS) pada Graph
Breadth First Search (BFS) pada GraphAchmad Solichin
 
Binary Search Tree (BST) - Algoritma dan Struktur Data
Binary Search Tree (BST) - Algoritma dan Struktur DataBinary Search Tree (BST) - Algoritma dan Struktur Data
Binary Search Tree (BST) - Algoritma dan Struktur DataAchmad Solichin
 
Computer Vision di Era Industri 4.0
Computer Vision di Era Industri 4.0Computer Vision di Era Industri 4.0
Computer Vision di Era Industri 4.0Achmad Solichin
 
Seminar: Become a Reliable Web Programmer
Seminar: Become a Reliable Web ProgrammerSeminar: Become a Reliable Web Programmer
Seminar: Become a Reliable Web ProgrammerAchmad Solichin
 
The Big 5: Future IT Trends
The Big 5: Future IT TrendsThe Big 5: Future IT Trends
The Big 5: Future IT TrendsAchmad Solichin
 
Seminar: PHP Developer for Dummies
Seminar: PHP Developer for DummiesSeminar: PHP Developer for Dummies
Seminar: PHP Developer for DummiesAchmad Solichin
 
Pertemuan 1 - Algoritma dan Struktur Data 1
Pertemuan 1 - Algoritma dan Struktur Data 1Pertemuan 1 - Algoritma dan Struktur Data 1
Pertemuan 1 - Algoritma dan Struktur Data 1Achmad Solichin
 
Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016
Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016
Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016Achmad Solichin
 
Seminar: Mau jadi Android User atau Developer?
Seminar: Mau jadi Android User atau Developer?Seminar: Mau jadi Android User atau Developer?
Seminar: Mau jadi Android User atau Developer?Achmad Solichin
 

Plus de Achmad Solichin (20)

Materi Webinar Web 3.0 (16 Juli 2022)
Materi Webinar Web 3.0 (16 Juli 2022)Materi Webinar Web 3.0 (16 Juli 2022)
Materi Webinar Web 3.0 (16 Juli 2022)
 
Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)
Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)
Webinar: Kesadaran Keamanan Informasi (3 Desember 2021)
 
Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)
Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)
Webinar PHP-ID: Mari Mengenal Logika Fuzzy (Fuzzy Logic)
 
Webinar PHP-ID: Machine Learning dengan PHP
Webinar PHP-ID: Machine Learning dengan PHPWebinar PHP-ID: Machine Learning dengan PHP
Webinar PHP-ID: Machine Learning dengan PHP
 
Webinar Data Mining dengan Rapidminer | Universitas Budi Luhur
Webinar Data Mining dengan Rapidminer | Universitas Budi LuhurWebinar Data Mining dengan Rapidminer | Universitas Budi Luhur
Webinar Data Mining dengan Rapidminer | Universitas Budi Luhur
 
TREN DAN IDE RISET BIDANG DATA MINING TERBARU
TREN DAN IDE RISET BIDANG DATA MINING TERBARUTREN DAN IDE RISET BIDANG DATA MINING TERBARU
TREN DAN IDE RISET BIDANG DATA MINING TERBARU
 
Metodologi Riset: Literature Review
Metodologi Riset: Literature ReviewMetodologi Riset: Literature Review
Metodologi Riset: Literature Review
 
Materi Seminar: Artificial Intelligence dengan PHP
Materi Seminar: Artificial Intelligence dengan PHPMateri Seminar: Artificial Intelligence dengan PHP
Materi Seminar: Artificial Intelligence dengan PHP
 
Percobaan Perpindahan Kalor melalui Konduksi, Konveksi dan Radiasi
Percobaan Perpindahan Kalor melalui Konduksi, Konveksi dan RadiasiPercobaan Perpindahan Kalor melalui Konduksi, Konveksi dan Radiasi
Percobaan Perpindahan Kalor melalui Konduksi, Konveksi dan Radiasi
 
Metodologi Riset: Literature Review
Metodologi Riset: Literature ReviewMetodologi Riset: Literature Review
Metodologi Riset: Literature Review
 
Depth First Search (DFS) pada Graph
Depth First Search (DFS) pada GraphDepth First Search (DFS) pada Graph
Depth First Search (DFS) pada Graph
 
Breadth First Search (BFS) pada Graph
Breadth First Search (BFS) pada GraphBreadth First Search (BFS) pada Graph
Breadth First Search (BFS) pada Graph
 
Binary Search Tree (BST) - Algoritma dan Struktur Data
Binary Search Tree (BST) - Algoritma dan Struktur DataBinary Search Tree (BST) - Algoritma dan Struktur Data
Binary Search Tree (BST) - Algoritma dan Struktur Data
 
Computer Vision di Era Industri 4.0
Computer Vision di Era Industri 4.0Computer Vision di Era Industri 4.0
Computer Vision di Era Industri 4.0
 
Seminar: Become a Reliable Web Programmer
Seminar: Become a Reliable Web ProgrammerSeminar: Become a Reliable Web Programmer
Seminar: Become a Reliable Web Programmer
 
The Big 5: Future IT Trends
The Big 5: Future IT TrendsThe Big 5: Future IT Trends
The Big 5: Future IT Trends
 
Seminar: PHP Developer for Dummies
Seminar: PHP Developer for DummiesSeminar: PHP Developer for Dummies
Seminar: PHP Developer for Dummies
 
Pertemuan 1 - Algoritma dan Struktur Data 1
Pertemuan 1 - Algoritma dan Struktur Data 1Pertemuan 1 - Algoritma dan Struktur Data 1
Pertemuan 1 - Algoritma dan Struktur Data 1
 
Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016
Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016
Sharing Penelitian S3 Lab Elins FMIPA UGM - 17 Februari 2016
 
Seminar: Mau jadi Android User atau Developer?
Seminar: Mau jadi Android User atau Developer?Seminar: Mau jadi Android User atau Developer?
Seminar: Mau jadi Android User atau Developer?
 

MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain (Achmatim.net)

  • 1. MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain Tutorial ini ditulis oleh Achmad Solichin dan sudah dipublikasikan di http://achmatim.net pada tanggal 25 Mei 2013 Sebagai programmer, saat membangun suatu aplikasi seringkali kita menemukan permasalahan atau kondisi yang mengharuskan kita melakukan perbandingan record pada tabel basis data. Sebagai contoh sederhana adalah pada kasus sistem perpustakaan. Jika data transaksi peminjaman dan pengembalian terpisah dalam tabel berbeda, maka akan timbul permasalahan saat kita ingin menampilkan buku atau transaksi yang belum dikembalikan. Dengan kata lain, kita harus dapat melakukan perbandingan diantara tabel peminjaman dan pengembalian. Untuk menampilkan data transaksi yang belum dikembalikan, tentu kita harus mencari record yang ada di tabel peminjaman namun tidak ada di tabel pengembalian. Pada tutorial ini akan dibahas mengenai perintah query untuk mencari atau menampilkan record yang ada di suatu tabel namun tidak ada di tabel yang lainnya, seperti pada kasus peminjaman dan pengembalian buku perpustakaan di atas. Seluruh perintah query dalam tutorial ini diujicobakan dalam database MySQL. Dan sebelum melanjutkan tutorial ini, alangkah baiknya jika Anda mengenal terlebih dahulu perintah-perintah dasar MySQL1 dan bagaimana perintah penggabungan (join) beberapa tabel di MySQL2 . Semoga tutorial ini bermanfaat untuk kita semua. Contoh Tabel dan Record: Sistem Informasi Perpustakaan Sebagai contoh dalam tutorial ini, dibuat struktur basis data untuk Sistem Informasi Perpustakaan sederhana. Lihat Gambar 1 . Data buku tersimpan di tabel buku, dan untuk setiap copy buku disimpan di tabel copy_buku. Untuk meminjam buku di perpustakaan, peminjam harus menjadi anggota terlebih dahulu. Tidak ada batasan jumlah buku untuk setiap transaksi peminjaman, namun lama peminjaman normal dibatasi hanya 1 minggu kalender (tidak memperhitungkan hari libur). Untuk seluruh buku yang dipinjam dalam satu transaksi peminjaman harus dikembalikan bersamaan, dan pengembalian setelah batas waktu pinjam akan dikenakan denda. 1 http://achmatim.net/2009/12/09/pengenalan-perintah-dasar-sql-di-mysql/ 2 http://achmatim.net/2010/01/18/perintah-mysql-untuk-menampilkan-data-dari-beberapa-tabel/ Halaman 1 dari 5
  • 2. MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net Perintah SQL untuk membuat dan mengisi data pada struktur basis data di atas dapat diunduh di http://achmatim.net/_downloads/dbperpustakaan.sql. Penggabungan (JOIN) Beberapa Tabel Dalam pembuatan sistem informasi, seringkali kita membutuhkan penggabungan beberapa tabel sekaligus. Untuk melakukan penggabungan tabel, hal utama yang harus diperhatikan adalah setiap tabel yang akan digabungkan harus saling terhubung atau ber-relasi. Sebagai contoh pada struktur basis data Gambar 1 di atas, tabel anggota dan tabel peminjaman dapat digabungkan (di-JOIN) karena terdapat field yang menjadi primary key di tabel anggota dan foreign key di tabel peminjaman, yaitu kd_anggota. Field tersebut-lah yang menjadi penghubung kedua tabel. Sementara itu, antara tabel anggota dan pengembalian tidak dapat digabung secara langsung karena tidak memiliki field penghubung. Keduanya dapat digabungkan dengan menyertakan tabel peminjaman dalam proses penggabungan. Lebih jelas mengenai perintah penggabungan beberapa tabel di MySQL dapat mempelajari tutorial saya sebelumnya berjudul Perintah MySQL untuk Menampilkan Data Dari Beberapa Tabel 3 . Menampilkan Transaksi Peminjaman yang Belum Kembali Kembali ke permasalahan utama tutorial ini, yaitu menampilkan data di suatu tabel yang tidak ada di tabel yang lainnya. Dalam contoh kasus Sistem Informasi Perpustakaan di atas, kita akan menampilkan transaksi peminjaman yang belum dikembalikan. Data yang akan ditampilkan adalah ID Peminjaman, tanggal peminjaman, nama anggota peminjam dan 3 http://achmatim.net/2010/01/18/perintah-mysql-untuk-menampilkan-data-dari-beberapa-tabel/ Halaman 2 dari 5 Gambar 1: Struktur Basis Data Sistem Perpustakaan
  • 3. MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net batas akhir pengembalian. Untuk melakukan hal tersebut, kita perlu menggabungkan 3 (tiga) buah tabel sekaligus yaitu tabel (1) anggota, (2) peminjaman dan (3) pengembalian. Kita akan menampilkan data yang ada di tabel peminjaman namun belum ada di tabel pengembalian. Perhatikan perintah query sebagai berikut. Antara tabel anggota dan peminjaman dilakukan INNER JOIN sedangkan antara peminjaman dan pengembalian dilakukan LEFT JOIN karena terdapat kemungkinan data di peminjaman tidak ada di tabel pengembalian. Jika ingin menampilkan data peminjaman yang belum kembali cukup menambahkan kondisi dimana ID pinjam di tabel pengembalian masih kosong (NULL). Query 1: Menampilkan Transaksi Peminjaman yang Belum Kembali 1 2 3 4 SELECT b.id_pinjam, b.tgl_pinjam, a.nama, b.tgl_hrskembali  FROM anggota a INNER JOIN peminjaman b ON a.kd_anggota=b.kd_anggota LEFT JOIN pengembalian c ON b.id_pinjam=c.id_pinjam WHERE c.id_pinjam IS NULL Cara lain untuk menyelesaikan permasalahan yang sama adalah dengan menggunakan sub-query atau sub-select. Cara kedua ini tidak memerlukan join dengan tabel pengembalian. Query 2 : Menampilkan Transaksi Peminjaman yang Belum Kembali (SUB-SELECT) 1 2 3 SELECT b.id_pinjam, b.tgl_pinjam, a.nama, b.tgl_hrskembali  FROM anggota a INNER JOIN peminjaman b ON a.kd_anggota=b.kd_anggota WHERE b.id_pinjam NOT IN (SELECT id_pinjam FROM pengembalian) Kedua query di atas akan menampilkan hasil yang sama, namun demikian query 1 yang menggunakan JOIN lebih disarankan karena memiliki performa / kecepatan yang lebih baik. Beberapa sumber menyatakan bahwa query JOIN lebih baik dari SUBQUERY dari sisi performa, diantaranya salah satu diskusi di situs StackOverflow ini 4 . Berikut ini hasil dari perintah query diatas. Menampilkan Buku yang Masih Dipinjam (Belum Dikembalikan) Pada dasarnya permasalahan ini sama seperti sebelumnya, hanya saja data yang ingin ditampilkan adalah data buku, bukan data transaksi peminjaman. Kolom yang akan ditampilkan meliputi kode buku, judul buku, nama peminjam, tanggal peminjaman dan tanggal harus kembali. Untuk menyelesaikannya, kita perlu melibatkan tabel detil_pinjam 4 http://stackoverflow.com/questions/3856164/sql-joins-vs-sql-subqueries-performance Halaman 3 dari 5
  • 4. MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net serta tabel terkait buku dan copy buku. Dengan kata lain, kita perlu menggabungkan semua tabel pada Gambar 1. Perhatikan dan pahami query 3 berikut ini. Query 3 : Menampilkan Buku yang Masih Dipinjam (Belum Dikembalikan) 1 2 3 4 5 6 7 8 SELECT e.kd_buku, e.judul, a.nama, b.tgl_pinjam, b.tgl_hrskembali FROM anggota a INNER JOIN peminjaman b ON a.kd_anggota=b.kd_anggota INNER JOIN detil_pinjam c ON b.id_pinjam=c.id_pinjam INNER JOIN copy_buku d ON c.kd_copybuku=d.kd_copybuku INNER JOIN buku e ON d.kd_buku=e.kd_buku LEFT JOIN pengembalian f ON b.id_pinjam=f.id_pinjam WHERE f.id_pinjam IS NULL ORDER BY e.judul Hasil dari perintah query 3 di atas sebagai berikut. Kesimpulan Tutorial ini menjelaskan secara singkat mengenai bagaimana perintah query untuk mencari record atau data yang ada di suatu tabel namun tidak ada di tabel yang lainnya. Dalam tutorial ini dicontohkan kasus sistem informasi perpustakaan. Solusi permasalahan dapat menggunakan query dengan penggabungan LEFT JOIN dan query dengan SUB-SELECT atau SUBQUERY. Keduanya dapat digunakan namun lebih disarankan menggunakan LEFT JOIN karena lebih baik secara performa. Download • Tutorial ini dapat dibaca dan diunduh secara online di http://achmatim.net/2013/05/19/mysql-perintah-query-untuk-mencari-record-yang-tidak -ada-di-tabel-lain/ Semoga tutorial ini bermanfaat untuk kita semua dan berbagilah hal baik ke sebanyak-banyaknya orang maka kebahagiaan akan menghampiri Anda. Satu Karya untuk Indonesia! Referensi Terkait • Buku Gratis MySQL: Dari Pemula Hingga Mahir. http://achmatim.net/buku-gratis/mysql-5-dari-pemula-hingga-mahir/ Halaman 4 dari 5
  • 5. MySQL: Perintah Query untuk Mencari Record yang Tidak Ada di Tabel Lain | Achmatim.Net Tentang Penulis Achmad Solichin. Adalah Lulusan Teknik Informatika, Fakultas Teknologi Informasi, Universitas Budi Luhur, Jakarta (S1, 2005) dan Magister Teknologi Informasi, Universitas Indonesia (S2, 2010). Saat ini sedang menempuh program Doktoral dalam bidang Ilmu Komputer di Universitas Gadjah Mada, Jogjakarta. Kegiatan sehari-hari adalah sebagai Dosen di Universitas Budi Luhur (http://www.budiluhur.ac.id). Kegiatan lain aktif sebagai programmer, web developer, system analyst, konsultan dan memberikan pelatihan di berbagai bidang komputer serta membuat tutorial-tutorial praktis di bidang komputer. Penulis memiliki situs utama di http://achmatim.net yang berisi berbagai tutorial praktis di bidang komputer serta menyediakan buku gratis komputer. Penulis dapat dihubungi melalui email di achmad.solichin@budiluhur.ac.id dan achmatim@gmail.com, YM achmatim, Facebook achmatim dan Twitter @achmatim. Lisensi Dokumen Seluruh isi dalam dokumen ini dapat digunakan, dimodifikasi dan disebarluaskan secara bebas untuk tujuan pendidikan, pembelajaran dan bukan komersial (non profit), dengan syarat tidak menghilangkan, menghapus atau mengubah atribut penulis dokumen ini dan pernyataan dalam lisensi dokumen yang disertakan di setiap dokumen. Tidak diperbolehkan mengkomersialkan tutorial ini kecuali mendapatkan ijin terlebih dahulu dari penulis. Halaman 5 dari 5