1. Perintah MySQL untuk Menampilkan Data dari Beberapa Tabel
Di dalam suatu RDBMS termasuk MySQL, tentunya sudah menjadi suatu kewajaran jika dalam satu database dapat terdiri dari beberapa tabel. Masing-masing tabel tersebut dapat berhubungan (berelasi) satu sama lain. Relasi antar-tabel dapat berupa relasi 1-1 (one-to-one), 1-M (one-to-many), atau M-N (many-to-many). Sebagai contoh terlihat pada gambar pemodelan data konseptual (class diagram) di bawah ini. Tabel pelanggan berhubungan dengan pesan, pesan dengan barang, dsb.
Pada pembuatan suatu aplikasi, terkadang kita juga memerlukan tampilan data yang tidak hanya berasal dari 1 (satu) tabel, namun bisa dari beberapa tabel sekaligus. Contohnya, dari class diagram di bawah, kita ingin menampilkan nama pelanggan berikut transaksi yang pernah dilakukannya. Dari contoh tersebut, kita harus bisa menggabungkan minimal dua tabel, yaitu pelanggan dan pesan.
Untuk menggabungkan 2 (dua) atau lebih tabel, kita dapat menggunakan bentuk perintah JOIN. Dalam tutorial ini, akan dijelaskan secara bertahap mengenai bagaimana menggabungkan dua tabel atau lebih, terutama untuk menampilkan data yang berasal dari beberapa tabel (query mysql untuk penggabungan tabel). Contoh-contoh dalam tutorial ini secara khusus telah dicoba di database MySQL, namun demikian secara umum perintah penggabungan tabel di semua jenis database tidak jauh berbeda alias sama.
Sebelum belajar mengenai perintah penggabungan tabel, perlu dipersiapkan tabel-tabel yang akan dijadikan sebagai bahan latihan dan contoh dalam tutorial ini. Kita akan menggunakan tabel rancangan sistem pemesanan barang (pembelian) sederhana berikut ini. Untuk membuatnya, Anda dapat menggunakan tools seperti PHPMyAdmin dan MySQLFront atau dapat juga melalui command-prompt. Jika diperlukan, pelajari kembali postingan saya sebelumnya mengenai administrasi database MySQL dengan PHPMyAdmin dan juga dasar-dasar perintah SQL. Jangan lupa isikan beberapa contoh data ke tabel-tabel yang sudah Anda buat.
Contoh Clas Diagram Sistem Pembelian

Contoh IsiTabel Pelangan
Inner Join
Dengan inner join, tabel akan digabungkan dua arah, sehingga tidak ada data yang NULL di satu sisi. Sebagai contoh, kita akan menggabungkan tabel pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi). Misalkan isi tabel pelanggan dan pesan adalah sebagai berikut :
Tabel pelanggan (hanya ditampilkan field id_pelanggan, nm_pelanggan dan email)

Contoh IsiTabel Pelangan
Tabel Pesan.
Contoh Isi Tabel Pesan
Cara #1. Inner Join dengan WHERE.
Penggabungan dengan klausa WHERE memiliki bentuk umum sebagai berikut:
Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan:
Hasilnya Berikut:
Pada hasil perintah query di atas terlihat bahwa terdapat 5 (lima) transaksi yang dilakukan oleh 3 (tiga) orang pelanggan. Jika kita lihat kembali isi tabel pelanggan di atas, maka terdapat satu pelanggan yang tidak ditampilkan yaitu yang memiliki id pelanggan P0003. Pelanggan tersebut tidak ditampilkan karena belum pernah melakukan transaksi.
Cara #1. Inner Join dengan klausa INNER JOIN.
Berikut ini bentuk umumnya:
Dan berikut ini perintah SQL penggabungan tabel pelanggan dan pesan.
Hasilnya akan sama dengan gambar di atas (cara #1).
2. Pengertian , Contoh Penerapan dan Penanggulangan SQL Injection
2. Pengertian , Contoh Penerapan dan Penanggulangan SQL Injection
Ø Apa itu SQL Injection ?
Kali ini saya akan membahas sedikit mengenai SQL Injection yang merupakan salah satu istilah dalam dunia teknologi khususnya dalam teknologi database. Tutorial ini sebenarnya saya buat untuk mengerjakan tugas praktikum kuliah saya . Oke langsung saja kita bahas lebih lanjut lagi ----->>>
SQL Injection merupakan salah satu masalah vulnerability dalam security dalam implementasi database. SQL sendiri merupakan singkatan dari Structured Query Languange. Artinya pengelolaan database dilakukan dengan mengirimkan perintah-perintah (queries) yang terstruktur dengan bahasa yang tersedia. Nah, SQL Injection yang secara harafiah berarti penyuntikan SQL memiliki artinya menyisipkan perintah atau query ke dalam query yang akan digunakan dalam database SQL.
Penggunaan SQL sebagai salah satu database management system turut mempopulerkan istilah SQL Injection ini dan menjadikan SQL Injection sebagai salah satu masalah keamanan yang cukup berbahaya bila tidak ditangani dengan serius. Apalagi penggunaan database dengan basis SQL seperti MySQL, Microsoft SQL Server, PostgreSQL cukup populer dibanding database lainnya.
SQL Injection umumnya terjadi karena ketidaktelitian programmer dalam membuat script yang akan dijadikan query SQL. Dan tentu saja hal ini bukan merupakan sesuatu yang mudah untuk dihilangkan karena setiap programmer memiliki tingkat ketelitiannya masing-masing saat membuat program.
Ø Contoh Penerapan SQL Injection
Mari kita lihat contoh penerapan SQL Injection seperti di bawah. Perlu diketahui bahwa contoh yang saya gunakan adalah dengan bahasa pemrograman PHP dan database MySQL.
Seringkali ketika kita akan mengambil data dari database, kita akan menggunakan query seperti
"SELECT * FROM table_user WHERE username = '".$username."';"
Ketika user memasukkan data ke variable $username dengan nilai
etersoul
maka kode di atas akan berubah menjadi:SELECT * FROM table_user WHERE username = 'etersoul';
Hasil di atas tampak tidak bermasalah dan dengan mudah sang programmer akan mendapatkan semua data mengenai seorang user dari table_user yang memiliki username = ‘etersoul’. Masalah akan timbul bila seorang hacker (atau user lain) yang mencoba untuk memasukkan nilai
' OR 1 = 1; --
ke dalam variabel $username. Maka hasil dari penggunaan variabel tersebut adalah:SELECT * FROM table_user WHERE username = '' OR 1 = 1; --'
Query di atas akan mengambil semua data yang terdapat dalam table_user karena terdapat nilai 1 = 1 yang selalu bernilai true. Sedangkan penggunaan
--
berguna agar kode setelah tanda tersebut dianggap sebagai komentar (comment) dan tidak dieksekusi oleh SQL. Seorang hacker bisa saja menggunakan data yang telah didapat di atas untuk keperluan yang buruk misalnya menggunakan account user karena password telah diketahui (walau pada kenyataannya saat ini kebanyakan password telah dienkripsi atau diacak sebelum dimasukkan ke database).
Bila contoh di atas tidak cukup, mari kita coba menggunakan
'; DROP TABLE table_user; --
sehingga menjadi:
SELECT * FROM table_user WHERE username = '; DROP TABLE table_user; --'
Setelah query tersebut dieksekusi, maka hilanglah tabel table_user dari database Anda, kecuali Anda memiliki backup atas table itu.
Ø Cara Pencegahan
Cara yang dapat dilakukan cukup mudah. Di PHP sendiri disediakan fungsi
mysql_real_escape_string()
yang dapat digunakan untuk “membersihkan” (sanitize) string dengan melakukan escape atau perubahan terhadap karakter-karakter tertentu, misalnya karakter \ menjadi \\, ” menjadi \” sehingga tidak terjadi salah “asumsi” oleh SQL. Sedangkan untuk melakukan sanitize terhadap integer dapat digunakan fungsi intval(). Untuk float dapat digunakan floatval(). Sekarang mari kita lihat kode hacker di atas setelah di-sanitize dengan mysql_real_escape_string($username);SELECT * FROM table_user WHERE username = '\' OR 1 = 1; --'
atau
SELECT * FROM table_user WHERE username = '\'; DROP TABLE table_user; --'
Yah, sekarang tanda ‘ telah di-escape menjadi \’ sehingga SQL tidak akan menganggap tanda kutip tersebut sebagai bagian dari perintah SQL untuk menutup tanda kutip sebelumnya, melainkan sebagai sebuah karakter.
Untuk bahasa pemrograman lainnya umumnya telah disediakan juga fungsi untuk melakukan escape terhadap string (umumnya fungsi tersebut menggunakan kata escape). Dalam PHP sendiri dapat digunakan mysql_escape_string(), akan tetapi fungsi ini tidak disarankan untuk digunakan karena tidak melakukan escape terhadap beberapa jenis karakter.