Anda di halaman 1dari 24

LAPORAN MODUL VI

PRAKTIKUM BASIS DATA


“SUB QUERY”

Disusun untuk Memenuhi Matakuliah Praktikum Basis Data


Dibimbing oleh Triyanna Widyaningtyas, S.T., M.T.

Oleh:
Fahuda Elwin Yunianto 170533628592
Fajri Novitasari 170533628549

S1 PTI ‘17 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
Maret 2018
I. Tujuan Praktikum
 Memahami keterhubungan entitas di dalam basis data
 Memahami operasi subquery dan jenis-jenisnya di dalam
pengambilan data
 Mampu menyelesaikan kasus-kasus pengambilan data yang
kompleks dengan pendekatan subquery
II. Dasar Teori
1. 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
persoalan-persoalan rumit berkaitan query data. Sebagai contoh,
misal terdapat pernyataan sebagai berikut:
“Dapatkan data mahasiswa yang alamatnya sama dengan
mahasiswa dengan nim 104”
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 (akan dijelaskan nanti).
Pada hakekatnya, subquery sangat berguna ketika sebuah
query didasarkan pada nilai-nilai yang tak diketahui. Sintaks formal
subquery diperlihatkan sebagai berikut:

Subquery dapat diklasifikasikan ke dalam tiga jenis : scalar,


multiple-row, dan multiple column
a. Scalar Subquery
Subquery baris tunggal (scalar) hanya mengembalikan
hasil satu baris data. Bentuk subquery ini diperlihatkan
seperti gambar berikut:

Subquery baris tunggal dapat menggunakan operator


baris tunggal =, >, >=, <, <=, atau <>.
b. Multiple-Row Subquery
Subquery baris ganda (multiple-row) mengembalikan
lebih dari satu baris data. Bentuk subquery ini
diperlihatkan seperti gambar berikut:

Subquery baris ganda dapat menggunakan operator


komparasi IN, ANY, SOME, atau ALL.
c. Multiple-Column Subquery
Subquery kolom ganda (multiple-column)
mengembalikan lebih dari satu baris dan satu kolom data.
Bentuk subquery ini diperlihatkan seperti gambar berikut:

III. 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 buat tabel dosen dan jurusan
dengan struktur seperti pada modul.
Pertama, membuat tabel dosen dengan pernyataan SQL berikut:
Setelah tabel dosen dibuat, untuk mengecek dengan memilih
Structure

Kemudian menginputkan data pada tabel

Hasil penginputan data pada tabel dapat ditampilkan dengan memilih


SQL atau dengan SELECT * FROM `dosen`

Kedua, membuat tabel jurusan dengan pernyataan SQL sebagai


berikut:
Berikut adalah struktur tabel jurusan yang telah dibuat, untuk
mengecek dengan memilih Strucutre

Setelah membuat tabel jurusan, menginputkan data pada tabel

Hasil penginputan data pada tabel dapat ditampilkan dengan memilih


SQL atau dengan SELECT * FROM `jurusan`

Relasi
Himpunan entitas di atas dapat direpresentasikan ke dalam diagram
skema (schema diagram). Sebelum membuat relasi, user membuat
index pada beberapa field dengan cara klik Index. Field yang dibuat
menjadi index adalah field nim, kode_mk, pada tabel ambil_mk,
field kode_dos pada tabel matakuliah, dan kode_dos pada tabel
jurusan

Setelah nim dan kode_mk pada tabel mk di set index maka hasilnya
seperti gambar di bawah ini:

Kemudian menge-set index pada field kode_dos tabel matakuliah

Hasil dari set index pada kode_dos seperti gambar dibawah, yaitu
terdapat kunci berwarna abu-abu.
Kemudian menge-set index pada field kode_dos tabel jurusan

Hasil dari set index pada kode_dos seperti gambar dibawah, yaitu
terdapat kunci berwarna abu-abu.

Setelah menge-set field yang perlu di index, selanjutnya membuat


relasi dengan klik database modul6 kemudian pilih More lalu klik
designer.

Kemudian membuat relasi dari kelima tabel dengan memilih create


relation/buat relasi.
Selanjutnya memilih reference key atau kunci rujukan dan
dihubungkan dengan foreign key. Sehingga kelima tabel tersebut
saling terhubung seperti gambar di bawah ini:

2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data
mahasiswa yang jenis kelaminnya sama dengan mahasiswa dengan
nama “Wati”.
Sebagai hasilnya, didapatkan jenis kelamin mahasiswa dengan
nama “Wati”, yakni “P” yang selanjutnya digunakan oleh main
query sehingga menghasilkan sebagai berikut.

3. Multiple-Row Subquery
Pada subquery ini, kita menggunakan operator komparasi IN,
ANY /SOME, atau ALL
a. Operator IN
Operator IN memiliki arti : sama dengan member di dalam list.
Sebagai contoh, user bisa menggunakan operator ini untuk
mendapatkan data dosen yang mengajar matakuliah, dengan
mengeksekusi pernyataan SQL berikut:

Maka data yang diperoleh dari eksekusi pernyataan SQL di atas


adalah sebagai berikut:

b. Operator ANY/SOME
Operator ANY / SOME memiliki arti : membandingkan suatu
nilai dengan setiap nilai yang dikembalikan oleh subquery.
Misalkan user ingin mendapatkan data matakuliah yang
memiliki sks lebih besar dari sembarang sks matakuliah di
semester 3, dengan mengeksekusi pernyataan SQL berikut:

Maka data yang diperoleh dari eksekusi pernyataan SQL di atas


adalah sebagai berikut:

c. Operator ALL
Operator ALL memiliki arti: membandingkan suatu nilai dengan
semua nilai yang dikembalikan oleh subquery. Misal, kita ingin
mendapatkan data matakuliah yang memiliki sks lebih besar dari
semua sks matakuliah di semester 3, dengan mengeksekusi
pernyataan SQL berikut:

Maka data yang diperoleh dari eksekusi pernyataan SQL di atas


adalah sebagai berikut:
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
main query. Sebagai contoh, misalkan kita ingin menampilkan
data matakuliah yang semester dan sksnya sesuai dengan
semester dan sks matakuliah dengan kode “PTI447”, dengan
mengeksekusi pernyataan SQL berikut:

Maka data yang diperoleh dari eksekusi pernyataan SQL di


atas adalah sebagai berikut:

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, EXIST akan mengembalikan nilai
true. Begitu pula sebaliknya, jika tidak mengembalikan
hasil. Sebagai contoh, pernyataan berikut akan mendapatkan
data matakuliah yang diambil oleh mahasiswa.
a. EXISTS
Dari eksekusi pernyataan di atas, maka data yang diperoleh
adalah sebagai berikut:

b. NOT EXISTS
Pernyataan SQL berikut akan mendapatkan data matakuliah
yang tidak diambil oleh mahasiswa

Maka data yang diperoleh dari eksekusi pernyataan SQL di


atas adalah sebagai berikut:

IV. Tugas Praktikum


1. Dapatkan data dosen yang mengajar matakuliah basis data
terdistribusi dan sistem operasi.
a. Source Code
SELECT * FROM dosen WHERE kode_dos IN (SELECT
kode_dos FROM matakuliah WHERE nama_mk LIKE ‘%Basis
Data Terdistribusi%’ OR nama_mk LIKE ‘%Sistem
Operasi%’)
b. Screenshoot Program/Hasil

c. Analisis
Mendapatkan data dosen yang mengajar matakuliah basis data
terdistribusi dan sistem operasi dengan menggunakan
pernyataan SQL SELECT * FROM dosen WHERE kode_dos IN
(SELECT kode_dos FROM matakuliah WHERE nama_mk LIKE
‘%Basis Data Terdistribusi%’ OR nama_mk LIKE

‘%Sistem Operasi%’). SELECT * FROM dosen digunakan


untuk menyeleksi atau menampilkan semua field yang terdapat
pada tabel dosen. WHERE kode_dos merupakan kondisi
dimana field pada tabel dosen yang akan digunakan untuk
mencari persamaan nilai pada field tabel lain. IN digunakan
untuk mencari apakah nilai suatu field ada di dalam himpunan
nilai lain yang bertipe sama dan ingin menampilkan yang
memiliki hasil lebih dari satu. SELECT kode_dos FROM

matakuliah digunakan untuk menyeleksi data field kode_dos


pada tabel matakuliah WHERE nama_mk LIKE ‘%Basis Data
Terdistribusi%’ OR nama_mk LIKE ‘%Sistem Operasi%’
digunakan untuk menyeleksi data dimana pada field nama_mk
mempunyai nama atau kata kunci ‘Basis Data

Terdistribusi’ atau ‘Sistem Operasi.


2. Dapatkan data mahasiswa dan matakuliah yang diambil di
semester 5.
a. Source Code
SELECT m.nim, m.nama, m.jenis_kelamin, m.alamat,
a.kode_mk FROM mahasiswa m JOIN ambil_mk a ON
m.nim=a.nim WHERE a.kode_mk IN (SELECT kode_mk FROM
matakuliah WHERE semester = '5')
b. Screenshoot Program/Hasil

c. Analisis
Mendapatkan data mahasiswa dan matakuliah yang diambil di
semester 5 menggunakan pernyataan SQL SELECT m.nim,
m.nama, m.jenis_kelamin, m.alamat, a.kode_mk FROM
mahasiswa m JOIN ambil_mk a ON m.nim=a.nim WHERE
a.kode_mk IN (SELECT kode_mk FROM matakuliah WHERE
semester = '5'). SELECT m.nim, m.nama,

m.jenis_kelamin, m.alamat, a.kode_mk digunakan untuk


menyeleksi data field nim pada tabel mahasiswa, nama pada
tabel mahasiswa, jenis_kelamin pada tabel mahasiswa, alamat
pada tabel matakuliah, dan kode_mk pada tabel ambil_mk. FROM
mahasiswa m merupakan tempat data yang akan diseleksi yaitu
tabel mahasiswa dengan menggunakan derived table (alias)
menjadi m. JOIN ambil_mk a digunakan untuk menampilkan
data dengan menghubungkan dua tabel yaitu mahasiswa dan
ambil_mk dengan menggunakan derived table (alias) menjadi a.
ON m.nim=a.nim digunakan untuk menampilkan data-data
yang mempunyai nilai sama antara nim pada tabel mahasiswa
dengan nim pada tabel ambil_mk. WHERE a.kode_mk

merupakan kondisi dimana field kode_mk pada tabel ambil_mk


yang akan digunakan untuk mencari persamaan nilai pada field
tabel lain. IN digunakan untuk mencari apakah nilai suatu field
ada di dalam himpunan nilai lain yang bertipe sama dan ingin
menampilkan yang memiliki hasil lebih dari satu. SELECT
kode_mk FROM matakuliah digunakan untuk menyeleksi data
field kode_mk pada tabel matakuliah. WHERE semester = '5'
merupakan kondisi dimana semester bernilai = 5.

3. Dapatkan data matakuliah yang mempunyai sks lebih kecil


dari sembarang sks matakuliah di semester 5.
a. Source Code
SELECT * FROM matakuliah WHERE sks < ANY (SELECT
sks FROM matakuliah WHERE semester='5')
b. Screenshoot Program/Hasil
c. Analisis
Untuk mendapatkan data matakuliah yang mempunyai sks lebih
kecil dari sembarang sks matakuliah di semester 5 menggunakan
pernyataan SQL SELECT * FROM matakuliah WHERE sks <
ANY (SELECT sks FROM matakuliah WHERE

semester='5'). SELECT * FROM matakuliah digunakan


untuk menyeleksi atau menampilkan semua field yang terdapat
pada tabel matakuliah. WHERE sks < ANY digunakan untuk
menspesifikasikan sks yang lebih kecil dengan seleksi sks pada
tabel matakuliah dengan kondisi semester bernilai 5, pernyataan
subquery yang digunakan adalah SELECT sks FROM
matakuliah WHERE semester='5'.

4. Dapatkan data dosen pengajar matakuliah yang tidak diambil


oleh mahasiswa.
a. Source Code
SELECT * FROM dosen WHERE kode_dos IN (SELECT
kode_dos FROM mahasiswa m LEFT JOIN ambil_mk a ON
m.nim=a.nim RIGHT JOIN matakuliah k ON
a.kode_mk=k.kode_mk WHERE m.nim IS NULL)
b. Screenshoot Program/Hasil

c. Analisis
Mendapatkan data dosen pengajar matakuliah yang tidak
diambil oleh mahasiswa dengan menggunakan pernyataan SQL
SELECT * FROM dosen WHERE kode_dos IN (SELECT
kode_dos FROM mahasiswa m LEFT JOIN ambil_mk a ON
m.nim=a.nim RIGHT JOIN matakuliah k ON
a.kode_mk=k.kode_mk WHERE m.nim IS NULL). SELECT *

FROM dosen digunakan untuk menyeleksi atau menampilkan


semua field yang terdapat pada tabel dosen. WHERE kode_dos
merupakan kondisi dimana field pada tabel dosen yang akan
digunakan untuk mencari persamaan nilai pada field tabel lain.
IN digunakan untuk mencari apakah nilai suatu field ada di
dalam himpunan nilai lain yang bertipe sama dan ingin
menampilkan yang memiliki hasil lebih dari satu. Pada subquery
SELECT kode_dos FROM mahasiswa m digunakan untuk
menyeleksi field kode_dos pada tabel mahasiswa dan tabel
mahasiswa dengan menggunakan derived table (alias) menjadi
m LEFT JOIN ambil_mk a digunakan untuk mendapatkan data
dari dua tabel yaitu tabel ambil_mk dengan mahasiswa dimana
data di tabel sebelah kiri ditampilkan semua. ON m.nim=a.nim
digunakan untuk menampilkan data-data yang mempunyai nilai
sama antara nim pada tabel mahasiswa dengan nim pada tabel
ambil_mk. RIGHT JOIN matakuliah k digunakan untuk
mendapatkan data dari dua tabel yaitu tabel matakuliah dengan
ambil_mk dimana data di tabel sebelah kanan ditampilkan
semua. ON a.kode_mk=k.kode_mk WHERE m.nim IS NULL
digunakan untuk menampilkan data-data yang mempunyai nilai
sama antara kode_mk pada tabel ambil_mk dengan kode_mk
pada tabel matakuliah dengan kondisi m.nim atau nilai nim pada
tabel mahasiswa bernilai NULL.

5. Dapatkan kode dan nama matakuliah dosen yang menjadi


ketua jurusan teknik elektro.
a. Source Code
SELECT kode_mk, nama_mk FROM matakuliah WHERE
kode_dos = (SELECT kode_dos FROM jurusan WHERE
nama_jur = 'Teknik Elektro')
b. Screenshoot Program/Hasil

c. Analisis
Mendapatkan kode dan nama matakuliah dosen yang menjadi
ketua jurusan teknik elektro dengan pernyataan SQL SELECT
kode_mk, nama_mk FROM matakuliah WHERE kode_dos =
(SELECT kode_dos FROM jurusan WHERE nama_jur =
'Teknik Elektro'). SELECT kode_mk, nama_mk FROM

matakuliah digunakan untuk menyeleksi data pada field


kode_mk dan nama_mk pada tabel matakuliah. WHERE kode_dos
= digunakan untuk menspesifikasikan data pada tabel matakuliah
yaitu kode_dos sama dengan kode_dos pada tabel jurusan dengan
kondisi nama_jur adalah Teknik Elektro. SQL subquery yang
digunakan adalah SELECT kode_dos FROM jurusan WHERE
nama_jur = 'Teknik Elektro'.

V. TUGAS RUMAH
1. Mendapatkan data dosen yang mengajar matakuliah dengan sks lebih
kecil dari sembarang sks.
a. Source code
SELECT * FROM dosen WHERE kode_dos IN
(SELECT kode_dos FROM matakuliah
WHERE sks < ANY (SELECT sks FROM matakuliah))

b. Screenshoot program/hasil

c. Penjelasan /Analisis
Setelah menginputkan source code diatas maka program akan
menampilkan data dosen yang mengajar matakuliah dengan sks
lebih kecil dari sembarang sks dengan menggunakan pernyataan
SQL (SELECT sks FROM matakuliah) dimana perintah tersebut
digunakan untuk mencaari data sks pada tabel matakuliah. Lalu
digunakan perintah SELECT kode_dos FROM matakuliah WHERE
sks < ANY yang digunakan untuk mencari data kode dosen dari
tabel matakuliah dan pengondisian dimana data yang lebih kecil
dari sembarang sks yang akan ditampilkan. Dan dilanjutkan
dengan perintah SELECT * FROM dosen WHERE kode_dos IN
yang digunakan untuk menampilkan data dosen yang mengajar
matakuliah dengan sks lebih kecil dari sembarang sks sesuai dalam
list yang telah diinputkan.
2. Menampilkan data nama mahasiswa yang mengambil matakuliah
dengan kode matakuliahnya “ pti777 ”

a. Source code
SELECT m.nama FROM mahasiswa m WHERE m.nim IN
(SELECT a.nim FROM ambil_mk a
WHERE a.kd_mk = "PTI777")
b. Screenshoot program/hasil

c. Penjelasan /Analisis
Setelah menginputkan source code diatas maka program akan
menampilkan nama mahasiswa yang mengambil matakuliah
dengan kode matakuliahnya “PTI777” dengan menggunakan
pernyataan SQL (SELECT a.nim FROM ambil_mk a WHERE
a.kd_mk = "PTI777") dimana perintah tersebut digunakan untuk
mencari data nim dari tabel ambil_mk dimana kd_mk pada tabel
ambil_mk memiliki karakter “PTI777”. Dan digunakan perintah
SELECT m.nama FROM mahasiswa m WHERE m.nim IN dimana
perintah tersebut digunakan untuk menampilkan data mahasiswa
yang mengambil matakuliah dengan kode matakuliahnya “PTI777”
sesuai dalam list yang telah diinputkan.
3. Mendapatkan data mahasiswa yang tinggal satu wilayah dengan dosen
yang merupakan Ketua Jurusan Teknik Elektro.
a. Source code
SELECT * FROM mahasiswa m WHERE m.alamat IN (SELECT
d.alamat_dos FROM dosen d WHERE d.kode_dos IN (SELECT
kode_dos FROM jurusan WHERE nama_jur ="Teknik
Elektro"))
b. Screenshoot program/hasil

c. Penjelasan /Analisis
Setelah menginputkan source code diatas maka program akan
menampilkan data mahasiswa yang tinggal satu wilayah dengan
dosen yang merupakan Ketua Jurusan Teknik Elektro dengan
menggunakan pernyataan SQL SELECT kode_dos FROM jurusan
WHERE nama_jur ="Teknik Elektro" dimana source kode
tersebut digunakan untuk mencari data Ketua Jurusan Teknik
Elektro berdasarkan kode_dos yang didapat dari tabel juusan
dimana nama_jur memiliki karakter “Teknik Elektro”. Dan
digunakan perintah SELECT d.alamat_dos FROM dosen d WHERE
d.kode_dos IN yang digunakan untuk mencari data alamat dosen
dari tabel dosen berdasarkan data kode_dos yang sesuai dalam list
yang telah diinputkan. Lalu digunakan perintah SELECT * FROM
mahasiswa m WHERE m.alamat IN dimana perintah tersebut
digunakan untuk menampilkan data mahasiswa dari tabel
mahasiswa yang memiliki alamat yang sama dengan dosen yang
merupakan Ketua Jurusan Teknik Elektro yang sesuai dalam list
yang telah diinputkan.

4. Mendapatkan data mahasiswa yang tidak diajar oleh Ketua Jurusan


Teknik Elektro
a. Source code
SELECT * FROM mahasiswa WHERE nim NOT IN (SELECT a.nim
FROM ambil_mk a WHERE a.kd_mk NOT IN (SELECT
ma.kd_mk FROM matakuliah ma WHERE ma.kode_dos NOT IN
(SELECT j.kode_dos FROM jurusan j WHERE j.nama_jur =
"Teknik Elektro")))
b. Screenshoot program/hasil

c. Penjelasan /Analisis
Setelah menginputkan source code diatas maka program akan
menampilkan data mahasiswa yang mahasiswa yang tidak diajar
oleh Ketua Jurusan Teknik Elektro dengan menggunakan
pernyataan SQL SELECT j.kode_dos FROM jurusan j WHERE
j.nama_jur = "Teknik Elektro" digunakan untuk mencari
data Ketua Jurusan Teknik Elektro berdasarkan kode_dos yang
didapat dari tabel juusan dimana nama_jur memiliki karakter
“Teknik Elektro”. Dan digunakan perintah SELECT ma.kd_mk
FROM matakuliah ma WHERE ma.kode_dos NOT IN yang
digunakan untuk mencari data kd_mk dari tabel matakuliah dimana
kode_dos yang dicari tidak berada dalam list kode_dos pada tabel
jurusan. Lalu digunakan perintah SELECT a.nim FROM ambil_mk
a WHERE a.kd_mk NOT IN yang digunakan untuk mencari data
nim dari tabel ambil_mk dimana kd_mk yang dicari tidak berada
dalam list kd_mk pada tabel matakuliah. Dan yang terakhir
digunakan perintah SELECT * FROM mahasiswa WHERE nim NOT
IN digunakan untuk menampilkan data mahasiswa yang
mahasiswa yang tidak diajar oleh Ketua Jurusan Teknik Elektro
dimana nim yang dicari tidak berada dalam list nim pada tabel
ambil_mk.
VI. Kesimpulan
Dalam praktikum modul 6 “Sub Query” dapat disimpulkan bahwa
SubQuery merupakan sebuah query yang ada di dalam query seperti
halnya query SELECT yang terdapat didalam perintah SQL lain misalnya
SELECT, INSERT, UPDATE, atau DELETE.
Pada praktikum modul 6 terdapat suatu hubungan antara dua jenis
entitas dan direpresentasikan sebagai garis lurus yang menghubungkan dua
entitas. Seperti mahasiswa yang mengambil matakuliah yang relasinya
adalah mengambil.
Pada praktikum ini SubQuery dapat diklasifikasikan kedalam tiga
jenis yaitu Scalar Subquery, Multi-row Subquery, dan Multi-column
Subquery .
Pada praktikum modul 6 terdapat beberapa operator yang
digunakan seperti IN, ANY, ALL, EXISTS, dan NON EXISTS dimana
penggunaan operator IN digunakan untuk membandingkan data yang sama
dengan list data pada Subquery, operator ANY yang digunakan untuk
membandingkan suatu nilai yang dikembalikan oleh Subquery, operator
ALL digunakan untuk melakukan pembandingan dengan sub query
dimana kondisi dengan ALL mengasilkan nilai benar jika pembandingan
menghasilkan nilai benar untuk setiap nilai dalam Subquey, operator
EXISTS merupakan jenis operator yang memberikan nilai benar jika
Subquery menghasilkan sebuah baris atau record. Dan operator NON
EXISTS merupakan kebalikan dari perintah EXISTS.

VII. Daftar Rujukan

Andika Dwiky. Pengertian dan Contoh SUBQUERY pada MYSQL. 2016.

https://www.it-jurnal.com/pengertian-dan-contoh-subquery-pada-

mysql-oracle/, diakses pada tanggal 19 Maret 2018, pukul 19.42

Anda mungkin juga menyukai