Modul Praktikum Sistem Basis Data
BAB 5
MENAMPILKAN DATA DARI BANYAK TABEL
TUJUAN BELAJAR: • • •
Dapat menulis statement SELECT yang mengakses data ke lebih dari satu tabel dengan menggunakan operator JOIN. Menampilkan data yang tidak memenuhi kondisi JOIN dengan menggunakan operator OUTER JOIN. Melakukan JOIN terhadap tabel itu sendiri (self join).
5.1 PENGGABUNGAN TABEL DENGAN JOIN Perintah SELECT sederhana pada SQL merupakan perintah untuk memilih satu atau lebih kolom yang terdapat pada satu tabel. Kesulitan meningkat adalah ketika perintah SELECT menggunakan tabel sebanyak dua atau lebih tabel sebagai sumber data yang ingin ditampilkan. Hal ini membuat banyak kemungkinan mengenai hasil akhir yang di dapat. Ada dua tipe penggabungan tabel pada perintah SQL: 1. Inner join 2. Outer join Kedua tipe penggabungan tersebut akan dijelaskan secara detail pada bagian di bawah ini.
5.1.1 INNER JOIN
Inner join adalah bentuk penggabungan yang paling sering digunakan pada perintah SQL. Inner join dapat diklasifikasikan ke dalam bentuk: 5.1.1.1 Equi-Join Bentuk ini digunakan ketika dua tabel digabungkan berdasarkan kesamaan kolom yang telah ditentukan. Penggunaan equi-join ini sebenarnya sama dengan Cartesian product. Misalnya dari relasi berikut. Student
Department
Gambar 5.1 Contoh record pada relasi student dan department
Apaila kita ingin menampilkan nama siswa beserta nama program studi, dengan melakukan join pada relasi student dan department pada atribut dept_name yang sama-sama ada pada relasi student dan department, maka query equi-join yang kita berikan sebagai berikut:
25
Fakultas Ilmu Komputer Universitas Brawijaya
Modul Praktikum Sistem Basis Data SELECT student.name, department.dept_name FROM student, department WHERE student.dept_name=department.dept_name
Gambar 5.2 Hasil equi-join yang berasal dari relasi student dan department
5.1.1.2 Menggunakan JOIN ON Join On merupakan operasi inner join pada dua tabel atau lebih. Pada operasi inner join kita juga bisa menambahkan klausa WHERE. Misalnya kita ingin menampilkan nama siswa beserta nama program studi, dengan melakukan join pada relasi student dan department pada atribut dept_name yang sama-sama ada pada relasi student dan department, dengan syarat hanya nama program studi ”Accounting” yang ditampilkan, maka query equi-join yang kita berikan sebagai berikut: SELECT student.name, department.dept_name FROM student join department ON student.dept_name=department.dept_name WHERE department.dept_name='Accounting';
Gambar 5.3 Hasil join on
5.1.1.3 Menggabungkan Lebih Dari Dua Tabel Untuk menggabungkan lebih dari 2 tabel, kita bisa menggunakan query seperti berikut. Misalnya kita ingin menampilkan nama siswa (name), nama program studi (dept_name), dan course_id dengan melakukan join pada relasi student, department dan course, atribut dept_name adalah atribut yang sama-sama ada pada ketiga relasi tersebut. SELECT A.name, B.dept_name, C.course_id FROM student A, department B, course C WHERE A.dept_name=B.dept_name and C.dept_name=B.dept_name
26
Fakultas Ilmu Komputer Universitas Brawijaya
Modul Praktikum Sistem Basis Data
Gambar 5.4 Hasil join 3 tabel
5.1.1.4 Cross Join Cross join merupakan penggabungan dari tabel menggunakan metode Cartesian product sederhana, contohnya adalah sebagai berikut. SELECT * FROM student, department
Gambar 5.5 Hasil cross join
5.1.2 OUTER JOIN
Outer join merupakan bentuk penggabungan khusus yang digunakan pada perintah SQL. Pada outer join, tabel pertama yang ditentukan pada perintah SQL pada klausa FROM, ditandai sebagai tabel KIRI dan tabel selain itu ditandai sebagai tabel KANAN. Outer join dibagi menjadi tiga tipe yaitu left, right, dan full outer join.
27
Fakultas Ilmu Komputer Universitas Brawijaya
Modul Praktikum Sistem Basis Data
Gambar 5.6 Perbedaan tipe outer join
5.1.2.1 LEFT OUTER JOIN Pada left outer join, hasil akhir merupakan perpaduan (union) dari hasil akhir equijoin, termasuk beberapa baris dari tabel KIRI yang tidak cocok. Berikut merupakan contoh query serta pengembaliannya dari left outer join:
SELECT * FROM course left outer join prereq ON course.course_id=prereq.course_id
Gambar 5.7 Hasil Left Outer Join
28
Fakultas Ilmu Komputer Universitas Brawijaya
Modul Praktikum Sistem Basis Data 5.1.2.2 RIGHT OUTER JOIN Pada right outer join, hasil akhir merupakan perpaduan (union) dari hasil akhir equijoin, termasuk beberapa baris dari tabel KANAN yang tidak cocok. Berikut merupakan contoh query serta pengembaliannya dari right outer join: SELECT * FROM course right outer join prereq ON course.course_id=prereq.course_id
Gambar 5.8 Hasil right outer join
5.1.2.3 FULL OUTER JOIN Pada full outer join, hasil akhir merupakan perpaduan (union) dari hasil akhir equi-join, termasuk beberapa baris dari tabel KANAN dan KIRI yang tidak cocok. Berikut merupakan contoh query serta pengembaliannya dari full outer join: SELECT * FROM course full outer join prereq ON course.course_id=prereq.course_id
Gambar 5.9 Hasil full outer join
5.1.3 SELF JOIN 29
Fakultas Ilmu Komputer Universitas Brawijaya
Modul Praktikum Sistem Basis Data Terkadang sebuah tabel perlu di-join-kan dengan tabel itu sendiri. Pendekatan self join jarang sekali digunakan. Kata kunci self join bisa menggunakan alias, pada relasi takes. SELECT * FROM takes A join takes B ON A.ID=B.ID and A.course_id=B.course_id WHERE A.ID=10033 and A.course_id=338 and A.year < B.year
Contoh query di atas digunakan untuk mencari kuliah dengan course_id 338 yang diambil oleh siswa dengan ID 10033 (tabel takes dengan alias A) dan diambil ulang pada semester/tahun berikutnya (tabel takes dengan alias B).
Gambar 5.10 Contoh hasil self join
5.2 LATIHAN 1. Tampilkan semua nama student beserta nama department. 2. Tampilkan semua nama student beserta nama department yang memiliki total SKS (total credit) lebih dari 100. 3. Tampilkan nama student dan nama instructor yang bekerja pada department yang sama
30
Fakultas Ilmu Komputer Universitas Brawijaya