Selasa, 08 Januari 2013

Query Lanjutan


Subquery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL
Statement yang lain.

PENGGUNAAN SUBQUERY
 
Subquery mengembalikan nilai ke main query. Subquery digunakan untuk
menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown
values). 

Berikut ini diberikan contoh penggunaan subquery.
 
SELECT nama_mhs FROM mahasiswa WHERE stb > (SELECT id_kelas FROM
mahasiswa WHERE stb = 111) ;
 
Query diatas akan menampilkan nama mahasiswa yang stambuknya lebih dari
mahasiswa dengan stambuk 111. Sebelumnya, id_kelas dari mahasiswa dengan
stambuk 111 tidak diketahui, untuk itu kita tempatkan sebagai subquery agar nilai yang
tidak diketahui tersebut dapat diketahui.

SUBQUERY BANYAK KOLOM
 
Pada subquery dengan banyak kolom, tiap baris dari main query dibandingkan
dengan nilai dari subquery multiple-row dan multiple-column. 
PEMBANDINGAN KOLOM
 
Pembandingan kolom dalam subquery banyak kolom dapat berupa :
  • Pembandingan berpasangan (Pairwise Comparison SubQuery)
    Berikut contoh pembandingan berpasangan untuk menampilkan detail dari data
     mahasiswa yang diasuh oleh PA dan kelas yang sama dengan yang dimiliki olehmahasiswa dengan stambuk '111'.

    SELECT stb, pa_id, id_kelas FROM mahasiswa WHERE (pa_id, id_kelas) IN
    (SELECT pa_id, id_kelas FROM mahasiswa WHERE stb IN (111)) AND

    stb NOT IN (111);
  • Pembandingan tidak berpasangan (NonPairwise Comparison SubQuery)
    Berikut contoh pembandingan tidak berpasangan untuk menampilkan detail dari
    data mahasiswa yang diasuh oleh PA yang sama dengan mahasiswa dengan

    stambuk 111 atau 141 dan berada dalam kelas yang sama dengan mahasiswa yang
    memiliki stambuk 111 atau 141.

    SELECT stb, pa_id, kelas_id FROM mahasiswa WHERE pa_id IN
    (SELECT pa_id FROM mahasiswa WHERE stb IN (111,141))
    AND id_kelas IN (SELECT id_kelas FROM mahaisiswa WHERE
    stb IN (111,141))
    AND stb NOT IN(111,141);
PENGGUNAAN QUERY DALAM KLAUSA FROM
 
Query bisa diletakkan di dalam klausa FROM untuk membentuk tabel temporer.
Query semacam ini dikenal juga dengan istilah inline view, karena tidak membentuk
object database.

EKSPRESI SCALAR SUBQUERY
 
Ekspresi scalar subquery adalah subquery yang mengembalikan hanya satu nilai
kolom dari satu baris.
Scalar subquery pada standart SQL-92 hanya terbatas pada :

SELECT Statement (klausa FROM dan WHERE saja) Daftar VALUE dari statement
INSERT Pada standart SQL-99, scalar subqueries dapat diguanakan dalam : Kondisi dan
ekspresi sebagai bagian dari perintah DECODE dan CASE. Semua klausa dari SELECT
Statement kecuali GROUP BY.

Berikut ini contoh penggunaan scalar subquery dalam ekspresi CASE :

SELECT stb, nama_mhs,
(CASE
WHEN id_kelas =
(SELECT id_kelas FROM kelas WHERE lt = 2)
THEN 'Melati' ELSE 'Mawar' END) ruang
FROM mahasiswa;

Berikut ini contoh penggunaan scalar subquery dalam klausa ORDER BY :

SELECT stb, nama_mhs
FROM mahasiswa x
ORDER BY (SELECT nama_kelas
FROM kelas z
WHERE x.id_kelas = z.id_kelas);

KORELASI SUBQUERY
 
Korelasi SubQuery digunakan untuk pemrosesan baris per baris. subquery
dijalankan sekali untuk setiap baris dari outer query.
Proses korelasi dimulai dengan mengambil baris dari outer query, kemudian inner
query dijalankan dengan menggunakan nilai baris kandidat, kemudian nilai dari inner
query digunakan untuk melakukan kualifikasi atau mendiskualifikasi baris kandidat.

Berikut ini cara penulisan dari Korelasi SubQuery :

SELECT column1, column2, ...
FROM table1 outer
WHERE column1 operator
(SELECT colum1, column2
FROM table2
WHERE expr1 = outer .expr2);

Berikut ini contoh penggunaan korelasi subquery untuk mencari mahasiswa
yang memiliki tinggi melebihi rata-rata tinggi di kelas.
 SELECT nama_mhs, tinggi, id_kelas
FROM mahasiswa outer
WHERE tinggi >
(SELECT AVG(tinggi)
FROM mahaisiswa
WHERE id_kelas = outer.id_kelas) ;

Korelasi Subquery juga dapat digunakan untuk meng-update baris pada satu table
berdasarkan pada baris dari table yang lain, korelasi seperti itu dinamakan dengan
Korelasi Update.
 
Berikut cara penulisan Korelasi Update :

UPDATE table1 alias1
SET column = (SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);
 
Lakukan denormalisasi pada table mahasiswa dengan menambahkan satu kolom pada
tabel mahasiswa untuk menyimpan nama kelas.

ALTER table mahasiswa
ADD (nama_kelas varchar(14));
Kemudian isi dari kolom nama kelas
KELAS dengan menggunakan Korelasi Update :
UPDATE mahasiswa x
SET nama_kelas = (SELECT nama_kelas FROM Kelas z
WHERE x.id_kelas = z.id_kelas);

Korelasi Subquery juga dapat digunakan untuk menghapus baris pada satu table
berdasarkan pada baris dari table yang lain, korelasi seperti itu dinamakan dengan
Korelasi Delete.

Berikut cara penulisan Korelasi Delete :

DELETE FROM table1 alias1
WHERE column operator (SELECT expression FROM table2 alias2
WHERE alias1.column = alias2.column);

PENGGUNAAN OPERATOR EXIST DAN NOT EXIST
 
Operator EXISTS dan NOT EXIST digunakan untuk menguji keberadaan dari
baris dalam himpunan hasil dari subquery.
 
Jika ditemukan, maka :
Pencarian tidak dilanjutkan dalam inner query dan kondisi ditandai TRUE.
 
Jika tidak ditemukan, maka :
Kondisi ditandai FALSE dan kondisi pencarian dilanjutkan dalam inner query.
 
Berikut penggunaan operator EXISTS untuk mencari mahasiswa yang memiliki
sedikitnya satu orang teman.
 
SELECT stb, nama_mhs, asal, id_kelas
FROM mahasiswa outer
WHERE EXISTS ( SELECT 'X' FROM mahasiswa WHERE id_asal =
outer.stb);
UPDATE mahasiswa x
SET nama_kelas = (SELECT nama_kelas FROM Kelas z
WHERE x.id_kelas = z.id_kelas);

Korelasi Subquery juga dapat digunakan untuk menghapus baris pada satu table
berdasarkan pada baris dari table yang lain, korelasi seperti itu dinamakan dengan
Korelasi Delete.

Berikut cara penulisan Korelasi Delete :

DELETE FROM table1 alias1
WHERE column operator (SELECT expression FROM table2 alias2
WHERE alias1.column = alias2.column);

PENGGUNAAN OPERATOR EXIST DAN NOT EXIST
Operator EXISTS dan NOT EXIST digunakan untuk menguji keberadaan dari
baris dalam himpunan hasil dari subquery.

Jika ditemukan, maka :
• Pencarian tidak dilanjutkan dalam inner query dan kondisi ditandai TRUE.

Jika tidak ditemukan, maka :
• Kondisi ditandai FALSE dan kondisi pencarian dilanjutkan dalam inner query.
 
Berikut penggunaan operator EXISTS untuk mencari mahasiswa yang memiliki
sedikitnya satu orang teman.
 
SELECT stb, nama_mhs, asal, id_kelas
FROM mahasiswa outer
WHERE EXISTS ( SELECT 'X' FROM mahasiswa WHERE id_asal =
outer.stb);

SQL (Structure Query Language)


A. Pengenalan SQL
SQL pertama kali digunakan pada sebuah proyek riset laboratorium riset San Jose, IBM.
Dan pada saat ini SQL telah banyak digunakan pada berbagai platform, baik dari mikrokomputer maupun mainframe. SQL dapat diletakkan pada bahasa pemrogrman/mesin yaitu C dan Delphi ataupun digunakan secara mandiri/berdiri sendiri. Saat ini SQL telah menjadi bagian dari sejumlah DBMS, antara lain : Sybase, MySQL, Oracle, dan Informix.