laporan modul vi basis data

Upload: asnita-meydelia

Post on 08-Jul-2018

550 views

Category:

Documents


32 download

TRANSCRIPT

  • 8/19/2019 Laporan Modul VI Basis Data

    1/18

    Laporan Basis Data VI  | 0 

    LAPORAN MODUL VI

    PRAKTIKUM BASIS DATA

    SUBQUERY

    Disusun untuk memenuhi

    Matakuliah Praktikum Basis Data

    Yang Dibimbing oleh Bu. Triyanna Widiyaningtyas, S.T., M.T.

    KELOMPOK 5 :

    Angela Christine H. 130533608098

    Asnita Meydelia C. K. 130533608143

    PTI 2013 OFFERING E

    UNIVERSITAS NEGERI MALANG

    FAKULTAS TEKNIKJURUSAN TEKNIK ELEKTRO

    PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA

    April, 2014

  • 8/19/2019 Laporan Modul VI Basis Data

    2/18

    Laporan Basis Data VI  | 1 

    MODUL VI

    SUBQUERY

    I.  TUJUAN

    1.  Memahami keterhubungan entitas di dalam basis data.

    2. 

    Memahami operasi subquery dan jenis-jenisnya di dalam pengambilan data.

    3.  Mampu menyelesaikan kasus-kasus pengambilan data yang kompleks dengan pendekatan

    subquery.

    II.  DASAR TEORI

    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. Pertamaadalah 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.

    SELECT A1, A2 , ..., An

    FROM r1, r2 , r3 , ..., rm

     WHERE P

    (SELECT A1, A2 , ..., An

    FROM r1, r2 , r3 , ..., rm

     WHERE P )

  • 8/19/2019 Laporan Modul VI Basis Data

    3/18

    Laporan Basis Data VI  | 2 

    a.  Scalar Subquery

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

    subquery ini diperlihatkan seperti Gambar 1.

    Gambar 1 Scalar subquery 

    Subquery baris tunggal dapat menggunakan operator baris tunggal =, > ,

    >=, 

  • 8/19/2019 Laporan Modul VI Basis Data

    4/18

    Laporan Basis Data VI  | 3 

    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 ciptakan tabel

    dosen dan jurusan dengan struktur sebagai berikut :

    Data yang digunakan adalah sebagai berikut (sesuaikan agar sama persis) :

    Tabel Mahasiswa

    nim Nama jenis_kelamin alamat

    101 Arif L Jl. Kenangan

    102 Budi L Jl. Jombang

    103 Wati P Jl. Surabaya

    104 Ika P Jl. Jombang

    105 Tono L Jl. Jakarta

    106 Iwan L Jl. Bandung

    107 Sari P Jl. Malang

    Tabel ambil_mk

    nim kode_mk

    101 PTI447

    103 TIK333

    104 PTI333

    104 PTI777

    111 PTI123

    123 PTI999

    CREATE TABLE dosen(kode_dos INT(5) NOT NULL,nama_dos VARCHAR(30) NOT NULL,alamat_dos VARCHAR(30) NOT NULL,PRIMARY KEY(kode_dos))ENGINE = MyISAM;CREATE TABLE jurusan(kode_jur VARCHAR(5) NOT NULL,

    nama_jur VARCHAR(30) NOT NULL,kode_dos INT(5) NOT NULL,PRIMARY KEY(kode_jur))ENGINE = MyISAM;

  • 8/19/2019 Laporan Modul VI Basis Data

    5/18

    Laporan Basis Data VI  | 4 

    Tabel Matakuliah

    kode_mk nama_mk sks semester kode_dos

    PTI447 Praktikum Basis Data 1 3 11

    TIK342 Praktikum Basis Data 1 3 11PTI333 Basis Data Terdistribusi 3 5 10

    TIK123 Jaringan Komputer 2 5 33

    TIK333 Sistem Operasi 3 5 10

    PTI123 Grafika Multimedia 3 5 12

    PTI777 Sistem Informasi 2 3 99

    Tabel dosen

    kode_dos nama_dos alamat_dos

    10 Suharto Jl. Jombang

    11 Martono Jl. Kalpataru

    12 Rahmawati Jl. Jakarta

    13 Bambang Jl. Bandung

    14 Nurul Jl. Raya Tidar

    Tabel jurusan

    kode_jur nama_jur kode_dos

    TE Teknik Elektro 10

    TM Teknik Mesin 13

    TS Teknik Sipil 23

    Himpunan entitas di atas dapat direpresentasikan ke dalam diagram skema ( schema

    diagram) seperti Gambar 4.

    Gambar 4 Diagram Skema 

  • 8/19/2019 Laporan Modul VI Basis Data

    6/18

    Laporan Basis Data VI  | 5 

    2.  Scalar Subquery

    Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang Jenis

    kelaminnya sama dengan mahasiswa dengan nama “Wati”. 

    Gambar : Scalar Subquery

    Bisa digambarkan, langkah pertama dari operasi di atas adalah mendapatkan jenis

    kelamin mahasiswa dengan nama “Wati”, kemudian hasilnya yakni “P” akan

    digunakan oleh main query.

    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.

    Gambar : Operator IN

    select * from mhswhere jenis_kelamin=(select jenis_kelamin from mhswhere nama="Wati");

    select d.kode_dos, d.nama_dosfrom dosen dwhere d.kode_dos IN

    (select kode_dos from matakuliah);

  • 8/19/2019 Laporan Modul VI Basis Data

    7/18

    Laporan Basis Data VI  | 6 

      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 besardari sembarang sks matakuliah di semester 3.

    Gambar : Operator ANY

     

    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 semua sks matakuliah di semester 3.

    Gambar : Operator ALL

    select * from matakuliahwhere sks > any(select sks from matakuliahwhere semester = 3);

    select * from matakuliahwhere sks > all(select sks from matakuliah

    where semester = 3);

  • 8/19/2019 Laporan Modul VI Basis Data

    8/18

    Laporan Basis Data VI  | 7 

    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 “PTI447”

    Gambar : Multiple-Column Subquery

    5.  Operator EXIST dan NOT EXIST

    Operator EXIST dan NOT EXIST 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.

    Gambar : Operator EXIST

    select * from matakuliah mwhere exists (select * from ambil_mk awhere m.kode_mk= a.kode_mk);

    select * from matakuliahwhere (semester, sks) IN(select semester ,sks frommatakuliahwhere kode_mk = 'PTI447');

  • 8/19/2019 Laporan Modul VI Basis Data

    9/18

    Laporan Basis Data VI  | 8 

    Pernyataan berikut akan mendapatkan data matakuliah yang tidak diambil oleh

    mahasiswa.

    Gambar : Operator NOT EXIST

    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.

    Gambar : Subquery dan Fungsi Agregat

    7.  Subquery dan Join

    Dalam beberapa kasus sederhana, fungsionalitas subquery dan join dapat

    dipertukarkan. Dengan kata lain, keduanya dapat digunakan untuk menyelesaikan

     persolah yang sama.

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

    tidak mengajar matakuliah. Pendekatan subquery :

    select * from matakuliah mwhere not exists 

    (select * from ambil_mk awhere m.kode mk = a.kode mk);

    select * from matakuliahwhere sks =select MIN sks from matakuliah

    select d.kode_dos, d.nama_dosfrom dosen dwhere d.kode_dos not in

    (select kode_dos from matakuliah);

  • 8/19/2019 Laporan Modul VI Basis Data

    10/18

    Laporan Basis Data VI  | 9 

    Gambar : Pendekatan Subquery 

    Pendekatan Join :

    Gambar : Pendekatan Join 

    select d.kode_dos, d.nama_dosfrom dosen dleft outer join matakuliah mon d.kode_dos = m.kode_doswhere m.kode_dos is NULL;

  • 8/19/2019 Laporan Modul VI Basis Data

    11/18

    Laporan Basis Data VI  | 10 

    IV.  TUGAS PRAKTIKUM 

    Dalam mengerjakan tugas praktikum ini, sebaiknya pernyataan SQL disimpan di file untuk

    kemudian dieksekusi

    Selesaikan tugas-tugas di bawah ini dengan menggunakan pendekatan subquery.

    1.  Dapatkan data mahasiswa yang alamatnya sama dengan mahasiswa dengan nim 102,

    tidak termasuk mahasiswa tersebut. (Point 10)

    a.  Perintah SQL :

    b.  Output :

    c.  Pembahasan :

    Data diambil dari tabel mahasiswa. Hal ini dapat kita lihat dari sintaks select

    * from mhs. Perintah soal menginginkan data mahasiswa yang alamatnya samadengan mahasiswa dengan nim 102, tidak termasuk mahasiswa tersebut. Jadi,

    terlebih dahulu kita harus mencari data data mahasiswa yang alamatnya sama

    dengan mahasiswa dengan nim 102. Oleh karena itu, kita menggunakan sintaks

    select alamat from mhs where nim = '102'. Akan tetapi mahasiswa yang

    memilki nim 102 datanya tidak ditampilkan untuk itu kita menggunakan sintaks

    and nim not like "102". 

    2.  Dapatkan matakuliah yang tidak diajar oleh dosen terdaftar. (Poin 20)

    a.  Perintah SQL :

    select * from mhswhere alamat =(select alamat from mhswhere nim = '102') and nim not like "102";

    select nama_mkfrom matakuliahwhere not exists(select kode_dos from dosenwhere kode_dos = matakuliah.kode_dos);

  • 8/19/2019 Laporan Modul VI Basis Data

    12/18

    Laporan Basis Data VI  | 11 

    b.  Output :

    c.  Pembahasan :

    Perintah soal menginginkan tampilan dari matakuliah yang tidak diajar oleh

    dosen terdaftar. karena ingin menampikan nama_mk maka yang diseleksi hanya

    nama_mk dan data tersebut diambil dari tabel matakuliah. Hal ini dapat kita

    lihat pada sintaks select nama_mk from matakuliah. kemudian karena yang

    diminta adalah yang tidak diajar oleh dosen yang terdaftar maka kita

    menggunakan where not exit. where not exists (select kode_dos from

    dosen where kode_dos = matakuliah.kode_dos)  merupakan perintah sql

    yang akan menampilkan matakuliah yang tidak diajar oleh dosen terdaftar. 

    3. 

    Dapatkan data dosen yang mengajar matakuliah dengan sks lebih kecil dari

    sembarang sks. (Point 25)

    a.  Perintah SQL :

    b.  Output :

    c.  Pembahasan :

    Untuk mendapatkan data dosen yang mengajar matakuliah dengan sks lebih

    kecil dari sembarang sks. Berarti kita harus mencari data dosen yang mengajar

    dengan sks terkecil terlebih dahulu. Penggunaan sintaks

  • 8/19/2019 Laporan Modul VI Basis Data

    13/18

    Laporan Basis Data VI  | 12 

    untuk menampilkan data yang memiliki sks kurang dari semua sks yang ada

     pada tabel matakuliah. Untuk mendapatkan data kode_dos, nama_dos,

    alamat_dos kita menggunakan INNER JOIN untuk menemukan persimpangan

    antara tabel dosen dan matakuliah. penggunaan distinct pada sintaks agar tidak

    ada duplikasi pada data.

    4.  Dapatkan data dosen yang mengajar matakuliah yang sksnya kurang dari sks

    matakuliah yang diajar dosen yang sekaligus menjadi ketua jurusan Teknik Elektro,

    tidak termasuk ketua jurusan Teknik Elektro. (Point 30)

    a.  Perintah SQL :

    b.  Output :

    c.  Pembahasan :

    Perintah soal menginginkan untuk menampilkan data dosen yang mengajar

    matakuliah yang sksnya kurang dari sks matakuliah yang diajar dosen yang

    sekaligus menjadi ketua jurusan Teknik Elektro, tidak termasuk ketua jurusan

    Teknik Elektro. Oleh karena itu kita menggunakan INNER JOIN pada tabel

    dosen dan matakuliah untuk menemukan persimpangan data. Penggunaan

    distinct dilakukan untuk menghindari duplikasi data. Karena akan

    menampilkan data dosen yang mengajar matakuliah yang sksnya kurang dari

    sks matakuliah yang diajar dosen yang sekaligus menjadi ketua jurusan Teknik

    Elektro, tidak termasuk ketua jurusan Teknik Elektro berari kita harus mencari

     jumlah sks dari ketua Jurusan Teknik Elektro untuk dijadikan acuan dasar pada

     perintah soal yang diinginkan.

    select distinct d.*from dosen d inner join matakuliah mon d.kode_dos = m.kode_doswhere sks < all(select sks from matakuliahwhere kode_dos in(select kode_dos from jurusanwhere nama_jur ='Teknik Elektro'));

  • 8/19/2019 Laporan Modul VI Basis Data

    14/18

    Laporan Basis Data VI  | 13 

    5.  Dapatkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama dengan

    dosen yang mengajar matakuliah dengan sks di bawah rata-rata. (Point 35)

    a.  Perintah SQL :

    b.  Output :

    c.  Pembahasan :

    Perintah soal menginginkan untuk menampilkan nim, nama, dan alamat

    mahasiswa yang tempat tinggalnya sama dengan dosen yang mengajar

    matakuliah dengan sks di bawah rata-rata. Ada beberapa tabel yang akan kita

     butuhkan datanya, yaitu : mahasiswa, dosen, dan matakuliah. Karena ingin

    menampilkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama

    dengan dosen yang mengajar matakuliah dengan sks di bawah rata-rata maka

    kita harus dosen yang mengajar matakuliah dengan sks di bawah rata-rata

    kemudian kita melakukan pencarian dan melakukan penyeleksian yang lebih

    terfokus pada alamat dimana mahasiswa tersebut memiliki alamat yang sama

    dengan dosen yang mengajar matakuliah dengan sks di bawah rata-rata. Dosen

    yang memiliki sks di bawah rata-rata beralamat di Jl. Kalpataru akan tetapi tidak

    ada mahasiswa yang beralamat sama dengan dosen tersebut maka yang output

    dari program tersebut adalah empty set. 

    select nim, nama, alamatfrom mhswhere alamat in(select distinct alamat_dos from dosenwhere kode_dos in(select distinct kode_dosfrom matakuliahwhere sks < any(select avg(sks) from matakuliah)));

  • 8/19/2019 Laporan Modul VI Basis Data

    15/18

    Laporan Basis Data VI  | 14 

    V.  TUGAS RUMAH

    1. 

    Dapatkan data dosen yang mengajar matakuliah dengan jumlah sks sama dengan

    matakuliah yang diajar oleh ketua jurusan teknik elektro

    a.  Perintah SQL :

    b. 

    Output :

    select distinct d.kode_dos, d.nama_dos, d.alamat_dosfrom dosen d, matakuliah mkwhere d.kode_dos = mk.kode_dosgroup by kode_doshaving SUM(sks) >= ALL(select sks from matakuliah mk, jurusan jwhere j.kode_dos = '10');

  • 8/19/2019 Laporan Modul VI Basis Data

    16/18

    Laporan Basis Data VI  | 15 

    c.  Pembahasan :

    Pada soal ini diminta untuk menampilkan data dosen yang mengajar matakuliah

    dengan jumlah sks sama dengan matakuliah yang diajar oleh ketua jurusan teknik

    elektro. Disini akan menggunakan syntax select distinct d.kode_dos,

    d.nama_dos, d.alamat_dos karena hanya menampilkan data beupa kode dosen,

    nama dosen, dan alamat dosen. Digunakan query distinct karena untuk

    menghindari adanya duplikasi data. Data-data tersebut diambil dari tabel dosen dan

    matakuliah dengan menggunakan syntax from dosen d, matakuliah mk dimana

    kode dosen pada tabel dosen sama dengan kode dosen pada tabel matakuliah where

    d.kode_dos = mk.kode_dos.

    Kemudian karena perintahnya adalah menampilkan jumlah sks sama dengan

    matakuliah yang diajar oleh ketua jurusan Teknik Elektro maka menggunakan

    syntax subquery yaitu :  having SUM(sks) >= ALL(select sks from

    matakuliah mk, jurusan j where j.kode_dos = '10') Dimana pada tabel

    telah dicantumkan Kode dosen untuk ketua jurusan teknik eletro adalah “10”. 

    2.  Dapatkan nama dan nim mahasiswa yang mengambil matakuliah yang jumlah sksnya

    diatas rata-rata

    a. 

    Perintah SQL :

    b.  Output :

    c.  Pembahasan :

    Dalam soal ini diminta menampilkan nama dan nim mahasiswa yang mengambil

    matakuliah yang jumlah sksnya diatas rata-rata. Untuk menampilkan data nama

    dan nim dari tabel mahasiswa digunakan syntax select distinct m.nim,

    select distinct m.nim, m.namafrom mhs m, ambil_mk a, matakuliah mkwhere m.nim = a.nim AND a.kode_mk = mk.kode_mkgroup by nimhaving SUM(sks) > ANY(select AVG(sks) from matakuliah);

  • 8/19/2019 Laporan Modul VI Basis Data

    17/18

    Laporan Basis Data VI  | 16 

    m.nama. Digunakan query distinct karena untuk menghindari adanya duplikasi

    data yang akan ditampilkan. Dimana nim pada tabel mahasiswa dan nim pada tabel

    ambil_mk sama dan juga kode_mk pada tabel ambil_mk sama dengan kode_mk

     pada tabel matakuliah (where m.nim = a.nim AND a.kode_mk = mk.kode_mk).

    Karena data yang diinginkan adalah jumlah sks diatas rata-rata digunakan syntax

    subquery having SUM(sks) > ANY (select AVG(sks) from matakuliah)

    3.  Tampilkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama dengan

    dosen yang mengajar matakuliah dengan sks diatas rata-rata

    a.  Perintah SQL :

    b.  Output :

    c.  Pembahasan :

    Pada soal ini diminta menampilkan nim, nama, dan alamat mahasiswa yang tempat

    tinggalnya sama dengan dosen yang mengajar matakuliah dengan sks diatas rata-

    rata. Digunakan syntax select m.nim, m.nama, m.alamat yang diambil dari

    tabel mahasiswa. Dimana alamatnya sama dengan dosen yang mengajar

    matakuliah dengan sks diatas rata-rata. Untuk menampilkan data tersebut,

    diimplementasikan subquery yaitu where m.alamat IN(select d.alamat_dos

    from dosen d, matakuliah mk where d.kode_dos = mk.kode_dos AND sks

    > (select AVG(sks) from matakuliah)); dimana kode dosen pada tabel dosen

    sama dengan kode dosen pada tabel matakuliah dan untuk menyeleksi rata-ratanya

    diimplementasikan lagi subquerynya yaitu sks > (select AVG(sks) from

    matakuliah)

    select m.nim, m.nama, m.alamat

    from mhs mwhere m.alamat IN(select d.alamat_dosfrom dosen d, matakuliah mkwhere d.kode_dos = mk.kode_dosAND sks > (select AVG(sks) from matakuliah));

  • 8/19/2019 Laporan Modul VI Basis Data

    18/18

    Laporan Basis Data VI  | 17 

    VI. KESIMPULAN

      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.  Subquery dapat diklasifikasikan ke dalam tiga jenis :  scalar , multiple-row, dan

    multiple-column.

      Himpunan entitas di atas dapat direpresentasikan ke dalam diagram skema ( schema

    diagram)

      Operator komparasi yang digunakan pada subquery yaitu : IN, ANY / SOME, atau ALL. 

      Operator EXIST dan NOT EXIST digunakan pada correlated subquery untuk

    memeriksa apakah subquery mengembalikan hasil atau tidak.

    VII. DAFTAR RUJUKAN

      TIM Asdos UM. 2013. Modul VI Praktikum Basis Data. Malang. Universitas Negeri

    Malang.

      Fathansyah. 2012. Basis Data. Bandung: Informatika