BAB VII
SUB QUERY dan INDEKS
A.
Landasan Teori
1.
SELECT INTO
STATEMENT
Query select
into statement merupakan
query SQL yang
digunakan untuk
mengopi informasi dari tabel ke tabel yang
lain tanpa membuat tabel sebelumnya.
Berikut
struktur query penggunaan
select into statement
untuk mengopi semua
data dari tabel1 ke tabel yang baru :
SELECT *
INTO newtable FROM table1;
Berikut struktur query penggunaan select
into statement untuk mengopi data berdasarkan
kolom tertentu dari tabel1 ke tabel yang
baru :
SELECT
column_name(s) INTO newtable [IN externaldb] FROM table1;
Contoh :
-
mengopi semua data dari tabel mahasiswa ke tabel baru yang
dinamakan „identitas
1‟:
Select *
into identitas1 from mahasiswa;
-
mengopi data pada
kolom nim dan
nama dari tabel
mahasiswa ke tabel
baru yang
dinamakan
„identitas 2‟:
Select
nim_mhs, nama_mhs into identitas2 from mahasiswa;
2.
SUB QUERY
Subquery atau
query Nested merupakan bentuk query yang terdapat dalam query
yang
lain. Subquery dapat
ditempatkan dalam klausa
where, having, from
bersama
dengan
operator perbandingan seperti
= untuk baris
tunggal dan untuk
baris berganda
menggunakan in,
not in atau
<>, < any,
>, >=,<=. Penggunaan
sub query dapat
diterapkan
pada pernyataan SELECT,
UPDATE, DELETE, dan
INSERT. Bentuk
penggunaannya sebagai berikut :
Select nama_kolom
from nama_tabel where
nama_kolom operator (subquery);
Berikut contoh dari subquery menggunakan
data pegawai :
Id_peg
|
Nama_peg
|
Alamat_peg
|
Telp_peg
|
Jabatan_peg
|
Gaji_peg
|
1
|
Hendro
|
Solo
|
081223300
|
Teknisi
|
900000
|
2
|
Tika
|
Semarang
|
0897735357
|
Sekretaris
|
2000000
|
3
|
Wijaya
|
Jogjakarta
|
0865433225
|
Kepala
|
3000000
|
4
|
Dodi
|
banyuwangi
|
076544677
|
Teknisi
|
1000000
|
-
Mencari nama pegawai
yang memiliki jabatan
yang sama dengan
pak hendro bisa
menggunakan query sebagai berikut :
Select nama_peg,jabatan_peg from
pegawai where jabatan_peg
in (select
jabatan_peg from pegawai where
nama_peg=’Hendro’);
Hasil :
Nama
|
Jabatan
|
Hendro
|
Teknisi
|
Dodi
|
Teknisi
|
-
Mencari nama pegawai yang gajinya lebih besar dari pegawai dengan nama
Dodi bisa
menggunakan query sebagai berikut :
select nama_peg,gaji_peg from pegawai
where gaji_peg > any (select gaji_peg
from pegawai where nama_peg =’Dodi’);
Hasil :
Nama
|
Gaji
|
Wijaya
|
2000000
|
Tika
|
3000000
|
-
Mencari nama pegawai yang gajinya lebih besar dari 950000
dan jabatannya bukan
seperti jabatan pak hendro bisa menggunakan
query sebagai berikut :
select nama_peg, jabatan_peg,
gaji_peg from pegawai where
gaji_peg >= 950000
and
jabatan_peg <> (select
jabatan_peg from pegawai
where
nama_peg=’Hendro’);
Hasil :
Nama
|
Jabatan
|
Gaji
|
Tika
|
Sekretaris
|
2000000
|
Wijaya
|
Kepala
|
3000000
|
3.
INDEKS
Indeks disini
berguna dalam suatu
pencarian nilai atau
data dalam database.
Dalam
suatu kasus ketika
mengakses sebuah tabel
biasanya DBMS akan
membaca
seluruh
tabel baris perbaris
hingga selesai. Ketika
baris sangat banyak
dan hasil dari
query hanya sedikit, maka hal ini sangat
tidak efisien. Seperti halnya ketika kita membaca
sebuah buku dan ingin mencari kata atau
istilah tertentu dalam buku maka biasanya akan
di cari dengan membuka setiap halaman dari
awal sampai akhir. Dengan adanya indeks
buku
maka kita cukup
dengan membuka indeks,
sehingga akan cepat
dalam pencarian
kata
tersebut. PostgreSQL tidak
bisa membuat indeks
dengan otomatis, sehingga
user
dapat
membuat indeks tersebut
untuk sering kali
digunakan kolom, biasanya
dalam
clause WHERE. Berikut struktur SQL :
CREATE INDEX
nama_index ON nama_tabel (nama kolom);
Contoh :
- Pada tabel pegawai kita berikan index
pada kolom gaji untuk query sebagai berikut :
Create index
gaji_index on pegawai(gaji_peg);
Hasil :
indeks sebaiknya
jangan digunakan pada tabel atau kolom
yang sangat jarang atau
tidak
pernah diakses. Selain
untuk perintah SELECT
Indeks juga bermanfaat
untuk
UPDATE dan DELETE yang menggunakan kondisi pencarian. Sedangkan
Unique index
mirip dengan indeks tetapi lebih
digunakan untuk mencegah duplikasi
nilai yang terdapat
dalam tabel. Jadi dengan adanya unique index
berarti pembaca tidak dapat
meng-insert
nilai yang sama dalam sebuah tabel. Berikut
struktur SQL nya :
CREATE
UNIQUE INDEX nama_index ON nama_tabel (nama kolom);
Untuk menghapus index berikut strukturnya :
DROP INDEX
Nama_index;
Contoh :
- Pada tabel pegawai kita berikan index
yang bersifat unik pada kolom nama, untuk query
sebagai berikut :
Create
unique index unama_index on pegawai(nama_peg);
Hasil :
Apabila
kita memasukkan dengan nama yang sudah terdapat pada data terdahulu
akan terdapat error.
4.
KOLOM UNIK
Unique berfungsi
untuk menjaga agar tidak terjadinya duplikasi nilai (kesamaan
data) dalam
sebuah kolom, hal ini dapat ditangani dengan membuat sebuah
indeks unik
atau fungsi unik sendiri pada kolom yang dimaksud.
Unique ini sering digunakan dalam
pembuatan
bukan primary key
namun membutuhkan cek
dupikasi agar tidak
ada yang
sama, karena dalam primary key
sudah otomatis mempunyai sifat unik.
Berikut Struktur
SQL saat pembuatan tabel baru :
CREATE TABLE
nama_tabel (nama_kolom tipe_data unique);
Ketika tabel sudah ada kita bisa
menggunakan cara seperti pada BAB. 2 berikut
struktur SQL nya :
ALTER TABLE
nama_tabel ADD UNIQUE (nama_kolom);
Untuk menghapus unique berikut caranya :
ALTER TABLE
nama_table DROP CONSTRAINT NAMA_CONSTRAIN
5.
Check
Check berfungsi
untuk melakukan pembatasan
nilai masukan dalam
sebuah
kolom,
sebagai contoh misalkan
kita ingin agar
kolom gender yang
terdiri dari satu
karakter hanya memiliki dua pilihan karakter yaitu M
(male) atau F (Fimale) ini dapat
kita seting dengan menggunakan CHECK. Dengan menggunakan CHECK maka sebuah
kolom
hanya bisa diisi
dengan data yang
memenuhi kriteria dalam
CHECK. Berikut
query contoh pengunaan check :
db_contoh=>
CREATE TABLE pelanggan (
db_contoh(>
nama varchar(35),
db_contoh(>
kode_area CHAR(10) CHECK
(length(trim(kode_area)) = 2),
db_contoh(>
umur INTEGER CHECK (umur >= 0),
db_contoh(>
gender CHAR(1) CHECK (gender IN ('L', 'P')),
db_contoh(>
ttl DATE CHECK (ttl BETWEEN '1998-01-01' AND
CURRENT_DATE),
db_contoh(>
CHECK (upper(trim(nama)) != 'nita' OR
db_contoh(>
upper(trim(nama)) != 'jeki')
db_contoh(>
);
CREATE
6.
Penggunaan TRIM
Suatu ketika
pasti akan memiliki
data yang di
dalamnya terdapat spasi
kosong
yang
tidak diperlukan, misalnya
spasi ganda. Jika
ada masalah seperti
ini, kita dapat
membersihkan spasi-spasi
kosong yang tidak
diperlukan menggunakan fungsi
TRIM,
RTRIM, dan LTRIM. Ketiga fungsi ini
memiliki bentuk penggunaan sebagai berikut :
-
RTRIM : digunakan
untuk membersihkan spasi
kosong yang ada
di bagian kanan
(Right) String.
-
LTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian
kiri (Left)
String.
-
TRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian
kiri, kanan,
maupun tengah
String
Berikut Struktur SQL nya :
Select
trim(nama_kolom) from nama_tabel;
Dalam penggunaannya, fungsi
TRIM memiliki tiga
opsi. Ketiga opsi
ini dapat
digunakan
untuk menentukan karakter
apa yang akan
dihapus dari suatu
String. Jadi,
fungsi TRIM juga dapat menghilangkan
karakter tertentu (bukan spasi kosong saja) dari
suatu string. Opsinya sebagai berikut :
-
LEADING : merupakan
opsi untuk menghilangkan
karakter terpilih yang
ada di
sebelah kiri.
Parameter Leading diartikan sebagai sufik dari karakter yang ada.
-
TRAILING : merupakan
opsi untuk menghilangkan
karakter terpilih yang
ada di
sebelah kanan
String. Parameter Trailing diartikan sebagai sufik dari karakter yang
ada.
-
BOTH : merupakan opsi yang dapat menangani parameter Leading maupun
Trailing.
Berikut Struktur SQL nya :
Select
trim(LEADING ‘karakter, misal : -’ from nama_kolom) from nama_tabel;
B. Hasil Praktikum
- Pada MySQL
1.
Tampilkan nama fakultas
dan jumlah mahasiswa
yang mampunyai ketentuan
nama
fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil!
2.
Tampilkan nama mahasiswa,
nama fakultas, alamat
dengan syarat nama
fakultas sama dengan edi dan alamatnya tidak sama
dengan luki!
3.
Buatlah index di tabel mahasiswa(alamat). Kemudian buat lagi index yang
bersifat unik pada tabel fakultas(fak_nama) kemudian
amati perbedaannya ketika
memasukkan data yang sama!
4.
Buat kolom nama di mahasiswa
menjadi unik dan inputkan 2 data yang sama. Kemudian
amati
perbedaannya !
5.
Pindahkan data dari
tabel mahasiswa, fakultas
ambil kolom nim,
nama mahasiswa,
alamat, nama fakultas ke tabel baru yang dinamai „tabel identitas‟.
6.
Inputkan data di tabel mahasiswa dimana pada kolom nama sebelum
inputkan karakter
dahulukan dengan
spasi dan di
akhiri dengan tanda
“+” seperti berikut
: “ andi
cahyono++++”.
kemudian munculkan seluruh data dan hilangkan spasi didepan!
7.
Munculkan data mahasiswa dengan hilangkan karakter “+” di akhir data dan
karakter “a”
di
awal kata pada kolom nama!
- Pada PostgreSQL
1.
Tampilkan nama fakultas
dan jumlah mahasiswa
yang mampunyai ketentuan
nama
fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil!
2.
Tampilkan nama mahasiswa,
nama fakultas, alamat
dengan syarat nama
fakultas sama dengan
edi dan alamatnya tidak sama
dengan luki!
3.
Buatlah index di tabel mahasiswa(alamat). Kemudian buat lagi index yang
bersifat unik pada tabel fakultas(fak_nama) kemudian
amati perbedaannya ketika
memasukkan data yang sama!
4.
Buat kolom nama di mahasiswa
menjadi unik dan inputkan 2 data yang sama. Kemudian
amati
perbedaannya !
5.
Pindahkan data dari
tabel mahasiswa, fakultas
ambil kolom nim,
nama mahasiswa,
alamat, nama fakultas ke tabel baru yang dinamai „tabel identitas‟.
6.
Buatlah contoh penggunaan
check pada sub
bab pembahasan CHECK.
Kemudian
masukkan
beberapa data baik yang sesuai dengan criteria check maupun yang bukan dan
7.
Inputkan data di tabel mahasiswa dimana pada kolom nama sebelum
inputkan karakter
dahulukan dengan
spasi dan di
akhiri dengan tanda
“+” seperti berikut
: “ andi
cahyono++++”.
kemudian munculkan seluruh data dan hilangkan spasi didepan!
8.
Munculkan data mahasiswa dengan hilangkan karakter “+” di akhir data dan
karakter “a”
di
awal kata pada kolom nama!
C. Perbedaan
Pada
pembahasan sub query dan indeks kali ini, bisa kita lihat beberapa perbedaan
antara kedua DBMS yang kita pakai buat
percobaan yaitu DBMS Postgresql dan DBMS MySQL. Yang pertama kedua DBMS ini
memiliki perbedaan yang sudah kita pernah bahas sebelum-sebelumnya, yaitu
ketika koneksi database yang kita pakai missal pada Mysql kita bisa menggunakan
“USE nama_database” sedangkan pada Postgresql kita bisa
menggunakan “\c nama_database”. yang kedua, yaitu pada Postgresql
kita bisa melakukan perintah CHECK seperti yang di contohkan pada modul
sedangkan pada Mysql kita bisa mebuat CHECK namun CHECK yang sudah kita buat
tidak ada pengaruhnya, karena pada Mysql tidak ada perintah CHECK, sehingga
yang terjadi pada mysql adalah ketika kita memasukkan data yang tidak sesuai
dengan CHECK, data tersebut akan tetap masuk (terInsert).
D. Kesimpulan, Kritik dan Saran
Sub Query
merupakan query yang digunakan untuk menspesifikasikan perintah yang memiliki
kondisi tertentu dengan cara memberikan perintah SELECT di dalam SELECT.
Perintah tersebut akan sangat membantu kita apabila memiliki banyak sekali
data, sehingga kita bisa menemukan data tersebut dengan cepat. Tetapi kita juga
harus melihat suatu DBMS tersebut macam-macam query yang variatif atau tidak,
karena apabila suatu DBMS tersebut terdapat satu SQL yang tidak ada sementara
pada DBMS lain ada maka kita akan kekurangan satu fungsi perintah untuk
mendapatkan data yang tepat. Jadi juga perhatikan DBMS yang digunakan agar kita
bisa mendapatkan data yang tepat untuk di tampilkan.
E. Daftar Pustaka
Nugroho, Adi. 2011. PERANCANGAN dan IMPLEMENTASI SISTEM BASIS DATA. Yogyakarta : ANDI OFFSET
0 comments:
Posting Komentar