Mochammad Yusa Sistem Basis Data 1 PRAKTIKUM 5 SISTEM BASIS DATA JOIN Praktikan Mengetahui Asisten Laboratorium NIM. NIM. A. TUJUAN Tujuan dari praktikum ini adalah: 1. Mampu menginputkan data dan record menggunakan SQL (Structured Query language) 2. Mampu mengoperasikan teknik Retrieving data dengan berbagai Klausa seperti WHERE, LIKE, dan Lain-lain. 3. Mampu mengubah maupun menghapus record atau data. B. ALAT DAN BAHAN Alat dan Bahan yang digunakan pada praktikum ini adalah: 1. Ms. SQL Server 2005 2. Sistem Operasi 3. Modul Laporan
Mochammad Yusa Sistem Basis Data 2 C. LANDASAN 1. Pengertian Fungsi Join Join merupakan sebuah operasi yang digunakan untuk mendapatkan data gabungan dari dua tabel atau lebih. Operasi ini digunakan dalam perintah SELECT dan biasanya dipakai untuk memperoleh data secara detail dari tabel-tabel yang saling terkait (memiliki relasi). Misalnya karena tabel jadwal_dokter hanya memuat kode dokter saja tanpa nama dokter, maka kita harus melakukan join dengan tabel dokter yang memuat nama dokter. Terdapat 3 jenis join yaitu : 1.1. Cross Join (Cartesian Join) Cross join menghasilkan output berupa kombinasi dari semua baris yang terdapat dalam tabel-tabel yang digabungkan baik yang berpasangan maupun yang tidak berpasangan. Pada kenyataannya join jenis ini jarang bahkan tidak pernah dipakai. Meskipun begitu, jenis join inilah yang merupakan dasar dari join antar tabel. Syntax SELECT tabel_1.kolom, tabel_2.kolom FROM tabel_1, tabel_2 atau SELECT tabel_1.kolom, tabel_2.kolom FROM tabel_1 CROSS JOIN tabel_2 1.2. Inner Join Inner join menghasilkan output berupa kombinasi baris-baris yang memiliki pasangan saja. Kombinasi baris yang tidak berpasangan akan dieliminasi atau tidak digunakan. Baris-baris yang tidak memiliki pasangan pada tabel lainnya juga tidak dimunculkan. Syntax SELECT tabel_1.kolom, tabel_2.kolom FROM tabel_1, tabel_2
Mochammad Yusa Sistem Basis Data 3 WHERE tabel_1.kolom_kunci_1=tabel_2.kolom_kunci_2 atau SELECT tabel_1.kolom, tabel_2.kolom FROM tabel_1 INNER JOIN tabel_2 ON tabel_1.kolom_kunci_1=tabel_2.kolom_kunci_2 1.3. Outer Join Outer join hampir sama dengan inner join, hanya saja baris yang tak memiliki pasangan tetap akan ditampilkan. Outer join dibagi menjadi tiga, yaitu: Operasi outer join terbagi menjadi tiga jenis yaitu : 1. Left outer join Data yang ada pada tabel sebelah kiri akan ditampilkan semua sesuai pasangannya, jika ada data yang tidak memiliki pasangan, pada tabel sebelah kanan akan diisikan NULL. 2. Right outer join Data yang ada pada tabel sebelah kanan akan ditampilkan semua sesuai pasangannya, jika ada data yang tidak memiliki pasangan, pada tabel sebelah kiri akan diisikan NULL. 3. Full outer join Semua data dari tabel-tabel yang di join ditampilkan, baik itu yang secara left outer join, right outer join maupun inner join. Syntax SELECT tabel_1.kolom, tabel_2.kolom FROM tabel_1 [LEFT RIGHT FULL OUTER JOIN] tabel_2 ON tabel_1.kolom_kunci_1=tabel_2.kolom_kunci_2 Contoh: Perintah untuk menggabungkan data tabel jadwal_dokter dengan tabel dokter SELECT * FROM jadwal_dokter INNER JOIN dokter ON jadwal_dokter.kd_dokter=dokter.kd_dokter
Mochammad Yusa Sistem Basis Data 4 Aktifkan database anda kemudian jalankan perintah berikut: SELECT * FROM dokter LEFT JOIN jadwal_dokter SELECT * FROM dokter RIGHT JOIN jadwal_dokter SELECT * FROM dokter FULL JOIN jadwal_dokter Coba bandingkan perintah di atas dengan perintah di bawah ini: SELECT * FROM jadwal_dokter LEFT JOIN dokter SELECT * FROM jadwal_dokter RIGHT JOIN dokter SELECT * FROM jadwal_dokter FULL JOIN dokter Untuk lebih memahami perbedaan antara berbagai jenis JOIN, coba jalankan perintahperintah di bawah ini: SELECT dokter.nama, jadwal_dokter.hari, jadwal_dokter.shift FROM dokter INNER JOIN jadwal_dokter SELECT dokter.nama, jadwal_dokter.hari, jadwal_dokter.shift FROM dokter LEFT JOIN jadwal_dokter
Mochammad Yusa Sistem Basis Data 5 SELECT dokter.nama, jadwal_dokter.hari, jadwal_dokter.shift FROM dokter RIGHT JOIN jadwal_dokter SELECT dokter.nama, jadwal_dokter.hari, jadwal_dokter.shift FROM dokter FULL JOIN jadwal_dokter Setelah menjalankan query di atas, ada terdapat beberapa persamaan dan perbedaan antara operasi join yang satu dengan lainnya. Yang menjadi kesamaannya ialah bahwa semua operasi join pasti menggabungkan beberapa tabel untuk mendapatkan data gabungan, sedangkan perbedaan antara cross join dengan jenis join lainnya adalah dengan ada tidaknya persyaratan atau pengecekan kondisi join. Cross join merupakan jenis join yang tidak memakai persyaratan, sementara jenis join lainnya memerlukan persyaratan. Persyaratan yang dimaksud adalah data pada kolom foreign key di tabel yang merujuk harus sama dengan data pada kolom primary key di tabel yang dirujuk. Secara umum persyaratan atau kondisi tersebut dapat dituliskan sebagai berikut: berikut: tabel_1.kolom_primary_key = tabel_2.kolom_foreign_key Sintaks tersebut dapat ditulis secara terbalik dan tetap memiliki arti yang sama, sebagai tabel_2.kolom_foreign_key = tabel_1.kolom_primary_key Catatan: Kolom-kolom_foreign_key pada tabel_2 harus mereferensi ke kolom_primary_key pada tabel_1. Karena keharusan adanya foreign key dan primary key yang saling berhubungan itu, maka inner join dan outer join hanya dapat dilakukan pada tabel yang memiliki relasi saja. Sementara itu, cross join dapat dilakukan pada sembarang tabel, baik tabel yang saling berhubungan maupun tidak.
Mochammad Yusa Sistem Basis Data 6 Untuk INNER JOIN terdapat 2 cara penulisan, yaitu: 1. Cara pertama adalah dengan memisahkan daftar tabel yang akan dijoin dengan tanda koma dan melakukan pengecekan kondisi menggunakan WHERE. 2. Cara kedua adalah menggunakan keyword INNER JOIN atau disingkat dengan JOIN saja di antara dua tabel yang akan di-join-kan dan melakukan pengecekan kondisi dengan keyword ON. Cara pertama lebih singkat dan akan lebih terasa jika yang di-joinkan lebih dari dua tabel. Hal ini terjadi karena keyword JOIN dan ON merupakan satu kesatuan yang hanya dapat diterapkan pada dua buah tabel saja. Untuk lebih dari dua tabel kita harus menuliskan JOIN dan ON berulang kali. Perhatikan contoh berikut: SELECT resep.kd_resep, pasien.nama, penyakit.penyakit FROM resep, pasien, penyakit WHERE resep.kd_pasien=pasien.kd_pasien AND resep.kd_penyakit=penyakit.kd_penyakit SELECT resep.kd_resep, pasien.nama, penyakit.penyakit FROM resep JOIN pasien ON resep.kd_pasien=pasien.kd_pasien JOIN penyakit ON resep.kd_penyakit=penyakit.kd_penyakit Walaupun penulisannya lebih panjang tapi bentuk yang kedua lebih dianjurkan karena membutuhkam memory yang lebih sedikit dan prosesnya lebih cepat. Hal ini akan terasa sekali jika melibatkan tabel-tabel dengan data yang banyak. Tidak seperti inner join, penulisannya hanya ada satu cara. Walaupun demikian kita dapat menyingkat dengan menghilangkan keyword OUTER, sehingga LEFT OUTER JOIN dapat disingkat menjadai LEFT JOIN dan seterusnya. 2. Alias Tabel Alias tabel merupakan cara yang digunakan untuk mempersingkat penulisan nama-nama tabel. Alias tabel berarti mengganti nama tabel dengan nama yang lebih singkat (biasanya kode
Mochammad Yusa Sistem Basis Data 7 huruf). Biasa dipakai untuk menampilkan beberapa kolom dari beberapa tabel yang akan dijoinkan, sehingga mempermudah dan mempercepat dalam penulisannya. Sintaks yang biasa digunakan: SELECT * FROM tabel_1 a INNER JOIN tabel_2 b ON tabel_1.kolom_kunci_1= tabel_2.kolom_kunci_2 Contoh: Menampilkan nama dokter dengan jadwal praktiknya SELECT a.nama, b.hari, b.shift FROM dokter a INNER JOIN jadwal_dokter b ON a.kd_dokter=b.kd_dokter 3. Query Bersarang (Nested Query) Pada kondisi tertentu, terkadang beberapa query membutuhkan nilai yang dihasilkannya dan digunakan sebagai kondisi pembandingan (dalam klausa WHERE sebagai contoh). Query tersebut dapat diformulasikan menggunakan nested query (query bersarang). Query bersarang akan melibatkan query dan subquery. Subquery merupakan statement SELECT yang bersarang didalam klausa WHERE dari statement SELECT yang lain. Meskipun jarang, tetapi subquery juga bisa terdapat pada statement DML yang lain seperti INSERT, UPDATE ataupun DELETE. Secara umum, sintaks dari NESTED QUERY adalah: SELECT [DISTINCT] select_list FROM table1, table_2 [,table_3 ] WHERE {expression {[NOT] IN comparison operator} [NOT] EXIST } ( SELECT [DISTINCT] subquery_select_list FROM table_list WHERE search_conditions )
Mochammad Yusa Sistem Basis Data 8 Didalam sebuah SELECT statement, subquery boleh berada pada klausa-klausa berikut ini: a) Klausa WHERE b) Klausa HAVING c) Klausa FROM Sebagai catatan, subquery pada klausa WHERE sering disebut sebagai nested subquery. Sedangkan subquery pada klausa FROM sering disebut dengan istilah inline view. Banyak permasalahan yang dapat dipecahkan dengan menggunakan subquery. Daftar berikut ini menunjukkan beberapa kegunaan subquery: a) Memberikan nilai sebagai kondisi di dalam klausa WHERE dan HAVING. b) Mendefinisikan sebuah tabel (inline view) yang digunakan oleh query utama (subquery pada klausa FROM dari sebuah SELECT statement). c) Menentukan sekumpulan baris data yang dimasukkan ke dalam tabel tujuan, baik ke dalam tabel yang sudah ada (subquery pada INSERT statement) maupun pada saat yang bersamaan dengan pembuatan tabel (subquery pada CREATE TABLE statement). d) Mendapatkan satu nilai atau lebih yang digunakan untuk mengubah data yang sudah ada (subquery pada UPDATE statement). Contoh : SELECT A1 FROM A WHERE A1 IN (SELECT C3 FROM C) Atau SELECT K.NIM, (SELECT M.NAMA FROM MAHASISWA M WHERE K.NIM = M.NIM) AS NAMA, K.IDKELAS, K.NILAI FROM KRS K 4. Fungsi Join dengan Fungsi Agregasi Fungsi join dengan gabungan fungsi agregasi, pada dasarnya adalah gabungan dari beberapa fungsi statistik (agregasi) dalam bahasa basis data yang datanya diambil dari kolomkolom tertentu. Kolom bisa berasal dari tabel yang berbeda-beda. Contoh :
Mochammad Yusa Sistem Basis Data 9 SELECT d.nama, COUNT(jd.kd_dokter)*120000 as Honor_Bulanan FROM dokter d JOIN jadwal_dokter jd ON d.kd_dokter=jd.kd_dokter GROUP BY d.nama D. Praktikum 1. Buatlah perintah untuk menampilkan jadwal dokter (nama dokter, hari, shift) 2. Buatlah perintah untuk menampilkan nama dokter yang praktiknya hari selasa 3. Buatlah perintah untuk menampilkan nama dokter dengan tanggal periksa 3 Agustus 2006 4. Buatlah perintah untuk menampilkan nama pasien dan penyakitnya yang diperiksa hari senin 5. Buatlah perintah untuk menggabungkan data tabel resep dengan tabel dokter (pasien, penyakit, dan obat). 6. Buatlah perintah untuk menampilkan data resep (kode resep, hari, tanggal, nama pasien, nama penyakit, nama obat, nama dokter periksa) 7. Buatlah perintah untuk menampilkan data resep (kode resep, hari, tanggal, nama pasien, nama penyakit, nama obat, nama dokter periksa) 8. Buatlah perintah untuk menampilkan nama dokter yang praktiknya hari jumat dan sabtu 9. Buatlah perintah untuk menampilkan nama pasien yang diperiksa tanggal 5 Agustus 2006
Mochammad Yusa Sistem Basis Data 10 Answer Sheet or Notes: 1.