Structured Query Language ata SQL adalah bahasa
standar untuk mengambil data dari database,
dan juga sekaligus memanipulasi database.
Meskipun SQL menjadi bahasa standar, SQL masih
memiliki bahasa yang berbeda-beda di beberapa platform.
Misalnya :
- SQL Server menggunakan
Transact-SQL atau T-SQL,
- Microsoft Access menggunakan
Jet-SQL
Untuk sample berikut ini akan saya perlihatkan
syntax SQL pada SQL Server untuk beberapa kasus.
1. Perintah Select
Perintah select adalah perintah yang digunakan
untuk mengambil data yang ada di dalam table. Sintax nya adalah : SELECT
field-1, field-2, .... field-n FROM namatabel
Contoh :
ada 3 data dari tabel mahasiswa berupa nim, nama
data-1 : | 10104417 | Kurnia Hidayat |
data-2 : | 10104422 | Ekky Patria Kencana |
data-3 : | 10104427 | Ogan Sukmawan |
dengan menggunakan perintah "Select * From
mahasiswa" maka akan didapatkan data2 tersebut,
| 10104417 | Kurnia Hidayat |
| 10104422 | Ekky Patria Kencana |
| 10104427 | Ogan Sukmawan |
2. Klausa Where
Where
digunakana untuk menyaring data dalam syntax/command SQL yg kita gunakan.
Syntax :
<arguments> WHERE <arguments> <operator> <arguments>
Tabel
operator yang dapat digunakan :
> Lebih
besar
< Lebih
kecil
>= Lebih
besar sama dengan
<= Lebih
kecil sama dengan
= Sama
dengan
<> Tidak
sama dengan
Between x and y Antara
x dan y
Like Seperti...
bla bla bla... (dengan / mengandung format tertentu)
Is Null Kosong
/ Tidak memiliki nilai
In Nilai
berada di dalam tanda ( dan tanda )
3. Klausa Where Lanjutan
Berikut ini adalah contoh-contoh penggunaan
operator pembanding tersebut dalam query :
1. Ambil data "barang" yang
"jml" nya lebih dari 20
SQL =
" SELECT * From barang WHERE jml > 20 "
2. Ambil data "nilai_mhs" yang
"nilai" nya kurang dari 60
SQL =
" SELECT * From nilai_mhs WHERE nilai < 60 "
3. Ambil data "barang" yang
"jml" nya lebih besar sama dengan 20
SQL =
" SELECT * From barang WHERE jml >= 20 "
4. Ambil data "nilai_mhs" yang
"nilai" nya lebih kecil sama dengan 60
SQL = " SELECT * From nilai_mhs WHERE
nilai <= 60 "
5. Hapus data "mahasiswa" yang memili
"NIM" sama dengan "10104422"
SQL =
" DELETE * From mahasiswa WHERE NIM = '10104422' "
6. Ambil data "barang" yang
"nama_barang" nya mengandung kata "Ice"
SQL =
" SELECT * From barang WHERE nama_barang like '%Ice%' "
7. Ambil data "barang" yang
"kode_brg" nya berawalan "C"
SQL =
" SELECT * From barang WHERE kode_brg like 'C%' "
8. Ambil data "barang" yang
"kode_brg" nya berakhiran '2008'
SQL =
" SELECT * From barang WHERE kode_barang like '%2008' "
9. Ambil data "barang" yang
"jml" nya bernilai null
SQL =
" SELECT * From barang WHERE jml is null "
10. Ambil data "mahasiswa" yang
"usia" nya antara 17 - 19tahun
SQL
= " SELECT * From mahasiswa WHERE usia >=17 and usia<=19 "
3. Klausa Order By
Singkatnya, klausa ini digunakan untuk menrutkan data berdasarkan
sesuatu / field.
Order by
ini secara defaultnya bersifat ascending (klo gak salah, hehe...)
Sejalan dengan order by, ada 2 buah variable lain
yg dapat diikut serta kan, yakni ASC dan DESC.
-ASC
untuk mengurutkan data dari yang bernilai kecil hingga ke data yang bernilai
besar
-DESC
untuk mengurutkan data dari yang bernilai besar hingga ke data yang bernilai
kecil
Syntax :
<arguments> ORDER BY <field> <asc> / <desc>
contoh dari data mahasiswa pada contoh penggunaan
select dapat dilakukan :
1. "SELECT * From mahasiswa ORDER BY NIM
desc"
hasilnya
adalah :
|
10104427 | Ogan Sukmawan |
|
10104422 | Ekky Patria Kencana |
|
10104417 | Kurnia Hidayat |
2. "SELECT * From mahasiswa ORDER BY nama
asc"
hasilnya
adalah :
|
10104422 | Ekky Patria Kencana |
|
10104417 | Kurnia Hidayat |
|
10104427 | Ogan Sukmawan |
4. Aritmethic Function
Fungsi
- fungsi aritmetika yang dapat dijalankan / diambil pada suatu SQL / data
Contoh : data awal berupa NIM, Nama Lengkap, Nilai
| 10104417 | Kurnia Hidayat | 80 |
| 10104422 | Ekky Patria Kencana | 85 |
| 10104427 | Ogan Sukmawan | 75 |
Beberapa eksekusi / function yang ada di T-SQL :
1. Sum : menjumlahkan suatu field
syntax
: "select sum(Nilai) from mahasiswa"
result
: 240
2. Max : mengambil data terbesar
syntax
: "select max(Nilai) from mahasiswa"
result
: 85
3. Min : mengambil data terkecil
syntax
: "select sum(Nilai) from mahasiswa"
result
: 75
4. Avg : menghitung nilai rata-rata
syntax
: "select avg(Nilai) from mahasiswa"
result
: 80
5. Count : menghitung banyak record
syntax
: "select count * from mahasiswa"
result
: 3
5. Klausa Alternatif
- Group
by : mengelompokkan pemanggilan data, biasanya dilakukan untuk mengelompokkan
hasil kalkulasi pada
fungsi aritmetika sebelumnya.
contoh : "SELECT kode_brg, SUM(jml) as total FROM penjualan GROUP
BY kode_brg"
-
Distinct : membuang data yang sama (saat view mode)
contoh tanpa distinct : A0001, A0001, A0002, A0003, A0002
dengan distinct : "SELECT DISTINCT kode_brg FROM penjualan"
maka hasil = A0001, A0002, A0003
6. Insert Command
Insert
disini berarti menambahkan sebuah record baru ke dalam tabel / database yang
telah ada.
Ada 3 buah alternatif untuk melakukan perintah ini,
yakni :
1. Alternatif 1 : mengikutsertakan nama field yang
ada pada tabel
"Insert into mahasiswa (NIM, Nama_Lengkap, Nilai) values
('10104417', 'Kurnia Hidayat', 80)"
Hasilnya adalah
| NIM | Nama_Lengkap | Nilai |
|
10104417 | Kurnia Hidayat | 80 |
"Insert into mahasiswa (NIM, Nama_Lengkap) values ('10104427',
'Ogan Sukmawan')"
Hasilnya adalah
|
NIM | Nama_Lengkap | Nilai
|
| 10104427 | Ogan Sukmawan | <null>
|
2. Alternatif 2 : tidak mengikutsertakan nama field
yang ada pada tabel
(syaratnya adalah value sama dengan jumlah fieldnya)
"Insert into mahasiswa values ('10104422', 'Ekky Patria Kencana',
85)"
Hasilnya adalah sukses :
|
NIM | Nama_Lengkap | Nilai |
|
10104422 | Ekky Patria Kencana | 85 |
"Insert into mahasiswa values ('10104422', 85)"
Hasilnya adalah ERROR karena jumlah inputan tidak sama dengan jumlah
field
yang
terdapat pada tabel.
3. Alternatif 3 : menyalin data dari table yang
memiliki field / attribut yang sama dengan field yang akan disalin
(minimal
sama dari type field nya)
"Insert into mahasiswa select * from mhs"
Hasilnya adalah semua data yang ada di table mhs akan dimasukkan ke
table mahasiswa
7. Update Command
Perintah update berarti mengubah isi field dari
sebuah tabel.
Misalkan semua kuantitas barang yang ada di tabel
master barang hendak direset / diubah menjadi 0,
maka dapat dilakukan dengan perintah :
"
Update msbarang set qty=0 "
Selain itu, kita juga dapat meng-update beberapa
field sekaligus dengan perintah :
"
Update msbarang set qty=0, min_qty=5 "
Masih ada beberapa hal lainnya yang dapat kita
lakukan dengan update data.
Seperti update data dengan situasi tertentu (misal
kode_brg = 'A0001' lalu update harga jual menjadi 10000)
"
Update msbarang set harga_jual = 10000 where kode_brg = 'A0001' "
8. Delete Command
Perintah
delete berarti menghapus isi field dari sebuah tabel.
Misalkan
semua barang yang ada di tabel temporary barang hendak dihapus,
maka dapat
dilakukan dengan perintah :
"
Delete * from temp_barang"
Masih ada
beberapa hal lainnya yang dapat kita lakukan dengan delete data.
Seperti
delete data dg situasi tertentu
(misal hapus
semua record pada tabel barang dg kode_brg = 'A0001')
"
Delete * from barang 10000 where kode_brg = 'A0001' "
SQL Injection
SQL injection is a code injection technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and thereby unexpectedly executed. It is an instance of a more general class of vulnerabilities that can occur whenever one programming or scripting language is embedded inside another. SQL injection attacks are also known as SQL insertion attacks.
Dengan kata lain, SQL injection dapat dikatakan
sebagai suatu teknik yang dapat meng-ekploit sebuah keamanan pada suatu layer
database aplikasi.
Contoh :
pada suatu kasus dalam form login terdapat syntax
sebagai berikut :
Code: [Select]
statement = "SELECT * FROM users WHERE name =
'" + userName + "';"
dengan mengubah username tersebut dengan statement
lainnya yang memiliki nilai true (jika logic yang digunakan bernilai benar)
atau false (jika logic yg digunakan bernilai salah
/ berkebalikan dengan true), maka form / halaman login tersebut user dapat
dengan mudah melakukan skip halaman login (jika setelah proses login berhasil
tidak ada validasi lainnya)
Misal kita ubah username tadi dengan :
Code: [Select]
a' or 't' = 't
sehingga syntax yang di eksekusi menjadi :
Code: [Select]
statement = "SELECT * FROM users WHERE name =
'a' or 't' = 't';"
dengan kata lain,
walaupun tidak ada username dengan nama = 'a',
karena ada perintah 'or' dimana 't'='t',
maka syntax yang dihasilkan akan bernilai benar,
dan proses akan dilanjutkan ke tahapan berikutnya.
untuk lebih mengenal SQL injection,
silahkan baca kembali :
http://en.wikipedia.org/wiki/SQL_Injection
Oke,...
BalasHapusLanjutkan menulis ya...
Semangats :)