A. Dasar 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.
SELECT INTO mengambil data dari tabel database dan memasukkan ke
tabel lain.
Perhatikan contoh di bawah ini SELECT INTO:
SELECT FirstName, LastName, DateOfBirth
INTO UsersBackup
FROM Users
Bagian pertama dari pernyataan tampak familiar dan hanya memilih beberapa kolom.
Bagian kedua dari pernyataan SQL adalah bagian penting, yang menentukan untuk memasukkan baris ke dalam tabel UsersBackup. Bagian terakhir menentukan tabel mana yang akan diambil datanya untuk dimasukkan ke tabel yang dipilih. Contoh ini mengasumsikan bahwa baik tabel Users maupun tabel UsersBackup memiliki struktur yang identik.
Perhatikan contoh di bawah ini SELECT INTO:
SELECT FirstName, LastName, DateOfBirth
INTO UsersBackup
FROM Users
Bagian pertama dari pernyataan tampak familiar dan hanya memilih beberapa kolom.
Bagian kedua dari pernyataan SQL adalah bagian penting, yang menentukan untuk memasukkan baris ke dalam tabel UsersBackup. Bagian terakhir menentukan tabel mana yang akan diambil datanya untuk dimasukkan ke tabel yang dipilih. Contoh ini mengasumsikan bahwa baik tabel Users maupun tabel UsersBackup memiliki struktur yang identik.
2.
Sub Query
Subquery
(Subselect) adalah pernyataan SELECT yang merupakan bagian dari
pernyataan lain, misal : INSERT. Pernyataan ORDER BY, FOR UPDATE OF, UNION,
INTERSECT atau EXCEPT tidak termasuk dalam pernyataan ini. Subquery menghasilkan
sebuah tabel yang merupakan bagian dari tabel atau view yang diidentifikasikan
pada klausa FROM. Pembagian ini dapat digambarkan seperti urutan operasi,
dimana hasil dari suatu operasi adalah input bagi operasi lain.
Subquery
diperlukan pada saat hasil query tidak berhasil dilakukan dengan
hanya melalui satu tabel saja, juga pada saat hasil suatu query
digunakan pada
klausa WHERE query lainnya. Hasil yang diperoleh dari SUBSELECT tidak dapat
ditampilkan oleh “main” SELECT.
Urutan operasi pada Subquery adalah :
1. klausa FROM
2. klausa WHERE
3. klausa GROUP BY
4. klausa HAVING
5. klausa SELECT
SUBQUERY
– Coding
Fungsi
:
Pada klausa kondisi (WHERE atau HAVING), akses lain seperti
SELECT dapat melibatkan beberapa tabel. Ada beberapa cara untuk
menggabungkan SELECT tambahan pada klausa SELECT atau HAVING
·
Perbandingan
aritmatik (=, >, <)
·
ANY
(dikombinasikan dengan =, >=, <=)
·
SOME
(dikombinasikan dengan =, >=, <=)
·
IN
3.
Indeks
Sebuah indeks dapat dibuat pada tabel untuk menemukan data
lebih cepat dan efisien. User tidak bisa melihat indeks, indeks hanya digunakan
untuk memepercepat pencarian. Biasanya indeks digunakan pada kolom yang sering
digunakan.
Membuat indeks. Boleh terdapat duplikasi:
CREATE INDEX index_nameON table_name (column_name)
Membuat Indeks, tidak boleh terdapat duplikasi:
CREATE UNIQUE INDEX index_nameON table_name (column_name)
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.
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;
sumber: http://ilab.gunadarma.ac.id/modul/NewPTA2011-2012/MySQL/m7.pdf
http://elib.unikom.ac.id/files/disk1/371/jbptunikompp-gdl-galihherma-18526-15-10.sub-%29.pdf
http://ocw.stikom.edu/course/download/2014/07/Pertemuan-SQL-6.1.pdf
http://www.1keydata.com/sql/sql-trim.html
http://anessinaga.staff.ipb.ac.id/?p=242
sumber: http://ilab.gunadarma.ac.id/modul/NewPTA2011-2012/MySQL/m7.pdf
http://elib.unikom.ac.id/files/disk1/371/jbptunikompp-gdl-galihherma-18526-15-10.sub-%29.pdf
http://ocw.stikom.edu/course/download/2014/07/Pertemuan-SQL-6.1.pdf
http://www.1keydata.com/sql/sql-trim.html
http://anessinaga.staff.ipb.ac.id/?p=242
B. Hasil Praktikum
Seperti biasanya, saya akan menjawab soal praktikum yang diberikan
di bagian hasil praktikum ini.
Tugas
praktikum kali ini masih menggunakan tabel pada praktikum sebelumnya :
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 amati perbedaannya.
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!
·
Menggunakan PostgreSQL (PSQL)
1.
Untuk menjawabnya, kita lihat dulu data di
tabel mahasiswa dengan perintah select*from mahasiswa. Sehingga muncul
seperti di bawah ini.
Dari gambar tersebut, jumlah mahasiswa paling
sedikit yaitu dari fakultas dengan id_fak 3 dan 4 yaitu fakultas humaniora dan
tarbiyah.
Untuk menampilkan nama fakultas dan jumlah
mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah
mahasiswanya terkecil, maka struktur querynya select nama_fak, count(*) as
jumlah from mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak group by
fakultas.nama_fak having count(*)<2;
2.
Untuk menampilkan nama mahasiswa, nama
fakultas, alamat dengan syarat nama fakultas sama dengan edi (saya menggunakan
rizki) dan alamatnya tidak sama dengan luki, maka struktur querynya select
nama_mah, nama_fak, alamat_mah from mahasiswa, fakultas where
mahasiswa.id_fak=fakultas.id_fak and nama_fak in (select nama_fak from
mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak and
nama_mah='rizki') and alamat_mah <> (select alamat_mah from mahasiswa
where nama_mah='luki');
3.
Pertama kita buat index di tabel
mahasiswa(alamat) dengan struktur query create index alamat_mah_index on
mahasiswa(alamat_mah); lalu untuk melihat strkturnya kita ketik
\d mahasiswa;
Kemudian buat lagi index yang bersifat unik
pada tabel fakultas(fak_nama) dengan struktur query create unique index
nama_fak_index on fakultas(nama_fak); lalu untuk melihat strukturnya ketik \d
fakultas;
kemudian kita amati perbedaannya ketika
memasukkan data yang sama misalnya pada kolom alamat_mah di tabel fakultas
sudah terdapat alamat Surabaya, sekarang kita coba masukkan data dengan alamat
yang sama yaitu surabaya, namun dengan primary key yang berbeda. insert into
mahasiswa values(21, 'ani', 'surabaya', '086435756438', 2, 'P');
dan untuk tabel fakultas juga kita masukkan
data yang sama pada kolom nama_fak misalnya Saintek yang sudah tersimpan namun
dengan primary key yang berbeda di tabel fakultas dengan struktur query
insert into fakultas values(3, 'Saintek');
insert pertama akan berhasil sedangkan insert
kedua di tabel fakultas akan gagal karena kolom nama_fak merupakan indeks yang
unik dan tidak boleh ada yang sama.
4.
Membuat kolom nama di mahasiswa menjadi unik,
kita ketikkan alter table mahasiswa add unique(nama_mah); lalu kita inputkan
2 data yang sama. Misalnya nama ani sudah ada, lalu kita masukkan lagi dengan
mengetikkan perintah insert into mahasiswa values(22, 'ani', 'tulungagung',
'086435756438', 1, 'P); Maka hasilnya akan seperti di bawah ini.
5.
Untuk memindahkan data dari tabel mahasiswa,
fakultas dengan mengambil kolom nim, nama mahasiswa, alamat, nama fakultas ke
tabel baru yang dinamai “tabel identitas” maka perintahnya adalah select
nim_mah, nama_mah, alamat_mah, nama_fak into identitas from mahasiswa, fakultas
where mahasiswa.id_fak=fakultas.id_fak; sehingga akan muncul tabel
identitas seperti di bawah ini, dengan perintah select*from identitas;
6.
Berikut ini contoh penggunaan check pada sub
bab pembahasan CHECK. Kita ketikkan perintah create table pelanggan (nama
varchar(35), kode_area char(10) check (length(trim(kode_area))=2), umur integer
check (umur>=0), gender char(1) check (gender in ('L', 'P')), ttl date check
(ttl between '1998-01-01' and current_date), check (upper(trim(nama)) !='nita'
or upper(trim(nama)) !='jeki'));
Kemudian kita masukkan data baik yang sesuai
dengan criteria check misalnya insert
into pelanggan values('mely', '45', 17, 'P', '1999-08-09'); dan ternyata
berhasil kita insertkan.
Kemudian kita masukkan data yang tidak sesuai
dengan criteria check misalnya insert into pelanggan values('mely', '453',
17, 'p', '1997-08-09'); dan ternyata insert tidak berhasil karena kode pos
lebih dari 2 karakter (batasan pada check) yang sudah didefinisikan sebelumnya.
Tahun lahir juga melebihi batas yang ada, sehingga insert tersebut tidak
berhasil dilakukan.
7.
Pada tabel mahasiswa, kita masukkan data dengan
karakter didahulukan dengan spasi dan di akhiri dengan tanda “+” seperti
berikut : “ andi cahyono++++”. Kali ini saya akan memakai “ jaya+++” dengan insert into mahasiswa
values(23, ' jaya+++', 'tulungagung',
'086435756438', 1, 'L');
kemudian kita munculkan seluruh data dengan enghilangkan
spasi didepan dengan perintah select nim_mah, ltrim(nama_mah), alamat_mah,
no_telp, id_fak, gender from mahasiswa;
8.
Untuk memuunculkan data mahasiswa dengan
hilangkan karakter “+” di akhir data dan karakter “a” di awal kata pada kolom
nama, kita dapat mengetikkan select nim_mah, trim(both '+ a' from nama_mah),
alamat_mah, no_telp, id_fak, gender from mahasiswa; seperti dibawah ini
·
Menggunakan MySQL (phpMyAdmin)
1.
Untuk menjawabnya, kita lihat dulu data di
tabel mahasiswa dengan perintah select*from mahasiswa. Sehingga muncul
seperti di bawah ini.
Dari gambar tersebut, jumlah mahasiswa paling
sedikit yaitu dari fakultas dengan id_fak 3 dan 4 yaitu fakultas humaniora dan
tarbiyah.
Untuk menampilkan nama fakultas dan jumlah
mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah
mahasiswanya terkecil, maka struktur querynya select nama_fak, count(*) as
jumlah from mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak group by
fakultas.nama_fak having count(*)<2;
Sehingga hasilnya seperti di bawah ini.
2.
Untuk menampilkan nama mahasiswa, nama
fakultas, alamat dengan syarat nama fakultas sama dengan edi (saya menggunakan
rizki) dan alamatnya tidak sama dengan luki, maka struktur querynya select
nama_mah, nama_fak, alamat_mah from mahasiswa, fakultas where
mahasiswa.id_fak=fakultas.id_fak and nama_fak in (select nama_fak from
mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak and
nama_mah='rizki') and alamat_mah <> (select alamat_mah from mahasiswa
where nama_mah='luki');
Sehingga hasilnya seperti di bawah ini.
3.
Pertama kita buat index di tabel
mahasiswa(alamat) dengan struktur query create index alamat_mah_index on
mahasiswa(alamat_mah);
Kemudian buat lagi index yang bersifat unik
pada tabel fakultas(fak_nama) dengan struktur query create unique index
nama_fak_index on fakultas(nama_fak);
kemudian kita amati perbedaannya ketika
memasukkan data yang sama misalnya pada kolom alamat_mah di tabel fakultas
sudah terdapat alamat Surabaya, sekarang kita coba masukkan data dengan alamat
yang sama yaitu surabaya, namun dengan primary key yang berbeda. insert into
mahasiswa values(21, 'ani', 'surabaya', '086435756438', 2, 'P');
Insert akan sukses dan muncul seperti di bawah
imi setelah diklik go.
dan untuk tabel fakultas juga kita masukkan
data yang sama pada kolom nama_fak misalnya Saintek yang sudah tersimpan namun
dengan primary key yang berbeda di tabel fakultas dengan struktur query
insert into fakultas values(3, 'Saintek');
proses insert akan gagal karena kolom nama_fak
merupakan indeks yang unik dan tidak boleh ada yang sama.seperti di bawah ini
4.
Membuat kolom nama di mahasiswa menjadi unik,
kita ketikkan alter table mahasiswa add unique(nama_mah);
lalu kita inputkan 2 data yang sama. Misalnya
nama ani sudah ada, lalu kita masukkan lagi dengan mengetikkan perintah insert
into mahasiswa values(22, 'ani', 'tulungagung', '086435756438', 1, 'P);
Maka hasilnya akan gagal seperti di bawah ini. Karena
kolom nama bersifat unik dan tidak boleh sama.
5.
Untuk memindahkan data dari tabel mahasiswa,
fakultas dengan mengambil kolom nim, nama mahasiswa, alamat, nama fakultas ke
tabel baru yang dinamai “tabel identitas” maka perintahnya adalah select
nim_mah, nama_mah, alamat_mah, nama_fak into identitas from mahasiswa, fakultas
where mahasiswa.id_fak=fakultas.id_fak; sehingga akan muncul tabel
identitas seperti di bawah ini, dengan perintah select*from identitas;
Namun, hasilnya akan gagal karena mysql tidak bisa mengenali syntax tersebut seperti pada postgresql
Namun, hasilnya akan gagal karena mysql tidak bisa mengenali syntax tersebut seperti pada postgresql
6.
Berikut ini contoh penggunaan check pada sub
bab pembahasan CHECK. Kita ketikkan perintah create table pelanggan (nama
varchar(35), kode_area char(10) check (length(trim(kode_area))=2), umur integer
check (umur>=0), gender char(1) check (gender in ('L', 'P')), ttl date check
(ttl between '1998-01-01' and current_date), check (upper(trim(nama)) !='nita'
or upper(trim(nama)) !='jeki'));
Nomor6 buat tabel check
Kemudian kita masukkan data baik yang sesuai
dengan criteria check misalnya insert
into pelanggan values('mely', '45', 17, 'P', '1999-08-09'); dan ternyata
berhasil kita insertkan.
Nomor6 insert memenuhi check
Kemudian kita masukkan data yang tidak sesuai
dengan criteria check misalnya insert into pelanggan values('mely', '453',
17, 'p', '1997-08-09'); dan ternyata insert tidak berhasil karena kode pos
lebih dari 2 karakter (batasan pada check) yang sudah didefinisikan sebelumnya.
Tahun lahir juga melebihi batas yang ada, sehingga insert tersebut tidak
berhasil dilakukan.
Nomor6 insert tidak memenuhi
7.
Pada tabel mahasiswa, kita masukkan data dengan
karakter didahulukan dengan spasi dan di akhiri dengan tanda “+” seperti
berikut : “ andi cahyono++++”. Kali ini saya akan memakai “ jaya+++” dengan insert into mahasiswa
values(23, ' jaya+++', 'tulungagung',
'086435756438', 1, 'L');
Lalu kita lihat dengan mengetik select*from
mahasiswa;
kemudian kita munculkan seluruh data dengan enghilangkan
spasi didepan dengan perintah select nim_mah, ltrim(nama_mah), alamat_mah,
no_telp, id_fak, gender from mahasiswa;
Sehingga hasilnya seperti di bawah ini
8.
Untuk memuunculkan data mahasiswa dengan
hilangkan karakter “+” di akhir data dan karakter “a” di awal kata pada kolom
nama, kita dapat mengetikkan select nim_mah, trim(both '+ a' from nama_mah),
alamat_mah, no_telp, id_fak, gender from mahasiswa; seperti dibawah ini
Gambar nomor8
C.
Evaluasi
Perbandingan DBMS
Pada bagian ini, kita akan mencoba
membandingkan perbedaan dan persamaan diantara kedua DBMS. Dari nomor 1 sampai
nomor 4, DBMS PostgreSQL dan MySQL memiliki struktur query yang sama serta
hasil yang sama.
Namun, pada waktu sampai nomor 5, terjadi
perbedaan, pada DBMS MySQL, tidak bisa menerima perintah select into, hal ini mungkin
terjadi karena PostgreSQL terkadang lebih unggul dalam beberapa query yang
tidak bisa dijalankan oleh DBMS MySQL seperti Object Oriented nya.
Kemudian pada nomor6, juga terjadi perbedaan
karena fungsi check pada PostgreSQL yang bisa digunkan, tidak bisa digunakan
karena setelah dicoba memasukkan data yang diluar dari check, ternyata masih
bisa diinsertkan. Hal ini menunjukkan bahwa check tidak bisa digunakan pada MySQL.
Lalu pada nomor 8 juga terdapat perbedaan,
karena fungsi trim pada MySQL juga tidak bisa berfungsi. Karena penggunaan trim
pada MySQL harus diikuti nama String, bukan nama kolom seperti pada PostgreSQL.
Sehingga
pada praktikum kali ini, PostgreSQL lebih unggul karena dapat melakukan
fungsi-fungsi yang lebih memudahkan user.
D.
Keslimpulan,
Kritik, Saran dan Manfaat
1.
Kesimpulan
Setelah
melakukan praktikum ini, saya dapat mengambil kesimpulan bahwa Sub Query dalam
SQL merupakan sebuah query di dalam query atau disebut juga query bersarang
(nested query). Pada praktikum ini kita juga mempelajari tentan select into,
indeks, kolom unik, check serta penggunaan trim.
2. Saran
Diperlukan
pembelajaran lebih lanjut mengenai sub query dan indeks dalam database menggunakan PostgreSQL maupu
MySQL agar praktikan dapat menguasai kedua DBMS tersebut dalam membuat database
yang lebih baik.
3. Kritik
Dalam laporan ini, masih banyak terdapat kekurangan karena
terbatasnya pengetahuan saya dalam menguasai 2 DBMS yang digunakan dalam
praktikum ini.
4. Manfaat
Manfaat
yang akan didapat pembaca dalam laporan ini antara lain dapat mengetahui
struktur query dalam sub query. Pembaca juga dapat mengetahui fungsi dari select
into, indeks, kolom unik, check serta penggunaan trim. Pembaca juga dapat
mengetahui persamaan dan perbedaan dari kedua DBMS tersebut.
0 komentar:
Posting Komentar