Modul Basisdata Subquery

Subquery

Subquery (disebut juga subselect atau nested select / query atau inner- select) adalah query SELECT yang ada di dalam perintah SQL lain— misalnya SELECT, INSERT, UPDATE, atau DELETE.

Keberadaan subquery secara nyata mampu menyederhanakan persoalanpersoalan rumit berkaitan query data. Sebagai contoh, misal terdapat pernyataan sebagai berikut:

“Dapatkan data mahasiswa yang alamatnya sama dengan mahasiswa dengan nim 103”

Secara normal, diperlukan dua tahapan untuk menyelesaikan kasus di atas. Pertama adalah mendapatkan alamat dari mahasiswa yang memiliki nim 104. Langkah selanjutnya, baru kita bisa mengetahui data mahasiswa yang alamatnya sama dengan mahasiswa dengan nim 104.

Adapun dengan memanfaatkan subquery, maka penyelesaian kasus di atas hanya memerlukan sebuah query. Pada hakekatnya, subquery sangat berguna ketika sebuah query didasarkan pada nilai-nilai yang tak diketahui.

A. Scalar Subquery

Subquery baris tunggal (scalar) hanya mengembalikan hasil satu baris data.

B. Multiple-Row Subquery

Subquery baris ganda (multiple-row) mengembalikan lebih dari satu baris data.

C. Multiple-Column Subquery

Subquery kolom ganda (multiple-column) mengembalikan lebih dari satu baris dan satu kolom data.

Latihan

1. Himpunan Entitas

Dalam latihan ini digunakan kembali tiga buah tabel—meliputi mahasiswa, ambil_mk, dan matakuliah—yang telah dibuat sebelumnya, dan ditambah dengan dua buah tabel baru, yaitu dosen dan jurusan. Untuk itu, terlebih dahulu ciptakan tabel dosen dan jurusan

Tabel Dosen
Tabel Jurusan
Tabel ambil_mk
Tabel Mahasiswa
Tabel Matakuliah

2. Scalar Subquery

Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang Jenis kelaminnya sama dengan mahasiswa dengan nama “Wati”. Bisa digambarkan, langkah pertama dari operasi di bawah adalah mendapatkan jenis kelamin mahasiswa dengan nama “Wati”, kemudian hasilnya yakni “P” akan digunakan oleh main query.

kode terdapat pada gambar

3. Multiple-Row Subquery

Pada subquery ini, kita menggunakan operator komparasi IN, ANY / SOME, atau ALL.

OPERATOR IN

Operator IN memiliki arti : sama dengan member di dalam list. Sebagai contoh, kita bisa menggunakan operator ini untuk mendapatkan data dosen yang mengajar matakuliah.

OPERATOR ANY / SOME

Operator ANY / SOME memiliki arti : membandingkan suatu nilai dengan setiap nilai yang dikembalikan oleh subquery.

Misalkan kita ingin mendapatkan data matakuliah yang memiliki sks lebih besar dari sem barang sks matakuliah di semester 3.

OPERATOR ALL

Operator ALL memiliki arti : membandingkan suatu nilai dengan semua nilai yang dikembalikan oleh subquery.

Misalkan kita ingin mendapatkan data matakuliah yang memiliki sks lebih besar dari sem ua sks matakuliah di semester 3. Operator < ALL ekuivalen dengan MIN (kurang dari minn). Operator > ALL ekuivalen dengan MAX (lebih dari makss).

4. Multiple-Column Subquery

Subquery kolom ganda (atau tabel) juga menggunakan operator komparasi IN, ANY / SOME, atau ALL. Pada query ini, nilai dari subquery—dalam bentuk kolom ganda—dikomparasi dengan main query.

Sebagai contoh, misalkan kita ingin menampilkan data matakuliah yang semester dan sksnya sesuai dengan semester dan sks matakuliah dengan kode “PTI447”.

5. Operator EXISTS dan NOT EXISTS

Operator EXISTS dan NOT EXISTS digunakan pada correlated subquery untuk memeriksa apakah subquery mengembalikan hasil atau tidak. Apabila subquery mengembalikan hasil, EXISTS akan mengembalikan nilai true. Begitu pula sebaliknya, jika tidak mengembalikan hasil.

Sebagai contoh, pernyataan berikut akan mendapatkan data matakuliah yang diambil oleh mahasiswa.

OPERATOR EXSIST
OPERATOR NOT EXSIST

6. Subquery dan Fungsi Agregat

Operasi-operasi pada subquery juga dapat melibatkan fungsi-fungsi agregat.

Sebagai contoh, misalkan ingin mendapatkan data matakuliah yang memiliki sks sama dengan sks terkecil.

7. Subquery dan Join

Dalam beberapa kasus sederhana, fungsionalitas subquery dan join dapat dipertukarkan. Dengan kata lain, keduanya dapat digunakan untuk menyelesaikan persoalan yang sama.

Sebagai contoh, misalkan kita ingin mendapatkan kode dosen dan nama dosen yang tidak mengajar matakuliah

PENDEKATAN SUBSEQUERY :

PENDEKATAN JOIN :


TUGAS PRAKTIKUM

  1. Dapatkan data mahasiswa yang alamatnya sama dengan mahasiswa dengan nim102, tidak termasuk mahasiswa tersebut

2. Dapatkan matakuliah yang tidak diajar oleh dosen terdaftar.

3. Dapatkan data dosen yang mengajar matakuliah dengan sks lebih kecil dari sembarang sks.

4. Dapatkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama dengan dosen yang mengajar matakuliah dengan jumlah sks terbanyak.

Tulis dengan kode
Select nim,nama,alamat FROM mahasiswa WHERE alamat IN(Select alamat_dos from dosen d,matakuliah m WHERE m.kode_dos = d.kode_dos AND sks > ANY(select sks FROM matakuliah));

SEKIAN DAN TERIMAKASIH 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s