Upload
lythuy
View
229
Download
1
Embed Size (px)
Citation preview
LAPORAN PRAKTIKUM BASIS DATA
MODUL 3
CONDITIONAL SQL
MIKA PURNAMASARI
NASTADINA
LABORATORIUM REKAYASA PERANGKAT LUNAK
TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2010 -2011
I. Tujuan
1. Mengenal dan memahami konsep conditional SQL
2. Memahami dan mengimplementasikan operator conditional SQL seperti AND,
OR, LIKE, BETWEEN, =, <, >, <=, >=, <>
3. Mengenal dan memahami konsep penggunaan operasi nested query
4. Memahami dan mengimplementasikan operator IN, NOT IN dalam SQL
II. Perlengkapan yang dibutuhkan:
1. Komputer Set (memory >= 1GB, CPU >= PIV)
2. Oracle XE
3. SQL manager console/ TOAD/ SQL Developer
III. Dasar Teori
A. SQL
SQL ( Structured Query Language ) merupakan bahasa query yang digunakan
untuk mengakses database relasional. SQL sekarang sudah menjadi bahasa
database standard dan hampir semua sistem database memahaminya. SQL
terdiri dari berbagai jenis statemen. Semuanya didesain agar
memungkinkan untuk dapat secara interaktif berhubungan dengan database.
syntax dari SQL-SELECT
SELECT [DISTINCT] select_list
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC] ]
B. WHERE <KONDISI> untuk filter
Where digunakan untuk filter atau pencarian data sesuai dengan kondisi tertentu
yang ada di dalam suatu database, ada berbagai bentuk ekpresi di dalam kondisi
yang ada di where clause, yaitu:
- operasi pembandingan
- operasi pendekatan pola string (string matching)
- Operasi pembandingan dengan sekumpulan nilai
Comparation Condition
Khusus untuk pembanding IS, nilai yang diisikan adalah null, yakni sebuah nilai
yang belum berisi nilai. Perlu diketahui, bahwa nilai null tidak sama dengan nilai 0
pada tipe numerik ataupun string kosong pada tipe string.
Misal:
- menampilkan anggota yang berjenis kelamin laki-laki:
SELECT * FROM Anggota WHERE JK=’L’
- menampilkan Anggota yang tahun kelahirannya lebih dari 1985:
SELECT * FROM Anggota WHERE extract (YEAR FROM tgllahir) > 1985
- menampilkan Anggota wanita yang lahir di bulan Juli:
SELECT * FROM anggota
WHERE JK=’P’ AND extract (MONTH FROM tgllahir) = 6
- menampilkan idKoleksi yang belum dikembalikan (TglKembali belum terisi)
SELECT * FROM Peminjaman WHERE TglKembali IS NULL
Operasi LIKE (pendekatan pola)
khusus string
Operasi ini, hanya untuk pembandingan nilai bertipe string. Digunakan untuk
mengenali string -string yang memiliki pola tertentu. Di dalam operasi ini,
digunakan simbol-simbol berikut:
- simbol % artinya mewakili 0 s/d tak terhingga dari sembarang karakter.
- simbol _ artinya mewakili 1 sembarang karakter.
misal:
- menampilkan anggota yang nama depannya: ‘Budi’
SELECT * FROM anggota WHERE Nama LIKE ‘Budi%’
- menampilkan Anggota yang huruf ketiga namanya adalah ‘d’, dua garis bawah ( _
_ ) sebelum huruf d.
SELECT * FROM anggota WHERE Nama LIKE ‘__d%’
- menampilkan koleksi yang judulnya terdapat kata ‘pemrograman’
SELECT * FROM koleksi WHERE Judul LIKE ‘%pemrograman%
operasi IN atau NOT IN ...
Ekspresi ini digunakan untuk membandingkan dengan sebuah kumpulan nilai,
yang mana kumpulan nilai bisa berupa:
- nilai-nilai yang diisikan
- query tunggal (query yg hasilnya hanya terdapat sebuah kolom saja)
Nilai-nilai yang diisikan, maksudnya kita sendiri yang mengisikan nilai-nilai
tersebut di dalam query kita. Misalnya:
- menampilkan koleksi yang jenisnya buku dan majalah (idTipeKoleksi=1 atau
2):
SELECT * FROM koleksi WHERE idTipeKoleksi IN (1, 2)
- menampilkan anggota yang selain mahasiswa atau dosen (idJenisAnggota selain
1 dan 3)
SELECT * FROM anggota WHERE IDJenisAnggota NOT IN (1, 3)
Nested Query
Sering juga disebut Inner Query atau Query bersarang. Yaitu sebuah query yang
terdapat didalam query lainnya. Misalnya:
- menampilkan anggota yang belum pernah meminjam buku sama sekali:
SELECT * FROM anggota
WHERE id NOT IN (SELECT DISTINCT idAnggota FROM Peminjaman)
perhatikan tambahan klausa DISTINCT di atas untuk mempercepat proses, walau
toh tanpa DISTINCT hasilnya juga sama.
- menampilkan koleksi yang sedang dipinjam:
SELECT * FROM koleksi WHERE idKoleksi IN (SELECT idKoleksi
FROM Peminjaman WHERE TglKembali is NULL)
IV Hasil Praktikum
Dengan merujuk pada table-table yang telah Anda ciptakan untuk study case
yang telah diberikan. Buat masing-masing 2 query yang didalamnya terdapat operasi :
a. WHERE
b. OR
c. <>
d. BETWEEN … AND …
e. LIKE
f. IN
g. IS NULL
h. NOT IN
i. BETWEEN
j. Nested Query
NB :
- Tiap kelompok menciptakan total 20 query
- Untuk masing-masing query, tulis query nya, kemudian print screen hasilnya
- Penilaian akan dilakukan dengan melihat kompleksitas query yang dibuat.
Semakin kompleks querynya, maka akan semakin baik nilainya.
1. Query dengan operasi WHERE
- Menampilkan nama pasien yang bertempat tinggal di Sengkaling
SELECT * FROM PASIEN WHERE ALAMAT='SENGKALING'
- Menampilkan nama pasien yang tidak memiliki nomor telepon
SELECT * FROM PASIEN WHERE NO_TELP IS NULL
2. Querry dengan operasi OR
- Dapatkan nama obat yang berjenis sirup atau kapsul
SELECT * FROM GOLOBAT WHERE (JENIS='SYRUP') OR (JENIS='KAPSUL')
- Dapatkan nama pasien yang bertempat tinggal di Jetis atau Landungsari
SELECT * FROM PASIEN WHERE (ALAMAT='JETIS') OR (ALAMAT='LANDUNGSARI')
3. Query dengan operasi <>
- Dapatkan nama pasien yang tidak berumur 28 dan 51 dan yang tidak berjenis
kelamin perempuan dan yang tidak beralamat di Tirto
SELECT * FROM PASIEN WHERE (UMUR <>28) AND (UMUR <>51) AND
(JK_PASIEN <>'PEREMPUAN') AND (ALAMAT <>'TIRTO')
- Dapatkan nama obat yang tidak memiliki harga diantara 15.000 dan 30.000 dan
tidak memiliki kode obat ‘B-009’ dan nama obat diakhiri dengan huruf ‘a’
SELECT * FROM OBAT WHERE NOT(HARGA BETWEEN '15000' AND '30000')
AND (KODE_OBAT<>'B-009') AND (NAMA_OBAT LIKE '%A')
4. Query dengan operasi BETWEEN … AND …
- Dapatkan nama pasien yang berumur antara 10 dan 20 tahun dan tidak
bertempat tinggal di Sengkaling
SELECT * FROM PASIEN WHERE (UMUR BETWEEN 10 AND 20) AND NOT
(ALAMAT='SENGKALING')
- Dapatkan nama dokter yang dimulai dari huruf ‘M’ dan memiliki gaji diantara
1.000.000 sampai 2.500.000
SELECT * FROM RESEP WHERE (GAJI_DOKTER BETWEEN '1.000.000' AND
'2.500.000') AND (NAMA_DOKTER LIKE 'M%')
5. Query dengan operasi LIKE
- Dapatkan nama pasien yang diawali dengan ‘Muhammad’ dan tidak berumur
diantara 10 sampai 30 tahun
SELECT * FROM PASIEN WHERE (NAMA_PASIEN LIKE 'MUHAMMAD%') AND
NOT(UMUR BETWEEN 10 AND 30)
- Dapatkan nama obat yang berkhasiat untuk mengobati demam
SELECT * FROM OBAT WHERE KHASIAT LIKE '%DEMAM%'
6. Query dengan operasi IN
- Dapatkan nama pasien yang berumur 18,19 dan 24 tahun
SELECT * FROM PASIEN WHERE UMUR IN(18,19,24)
- Dapatkan nama pasien yang memiliki ID_PASIEN P-001, P-002, P-003 dan P-004
SELECT * FROM PASIEN WHERE ID_PASIEN IN('P-001','P-002','P-003','P-004')
7. Query dengan operasi IS NULL
- Dapatkan nama pasien yang tidak memiliki nomor telepon
SELECT * FROM PASIEN WHERE NO_TELP IS NULL
- Dapatkan NO_RESEP yang tidak memiliki tanggal transaksi
SELECT * FROM RESEP WHERE NO_RESEP IN (SELECT NO_RESEP FROM
TRANSAKSI WHERE TANGGAL IS NULL)
8. Query dengan operasi NOT IN
- Dapatkan NO_RESEP yang belum melakukan transaksi
SELECT * FROM RESEP WHERE NO_RESEP NOT IN (SELECT DISTINCT
NO_RESEP FROM TRANSAKSI)
- Dapatkan kode obat yang memiliki golongan obat
SELECT * FROM OBAT WHERE KODE_OBAT IN (SELECT DISTINCT KODE_OBAT
FROM GOLOBAT)
9. Query dengan operasi BETWEEN
- Dapatkan nama dokter yang memiliki gaji diantara 1.000.000 sampai 2.700.000
SELECT * FROM RESEP WHERE GAJI_DOKTER BETWEEN '1.000.000' AND
'2.700.000'
- Dapatkan nama pasien yang berumur 17 sampai 30 tahun
SELECT * FROM PASIEN WHERE UMUR BETWEEN '17' AND '30'
10. NestedQuery
- Dapatkan nama pasien yang tidak bertempat tinggal di Sengkaling dan nama
pasien dimulai dengan huruf ‘O’ dan berumur diantara 10 sampai 30 tahun
SELECT * FROM PASIEN WHERE (ALAMAT NOT IN 'SENGKALING') AND
(NAMA_PASIEN LIKE 'O%') AND (UMUR BETWEEN '10' AND '30')
- Dapatkan nama dokter yang memiliki gaji diantara 1.000.000 sampai 3.000.000
dan nama dokter dimulai dari huruf ‘M’.
SELECT * FROM RESEP WHERE (GAJI_DOKTER BETWEEN '1000000' AND
'3000000') AND (NAMA_DOKTER LIKE 'M%')
V. Kesimpulan
Bagi seorang programmer, menguasai SQL adalah sebuah kewajiban karena
program zaman sekarang pasti menggunakan database untuk menyimpan datanya.
SQL juga mudah dipelajari karena semua statement dibuat berdasarkan kata-kata di
dalam bahasa inggris yang umum. SQL benar-benar suatu bahasa yang kuat, dan
dengan kepandaian menggunakan unsur-unsur bahasa tersebut, kita dapat melakukan
pengoperasian database yang kompleks dan sulit.