Sunday, November 9, 2014

Subquery dan Indeks

A.LANDASAN TEORI
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;
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);

SQL Subquery Contoh:

1) Biasanya, subquery harus kembali hanya satu record, tapi kadang-kadang juga dapat kembali beberapa catatan bila digunakan dengan operator SEPERTI DI, TIDAK DI dalam klausul mana. Sintaks query akan seperti,
SELECT first_name, last_name, subject
FROM student_details
WHERE games NOT IN ('Cricket', 'Football');
Subquery Output akan sama dengan:
first_name
last_name
subject
————-
————-
———-
Shekar
Gowda
Badminton
Priya
Chandra
Chess
2) Mari kita mempertimbangkan tabel student_details yang telah kami gunakan sebelumnya. Jika Anda tahu nama siswa yang belajar mata pelajaran ilmu pengetahuan, Anda bisa mendapatkan id mereka dengan menggunakan query ini di bawah ini,
SELECT id, first_name
FROM student_details
WHERE first_name IN ('Rahul', 'Stephen');
tetapi, jika Anda tidak tahu nama mereka, maka untuk mendapatkan id mereka Anda perlu menulis query dengan cara ini,
SELECT id, first_name
FROM student_details
WHERE first_name IN (SELECT first_name
FROM student_details
WHERE subject= 'Science');

Subquery Output:

Id
first_name
——–
————-
100
Rahul
102
Stephen
Dalam pernyataan sql di atas, pertama inner query diproses terlebih dahulu dan kemudian permintaan luar diproses.

SQL Subquery; Pernyataan INSERT

3) Subquery dapat digunakan dengan pernyataan INSERT untuk menambahkan baris data dari satu atau lebih tabel ke meja lain. Mari kita mencoba untuk mengelompokkan semua siswa yang belajar Matematika dalam tabel ‘maths_group’.
INSERT INTO maths_group(id, name)
SELECT id, first_name || ' ' || last_name
FROM student_details WHERE subject= 'Maths'

SQL Subquery; Pernyataan SELECT

4) Sebuah subquery dapat digunakan dalam laporan SELECT sebagai berikut. Mari kita menggunakan produk dan meja order_items didefinisikan dalam bagian sql_joins.
select p.product_name, p.supplier_name, (select order_id from order_items where product_id = 101) as order_id from product p where p.product_id = 101
product_name
supplier_name
order_id
——————
——————
———-
Television
Onida
5103

Korelasi Subquery

Permintaan A disebut subquery berkorelasi ketika kedua inner query dan permintaan luar saling bergantung. Untuk setiap baris diproses oleh inner query, permintaan luar diproses juga. Inner query tergantung pada permintaan luar sebelum dapat diproses.
SELECT p.product_name FROM product p
WHERE p.product_id = (SELECT o.product_id FROM order_items o
WHERE o.product_id = p.product_id);

Catatan Subquery

Bersarang Subquery

1) Anda dapat sarang karena banyak pertanyaan yang Anda inginkan, tetapi dianjurkan untuk tidak lebih dari 16 sarang subqueries di oracle

Non-corelated Subquery

2) Jika subquery tidak tergantung pada permintaan luar itu disebut subquery non-berkorelasi

Kesalahan Subquery

3) Meminimalkan kesalahan subquery: Gunakan drag and drop, copy dan paste untuk menghindari berjalan subqueries dengan ejaan dan kesalahan ketik basis data. Perhatikan bidang beberapa Anda menggunakan koma SELECT, tambahan atau untuk beberapa mendapatkan pesan error SQL “sintaks salah”.

SQL Subquery Komentar

Menambahkan komentar Subquery SQL adalah kebiasaan yang baik (/ * perintah komentar anda * /) yang dapat menghemat waktu Anda, menjelaskan kerja sebelumnya .
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);
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; 
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
Di Oracle ada dua jenis indeks SQL yaitu, implisit dan eksplisit.

Indeks Implisit:

Mereka dibuat ketika suatu kolom explicity didefinisikan dengan PRIMARY KEY, UNIQUE Kendala KUNCI.

Indeks Explicit:

Mereka diciptakan menggunakan “membuat indeks ..” sintaks.

SQL Catatan:

1) Meskipun indeks sql diciptakan untuk mengakses baris dalam tabel cepat, mereka memperlambat operasi DML seperti INSERT, UPDATE, DELETE di atas meja, karena indeks dan tabel kedua diperbarui sepanjang ketika operasi DML dilakukan. Jadi menggunakan indeks hanya pada kolom yang digunakan untuk mencari meja sering.
2) Apakah tidak diperlukan untuk membuat indeks di atas meja yang memiliki sedikit data.
3) Dalam database oracle Anda dapat membuat hingga enam belas (16) kolom dalam INDEX.

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
TRIM
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
            Dibawah ini adalah hasil praktikum dari materi sub query dan indexs. Oke tidak usah lama-lama berikut ulasannya.Tugas praktikum kali ini masih menggunakan tabel pada praktikum sebelumnya :
1. Menampilkan nama fakultas dan jumlah mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil.

2. Menampilkan nama mahasiswa, nama fakultas, alamat dengan syarat nama fakultas sama dengan edi dan alamatnya tidak sama dengan luki!

3. Membuat index di tabel mahasiswa(alamat). Kemudian buat  lagi index yang bersifat unik pada tabel fakultas(fak_nama)




Jadi jika kita membuat unique index maka kita tidak akan bisa menginput data yang sama isinya.
4. Membuat  kolom nama di mahasiswa menjadi unik dan menginputkan 2 data yang sama.

Jika kita membuat nama mahasiswa menjadi unik maka kita tidak akan bisa menginput nama mahasiswa yang sama
5. Memindahkan data dari tabel mahasiswa, fakultas dengan mengambil kolom nim, nama mahasiswa, alamat, nama fakultas ke tabel baru yang dinamai “tabel identitas‟.


6. Menginputkan data di tabel mahasiswa dimana pada kolom nama sebelum inputkan karakter dahulukan dengan spasi dan di akhiri dengan tanda  kemudian munculkan seluruh data dengan menghilangkan spasi didepannya.   


7. Munculkan data mahasiswa dengan hilangkan karakter “+” di akhir data dan karakter “a” di awal kata pada kolom nama! 

C.Perbedaan
            Oke, dari praktikum yang sudah saya lakukan terdapat beberapa perbedaan yang dimiliki. Dan perbedaan tersebut adalah di bagian ketika  saya mencoba untuk menghapus index. Ketika menggunakan postgreSQL, menggunakan
Drop index nama_index; 
Sedangkan pada MySQL, jika kita menggunakan syntax tersebut maka aka  terjadi error. Jadi pada MySQL kita menggunakan syntax :
Alter table nama_table_dari_Index drop index nama_index;
           
Perbedaan selanjutnya pada saat trim, ketika di MySQL trim diberi spasi dengan kolom yang akan di beri intruksi maka akan terjadi eror, mungkin ini disebabkan pemebrian spasi tersebut membuat trim terdeteksi menjadi  nama fungsi. Jadi tak perlu di beri spasi.

D.Kesimpulan

            Kesimpulan dari praktikum ini adalah bahwa dari hasil evaluasi PostgreSQL dan MySQL hanya terdapat sedikit perbedaan, overall semua nya hampir sama, dan perbedaan tersebut terletak pada saat menghapus indeks, proses trim. Owh iya hampir lupa, sampai saat penulisan laporan ini saya juga belum berhasil dengan proses check pada MySQL, kalau pembaca ada yang tahu, mohon saya diberi pencerahan. Mungkin saya beri sedikit saran pada pembaca sekalian bhawa selesaikan segera semua tugas sebelum akhir pekan jika pada saat weekend kalian  ada acara atau janji, karena jika tidak hal itu akan membebani sekali, ya seperti saat ini mungkin. Hehe, demikian lah hasil laporan yang telah saya buat jika ada kesalahan dan kekurangan mohon maaf, dan semoga ilmu yang sedikit ini bermanfaat. 

No comments:

Post a Comment