Modul Basis Data 4 - Join
Modul Basis Data 4 - Join
A. TUJUAN
Memahami keterhubungan entitas di dalam basis data.
Memahami jenis-jenis operasi pengambilan data di beberapa entitas.
Mampu menyelesaikan kasus-kasus retrieval yang melibatkan lebih dari satu
entitas.
Memahami fungsi Union pada mysql.
B. PETUNJUK
- Awali setiap aktivitas dengan do'a, semoga berkah dan mendapat kemudahan.
- Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
- Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
- Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.
C. DASAR TEORI
1. Relationship
Relationship adalah suatu hubungan antara beberapa entitas. Konsep ini sangat
penting sekali di dalam basis data, di mana memungkinkan entitas- entitas untuk
saling berhubungan satu sama lain.
2. Join
Join merupakan salah satu konstruksi dasar dari SQL dan basis data. Join dapat
didefinisikan sebagai kombinasi record dari dua atau lebih tabel di dalam basis
data relasional dan menghasilkan sebuah tabel (temporary) baru—yang disebut
sebagai joined table.
Join dapat diklasifikasikan ke dalam dua jenis, yaitu inner join dan outer join.
a. Inner Join
Inner join pada dasarnya adalah menemukan persimpangan (intersection)
antara dua buah tabel.
Misalkan terdapat tabel A dan B, maka hasil inner join dapat diperlihatkan—
sebagai bidang terarsir—dalam diagram Venn seperti Gambar 1.
b. Outer Join
Outer join dibagi ke dalam tiga jenis, yaitu left outer join, right outer join, dan
full outer join.
Left outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 2.
Gambar 2. Left Outer Join
Right outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 3.
Selain empat jenis join yang utama di atas, masih ada beberapa variasi join
lainnya, seperti CROSS JOIN (cartesian product), NATURAL JOIN, dan
sebagainya.
3. Union
MySQL Union adalah statemen yang mengkombinasikan dua buah atau lebih
resultset dari beberapa table dengan statemen SELECT sehingga menjadi satu
buah resulset. Union Statemen memiliki beberapa ketentuan sebagai berikut.
a. Jumlah kolom/field dari setiap statemen SELECT harus sama.
b. Tipe data kolom/field dari setiap statemen SELECT harus kompatibel.
Secara default Statemen UNION akan menghapus semua record duplikat dari
resultset. Apabila Anda ingin record duplikat tetap di tampilkan maka pada resultset
tuliskan secara explisit UNION ALL. Perbedaan Union dan Union All dapat
dijelaskan pada gambar diagram Venn 5 dan 6.
Gambar 5. Union
SELECT
FROM r1A1,A2, ...An
UNION ALL
SELECT A1,A2, ...An
FROM r2;
D. LATIHAN
1. Relationship
Dalam latihan ini digunakan dua buah tabel bernama karyawan dan departemen
dengan relationship bekerja pada. Struktur tabelnya diperlihatkan sebagai
berikut:
2. Inner Join
Sebagaimana dijelaskan, inner join akan mengembalikan data di tabel A dan B yang
sesuai. Sebagai contoh, untuk mendapatkan data karyawan yang memiliki
departemen, eksekusi pernyataan atau perintah SQL berikut:
SELECT *
FROM karyawan INNER JOIN departemen
ON karyawan.id_dep = departemen.id_dep;
Selain itu, dapat pula menggunakan bentuk implisit dari inner join di atas, yaitu
sebagai berikut :
Dalam pengambilan data ini, kita juga bisa menspesifikasikan field terkait.
Sebagai contoh, untuk mengambil nama karyawan dan nama departemen yang
ditempatinya saja, eksekusi perintah SQL berikut :
Perhatikan bahwa untuk menampilkan field tertentu saja, maka nama field
tersebut harus disebutkan secara eksplisit beserta nama tabel tempat field.
Agar penulisan SQL lebih efisien, kita dapat memanfaatkan fitur “derived table”
(atau alias). Contohnya adalah sebagai berikut :
Pada pernyataan SQL di atas, tabel karyawan dinotasikan dengan huruf k dan
tabel departemen menggunakan huruf d. Perhatikan hasil eksekusi perintah SQL
tersebut, apakah sama dengan hasil eksekusi perintah SQL sebelumnya (yang
tidak menggunakan fitur (derived table) ?.
3. Outer Join
SELECT *
FROM karyawan k LEFT OUTER JOIN departemen d ON
k.id_dep = d.id_dep;
Perhatikan baris kedua dan keempat pada hasil eksekusi di atas, apa yang
menyebabkan timbulnya NULL value?
Apabila diperlukan, kita juga dapat menggunakan klausa WHERE di dalam join.
Sebagai contoh, untuk mendapatkan data karyawan yang tidak memiliki
departemen, eksekusi perintah SQL berikut :
SELECT *
FROM karyawan k LEFT OUTER JOIN departemen d ON
k.id_dep = d.id_dep
WHERE d.id_dep IS NULL;
Dari hasil eksekusi di atas, dapat kita ketahui bahwa karyawan yang bernama
Budi dan Dani tidak memiliki departemen (nama departemennya tidak tercatat di
dalam tabel departemen).
SELECT *
FROM karyawan k RIGHT OUTER JOIN departemen d ON
k.id_dep = d.id_dep;
Perhatikan kembali baris kedua dan keempat pada hasil eksekusi di atas, apa yang
menyebabkan timbulnya NULL value?
SELECT *
FROM karyawan k LEFT OUTER JOIN departemen d ON
k.id_dep = d.id_dep
UNION SELECT *
FROM karyawan k RIGHT OUTER JOIN departemen d ON
k.id_dep = d.id_dep;
Cross Join
Cross join pada hakekatnya merupakan inner join di mana kondisi join selalu
dievaluasi true. Secara matematis, jika A dan B merupakan dua himpunan, maka
cross join-nya sama dengan X .
SELECT *
FROM karyawan CROSS JOIN departemen;
4. UNION
Buatlah tabel baru bernama karyawan2 pada database yang sama. Data tabelnya
adalah sebagai berikut.
nama id_dep
Dani 17
Anisa 18
Bagus 12
Lakukan perintah yang sama namun menggunakan UNION ALL. Jelaskan apa
perbedaan fungsi UNION dan UNION ALL.
E. TUGAS PRATIKUM
Perhatikan, dalam mengerjakan tugas praktikum ini, sebaiknya pernyataan SQL
disimpan di file untuk kemudian dieksekusi.
Tugas praktikum ini menggunakan tabel-tabel yang sudah dibuat sebelumnya. Berikut
adalah data-data tabel yang akan digunakan (sesuaikan nilainya agar sama persis).
Tabel mahasiswa.
Tabel ambil_mk
Nim kode_mk
101 PTI447
103 TIK333
104 PTI333
104 PTI777
111 PTI123
123 PTI999
Tabel Matakuliah
F. TUGAS RUMAH
1. Buatlah database baru dengan nama Universitas. Lalu didalamnya terdapat tabel-
tabel berikut :
Tabel Instruktur
Tabel Matakuliah
Table Kuliah
a. Tampilkan Nomor dan mata kuliah yang pesertanya lebih dari 40 orang.
b. Tampilkan nip dan nama instruktur yang mengajar mata kuliah 'Basis
Data'
c. Tampilkan Total jumlah total mahasiswa yang Diajar oleh 'Steve
Wozniak' menggunakan JOIN.
Tabel Orders
Gabungkan kedua tabel itu menggunakan JOIN dan UNION sehingga menjadi
seperti di bawah ini.
Selamat Mengerjakan!