Anda di halaman 1dari 6

PRAKTEK BASIS DATA 2016

BAB V

SUB QUERY

A. DESKRIPSI
Sub Query adalah query didalam query. Artinya seleksi data berdasarkan dari hasil
seleksi data yang telah ada. Sintak SQL nya sama dengan sintak SQL pada umumnya,
hanya saja kondisi setelah where atau from diikuti dengan query baru atau sub query.
Sintak SQL nya sebagai berikut:

B. CREATE SUB QUERY

1
PRAKTEK BASIS DATA 2016
KASUS

PERTANYAAN

1. Dari data mahasiswa yang terdaftar, siapa sajakah (nama) mahasiswa yang tidak
mengambil matakuliah A01?
2. Hapuslah data mahasiswa (dari tabel mhs) yang memiliki IPK terendah (kasus di DO).

SOLUSI NO 1
STEP PERTAMA :

Menampilkan semua mahasiswa yang ikut matakuliah A01

SELECT nim FROM ambilmk WHERE kodeMK = 'A01'

OUTPUT

2
PRAKTEK BASIS DATA 2016
STEP KEDUA :

Tambahkan kriteria tidak mengikuti matkul dengan keyword not(tidak)


Sehingga menjadi seperti berikut ini :

SELECT nim, namaMhs


FROM mhs
WHERE nim NOT IN
(SELECT nim FROM ambilmk WHERE kodeMK = 'A01');

OUTPUT

SOLUSI NO 2

STEP PERTAMA :

Cari IPK dari Setiap Mahasiswa :

SELECT * , sum(info_kuliah.nilai * info_kuliah.sks)/sum(info_kuliah.sks)


as ipk from info_kuliah
GROUP BY nim
ORDER BY sum(info_kuliah.nilai * info_kuliah.sks)/sum(info_kuliah.sks)

OUTPUT

STEP KEDUA :

Kemudian tampilkan IPK yang terkecil :

SELECT * , sum(info_kuliah.nilai * info_kuliah.sks)/sum(info_kuliah.sks)


as ipk from info_kuliah
GROUP BY nim
ORDER BY sum(info_kuliah.nilai * info_kuliah.sks)/sum(info_kuliah.sks) asc
LIMIT 1

3
PRAKTEK BASIS DATA 2016
OUTPUT

Sudah Jelas bahwa nanti yang akan terhapus nim 002 , agar kriteria penghapusannya jelas
maka kita akan persempit tampilannya, :

sELECT tm_ambilmk.nim
FROM tm_ambilmk,tm_mk
WHERE tm_ambilmk.kodeMK = tm_mk.kodeMK
GROUP BY tm_ambilmk.nim
ORDER BY sum(tm_ambilmk.nilai * tm_mk.sks)/sum(tm_mk.sks)LIMIT 1)

OUTPUT:

STEP KETIGA :
Tambahkan fungsi untuk menghapus mahasiswa , dengan kriteria nim yang dibuat di step
kedua

delete from tm_mhs where tm_mhs.nim =(


sELECT tm_ambilmk.nim
FROM tm_ambilmk,tm_mk
WHERE tm_ambilmk.kodeMK = tm_mk.kodeMK
GROUP BY tm_ambilmk.nim
ORDER BY sum(tm_ambilmk.nilai * tm_mk.sks)/sum(tm_mk.sks)LIMIT 1)

OUTPUT

4
PRAKTEK BASIS DATA 2016

KASUS 2

Dari tabel pendaftar yang ada, dapat kita ketahui bahwa ada 4 orang dengan nilai tertentu,
dengan data ini kita akan ambil tiga (3) orang dengan nilai terbaik dan dan merubah status ketiga
orang tersebut menjadi lulus. Dengan kata lain akan ada satu orang yang tidak lulus seleksi ini.

STEP PERTAMA
Tampilkan 3 nilai terbesar

SELECT * FROM pendaftar ORDER BY pendaftar.nilai DESC LIMT 0,3;

OUTPUT

STEP KEDUA
Gabungkan perintah ubah statusnya sehingga menjadi sperti berikut ini

UPDATE pendaftar SET status = 'lulus seleksi' WHERE id IN (


SELECT pendaftar.id FROM pendaftar ORDER BY pendaftar.nilai DESC LIMIT 3)

OUTPUT

5
PRAKTEK BASIS DATA 2016
Jika terjadi eror 1235 seperti ini buatlah Sub Query didalamnya
Seperti berikut ini :
UPDATE pendaftar SET status = 'lulus seleksi' WHERE id IN (
sELECT id FROM (SELECT id FROM pendaftar ORDER BY nilai DESC LIMIT 3
) as kode
);

OUTPUT

Anda mungkin juga menyukai