0% menganggap dokumen ini bermanfaat (0 suara)
23 tayangan5 halaman

SQL Multi Table Dan SQL Bertingkat

SQL

Diunggah oleh

muchroddin26
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
23 tayangan5 halaman

SQL Multi Table Dan SQL Bertingkat

SQL

Diunggah oleh

muchroddin26
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 5

SQL multi table dan SQL bertingkat

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

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:
SELECT tabel1.*, tabel2.* FROM tabel1, tabel2

WHERE tabel1.PK=tabel2.FK;

Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan:
SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan

FROM pelanggan, pesan

WHERE pelanggan.id_pelanggan=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:
SELECT tabel1.*, tabel2.*

FROM tabel1 INNER JOIN tabel2

ON tabel1.PK=tabel2.FK;

Dan berikut ini perintah SQL penggabungan tabel pelanggan dan pesan.
SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan

FROM pelanggan INNER JOIN pesan

ON pelanggan.id_pelanggan=pesan.

 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.
Yah, itulah sedikit penjelasan mengenai SQL Injection. Semoga hal ini dapat membantu Anda dalam
membuat program yang baik dan aman.

Anda mungkin juga menyukai