Anda di halaman 1dari 52

MODUL V

RELASI & JOIN

A. TUJUAN

➢ Memahami keterhubungan entitas di dalam basis data.

➢ Memahami jenis-jenis operasi pengambilan data di beberapa entitas.

➢ Mampu menyelesaikan kasus retrieval yang melibatkan lebih dari satu entitas.

➢ Memahami fungsi Union pada mysql.

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

Didalam sebuah relationship, primary key memiliki peran penting untuk

mengaitkan entitas. Selain itu, primary key juga digunakan untuk mendefinisikan

batasan keterhubungan.

2. Join

Join merupakan salah satu kontruksi dasar dari SQL dan basis data. Join dapat

didefinisikan sebagai kombinasi record dari dua atau lebih table di dalam basis data

relasional dan menghasilkan sebuah tabel (temporary) baru yang disebut sebagai
joined tabel.

Join dapat diklarifikasikan 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. ipe join ini akan mengambil semua row dari table asal dan table tujuan
dengan kondisi nilai key yang terkait saja - jika ada, dan jika tidak maka row tersebut
tidak akan muncul.

Kalau tidak terdapat kondisi key terkait antar table, maka semua row dari kedua table
dikombinasikan.

Sintaks inner join diperlihatkan sebagai berikut :

Inner join juga dapat direpresentasikan dalam bentuk implisit sebagai berikut :

Misalkan terdapat table A dan B, maka hasil inner join dapat diperlihatkan sebagai
bidang terasir 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

Left outer join atau left join mengembalikan semua nilai dari table kiri ditambah
dengan nilai dari tabel kanan yang sesuai atau NULL jika tidak ada nilai yang
sesuai.

Sintaks left outer join diperlibatkan sebagai berikut :

Left outer join antar tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 2.

Right Outer Join


Right outer atau right join pada dasarnya sama seperti left join, namun
dalam bentuk terbalik, kana dan kiri.
Sintaks right outer join diperhatikan sebagai berikut :

Right outer join antara table A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 3.

Full outer join

Full outer join atau full join pada hakikatnya merupakan kombinasi dari left dan
right join.

Sintaks full outer join diperlihatkan sebagai berikut :


Bentuk visual dari full outer join dapat diperlihatkan menggunakan
diagram Venn seperti Gambar 4.

Selain empat jenis join yang utama di atas, masih ada beberapa variasi join
lainnya, seperti CROSS JOIN (cartesian product), NATURAL JOIN dan
sebagainya.

Perlu juga diperhatikan, join bisa diimplementasikan dalam bentuk bersarang


(nested join). Jadi, di dalam sebuah operasi join bisa terdapat operasi join lainnya

3. Union .

MySQL Union adalah statemaen yang mengkombinasikan dua buah atau lebih
resulset 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
resulset. Apabila Anda ingin record duplikat tetap di tampilkan maka pada
resulset tuliskan secara explisit UNION ALL. Perbedaan Union dan Union All
dapat dijelaskan pada gambar diagram Venn 5 dan 6.
Fungsi Union sendiri dapat dijalankan dengan sintaks sebagai berikut :
I. Latihan
1. Relationship
Dalam latihan ini digunakan dua buah table bernama karyawan dan
departemen dengan relationship bekerja pada. Struktur tabelnya
diperlihatkan sebagai berikut :

CREATE TABLE karyawan( Nama varchar(30) NOT NULL, id_dep


int(5) NOT NULL
)ENGINE = MyISAM;

CREATE TABLE departemen( id_dep int(5) NOT NULL, nama_dep


varchar(30) NOT NULL, PRIMARY KEY(id_dep)
)ENGINE = MyISAM;

Data yang digunakan adalah sebagai berikut :


id_dep nama_dep
Table Karyawan 10 Penelitian
Tabel Departemen 11 Pemasaran
12 SDM
nama id_dep 13 Keuangan
Agus 10
Budi 16
Citra 12
Dani 17

Proses 1 :

Hasil 1 :

Proses tabel karyawan:


Hasil akhir table karyawan :

Proses table departemen :

Hasil akhir table departemen :

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;

nama id_dep id_dep nama_dep


Agus 10 10 Penelitian
Citra 12 12 SDM

Selain itu, dapat pula menggunakan bentuk implisit dari inner join di atas,
yaitu sebagai berikut :

SELECT * FROM karyawan, departemen WHERE karyawan.id_dep =


departemen.id_dep;

Bandingkan hasil eksekusi perintah SQL yang menggunakan INNER


JOIN dengan yang menggunakan bentuk implisitnya !

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 :

SELECT karyawan.nama, departemen.nama_dep FROM karyawan


INNER JOIN departemen ON karyawan.id_dep =
departemen.id_dep

nama nama_dep
Agus Penelitian
Citra SDM

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 :

SELECT k.nama, d.nama_dep FROM karyawan k INNER JOIN


departemen d ON k.id_dep = d.id_dep

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) ?

Proses Inner Join :

Hasil Inner Join :

Proses bentuk implisit dari inner join :

Hasil bentuk implisit dari inner join :


Perbandingan antara perintah SQL menggunakan INNER JOIN dengan
yang menggunakan bentuk implisitnya hanya terlrtak pada penulisannya
saja. Eksekusi perintah SQL yang menggunakan INNER JOIN menyatakan
syarat dengan operator dasar ON. Sedangkan perintah SQL yang
menggunakan bentuk implisitnya menyatakan syarat dengan operator dasar
WHERE.

Proses untuk menspesifikasikan field terkait dengan mengambil nama


karyawan dan nama departemen yang ditempatinya saja :

Hasil untuk menspesifikasikan field terkait dengan mengambil nama


karyawan dan nama departemen yang ditempatinya saja :
Proses memanfaatkan fitur “derived table” (atau alias) :

Hasil memanfaatkan fitur “derived table” (atau alias) :

Pada pernyataan SQL di atas, table karyawan dinotasikan dengan huruf k


dan tabel departemen menggunakan huruf d. Diperoleh hasil yang sama
dengan hasil eksekusi perintah SQL sebelumnya (yang tidak menggunakan
fitur (derived table).

3. Outer Join
Left Outer Join
Contoh penggunaan LEFT OUTER JOIN adalah sebagai berikut :

SELECT * FROM karyawan k LEFT OUTER JOIN departemen d ON


k.id_dep = d.id_dep;

nama id_dep id_dep nama_dep


Agus 10 10 Penelitian
Budi 16 NULL NULL
Citra 12 12 SDM
Dani 17 NULL NULL
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;

nama id_dep id_dep nama_dep


Budi 16 NULL NULL
Dani 17 NULL 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).

Right Outer Join


Contoh penggunaan RIGHT OUTER JOIN adalah sebagai berikut :

SELECT * FROM karyawan k RIGHT OUTER JOIN departemen d ON


k.id_dep = d.id_dep;

nama id_dep id_dep nama_dep


Agus 10 10 Penelitian
Citra 12 12 SDM
NULL NULL 11 Pemasaran
NULL NULL 13 Keuangan

Perhatikan kembali baris kedua dan keempat pada hasil eksekusi di atas,
apa yang menyebabkan timbulnya NULL value ?
Full Outer Join
Beberapa DBMS tidak mendukung fungsionalitas full outer join. Meski
demikian, join ini dapat disimulasikan dengan memanfaatkan UNION.
Tekniknya ialah dengan menggabung left join dan right join seperti
perintah SQL berikut :

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;

nama id_dep id_dep nama_dep


Agus 10 10 Penelitian
Budi 16 NULL NULL
Citra 12 12 SDM
Dani 17 NULL NULL
NULL NULL 11 Pemasaran
NULL NULL 13 Keuangan

Cross Join
Cross join pada hakikatnya merupakan inner join dimana kondisi join
selalu dievaluasi true. Secara matematis, jika A dan B merupakan dua
himpunan, maka cross join-nya sama dengan X.
Contoh penggunaan CROSS JOIN adalah sebagai berikut :

SELECT * FROM karyawan CROSS JOIN departemen;

Atau dalam bentuk implisitnya :

SELECT * FROM karyawan, departemen;

nama id_dep id_dep nama_dep


Agus 10 10 Penelitian
Budi 16 10 Penelitian
Citra 12 10 Penelitian
Dani 17 10 Penelitian
Agus 10 11 Pemasaran
Budi 16 11 Pemasaran
Citra 12 11 Pemasaran
Dani 17 11 Pemasaran
Agus 10 12 SDM
Budi 16 12 SDM
Citra 12 12 SDM
Dani 17 12 SDM
Agus 10 13 Keuangan
Budi 16 13 Keuangan
Citra 12 13 Keuangan
Dani 17 13 Keuangan

Proses Left Outer Join :

Hasil Left Outer Join :

Pada baris kedua dan keempat pada hasil eksekusi di atas, bernilai NULL
value karena, fungsi dari Left Outer Join untuk menampilkan seluruh
table yang ada di table sebelah kiri yaitu table karyawan, jadi data dari
Budi dengan id_dep 16 dan Dani dengan id_dep 17 ada pada table sebelah
kiri yaitu table karyawan sehingga ikut ditampilkan. Sedangkan untuk
id_dep yang ada pada table departemen tidak memuat angka 16 dan 17,
dengan demikian maka hasil dari id_dep serta nama_dep yang berada pada
table departemen bernilai NULL untuk data id_dep 16 dan 17, sehingga
apabila di proses dalam SQL tersebut nilai yang memuat id_dep 16 dan 17
bernilai NULL.

Proses menggunakan klausa WHERE untuk mendapatkan data


karyawan yang tidak memiliki departemen :

Hasil menggunakan klausa WHERE untuk mendapatkan data


karyawan yang tidak memiliki departemen :

Proses Right Outer Join :

Hasil Right Outer Join :


Baris kedua dan keempat pada hasil eksekusi di atas, bernilai NULL
karena, fungsi dari Right Outer Join untuk menampilkan seluruh table
yang ada di table sebelah kanan yaitu table departemen, jadi data dari
id_dep 11 dan 13 ada pada table sebelah kana yaitu table departemen
sehingga ikut ditampilkan. Sedangkan untuk id_dep yang ada pada table
karyawan tidak memuat angka 11 dan 13, dengan demikian maka hasil dari
id_dep serta nama yang berada pada table karyawan bernilai NULL untuk
data id_dep 11 dan 13, sehingga apabila di proses dalam SQL tersebut nilai
yang memuat id_dep 11 dan 13 bernilai NULL.

Proses Full Outer Join :

Hasil Full Outer Join :


Proses Cross Join :

Hasil Cross Join :


Proses bentuk implisit Cross Join :

Hasil bentuk implisit Cross Join :


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

Setelah itu coba lakukan penggabungan dengan perintah :

SELECT nama, id_dep FROM karyawan UNION SELECT nama, id_dep


FROM karyawan2;
nama id_dep
Agus 10
Budi 16
Citra 12
Dani 17
Anisa 18
Bagus 12

Lakukan perintah yang sama namun menggunakan UNION ALL. Jelaskan


apa perbedaan fungsi UNION dan UNION ALL.

Proses 1 tabel karyawan2:

Proses 2 tabel karyawan 2 :

Hasil akhir table karyawan:

Proses Union :
Hasil Union :

II. Tugas Praktikum


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

Tabel Matakuliah
kode_m nama_mk sks semester
k
PTI447 Praktikum Basis Data 1 3
TIK342 Praktikum Basis Data 1 3
PTI333 Basis Data Terdistribusi 3 5
TIK123 Jaringan Komputer 2 5
TIK333 Sistem Operasi 3 5
PTI123 Grafika Multimedia 3 5
PTI777 Sistem Informasi 2 3

1. Dapatkan banyak mahasiswa yang tidak mengambil matakuliah.


Selesaikan dengan pendekatan join eksplisit dan implisit.
a. Source code
Pendekatan Join Eksplisit :
SELECT COUNT(*) AS tidak_ambil FROM mahasiswa LEFT OUTER
JOIN ambil_mk ON mahasiswa.Nim = ambil_mk.nim WHERE
ambil_mk.nim IS NULL;
b. Screenshoot
Proses Pendekatan Join Eksplisit :

Hasil Pendekatan Join Eksplisit :


c. Analisis :
Dari table mahasiswa dan table ambil_mk yang sudah
terbentuk sebelumnya, untuk mendapatkan data banyak mahasiswa
yang tidak mengambil matakuliah, dengan pendekatan join eksplisit,
maka menggunakan SQL SELECT COUNT(*) AS tidak_ambil
FROM mahasiswa LEFT OUTER JOIN ambil_mk ON
mahasiswa.Nim = ambil_mk.nim WHERE ambil_mk.nim IS NULL;.
Komponen select digunakan untuk pemanggilan data dimana
ketentuan yaitu LEFT OUTER JOIN dengan memroses semua data
yang ada pada table mahasiswa karena merupakan table sebelah kiri.
Dengan syarat mahasiswa.Nim = ambil_mk.nim, sehingga meproses
semua field nim pada table mahasiswa dan mencocokkan field nim
yang ada pada table ambil_mk. Karena nim 102,105,106, dan 107
pada table mahasiswa tidak mendapat kecocokan nim dengan yang ada
pada table ambil_mk, dapat disimpulkan 4 nim tersebut tidak
mengambil matakuliah. Maka yang ditampilkan dalam hasil field
tidak_ambilmk berjumlah 4 nim yaitu 102,105,106, dan 107, dengan
fungsi COUNT(*) AS tidak_ambil. Count untuk proses pengembalian
jumlah banyaknya kemunculan data yang sesuai dengan syarat dan
ketentuan, serta membentuk field baru yaitu tidak_ambilmk untuk
menampung hasil count dalam SQL tersebut .
IMPLISIT
Source code :
SELECT DISTINCT tb_mahasiswa.NIM, FROM tb_mahasiswa,
tb_ambil_mk
WHERE tb_mahasiswa.nim=tb_ambil_mk.nim
Screen shot :
Proses 1
Proses 2

Analisis :
Implisit : hanya berisi daftar tabel untuk bergabung, dalam klausa
FROM dari pernyataan SELECT, menggunakan koma untuk
memisahkannya, klausa WHERE tambahan mungkin berlaku sebagai
filter-predikat. Hasil dari implisit join yang menyertakan kriteria NIM
dan nama sama dengan hasil dari eksplisit join, perbedaan juga hanya
terletak pada penulisannya saja. Dari pernyataan implisit join tersebut
menampilkan hasil yang sama dengan pernyataan eksplisit join yaitu
adalah 3. Perbedaan hanya cara penulisannya saja, apabila eksplisit
menggunakan ON sedangkan implisit menggunakan klausa WHERE.

2. Kelompokan data mahasiswa yang mengambil matakuliah berdasarkan


jenis kelaminnya, kemudian hitung banyaknya.
a. Source code
SELECT jenis_kelamin, COUNT(*) AS jumlah FROM mahasiswa m
INNER JOIN ambil_mk a ON m.Nim = a.nim GROUP BY
jenis_kelamin;
b. Screenshoot
Proses :

Hasil :

c. Analisis :
Dari table mahasiswa dan table ambil_mk yang sudah
terbentuk sebelumnya, untuk mendapatkan banyaknya kelompokan
data mahasiswa yang mengambil matakuliah berdasarkan jenis
kelaminnya, maka menggunakan SQL SELECT jenis_kelamin,
COUNT(*) AS jumlah FROM mahasiswa m INNER JOIN ambil_mk
a ON m.Nim = a.nim GROUP BY jenis_kelamin;. Komponen select
digunakan untuk pemanggilan data dimana ketentuan yaitu INNER
JOIN dengan menemukan persimpangan (intersection) pada field nim
antara table mahasiswa dengan table ambil_mk dan
mengelompokkannya berdasarkan jenis kelamin yang ada pada table
mahasiswa. Maka yang ditampilkan dalam hasil ialah field
jenis_kelamin yaitu ‘L’ dan ‘P’ dengan jumlahnya masing-masing
sesuai persimpangan uang terbentuk. Hasil dapat memuat penjumlahan
karena dalam SQL terdapat COUNT(*) AS jumlah. Count untuk
proses penjumlahan data yang sesuai dengan syarat dan ketentuan,
serta membentuk field baru yaitu jumlah untuk menampung hasil
count dalam SQL tersebut.

3. Dapatkan nama mahasiswa yang mengambil matakuliah beserta


kode_mk dan nama_mk yang diambilnya. Selesaikan dengan
pendekatan join eksplisit dan implisit.
Pendekatan Join Eksplisit :
a. Source code
SELECT a.nim, m.nama, a.kode_mk, k.nama_mk FROM
mahasiswa m INNER JOIN ambil_mk a INNER JOIN matakuliah
k ON m.Nim = a.nim AND a.kode_mk = k.kode_mk;
b. Screenshoot
Proses :

Hasil :

c. Analisis :
Dari table mahasiswa dan table ambil_mk serta table matakuliah yang
sudah terbentuk sebelumnya, untuk mendapatkan nama mahasiswa
yang mengambil matakuliah beserta kode_mk dan nama_mk yang
diambilnya, dengan pendekatan join eksplisit. Maka menggunakan
SQL SELECT a.nim, m.nama, a.kode_mk, k.nama_mk FROM
mahasiswa m INNER JOIN ambil_mk a INNER JOIN matakuliah k
ON m.Nim = a.nim AND a.kode_mk = k.kode_mk;. Komponen select
digunakan untuk pemanggilan data dimana ketentuan yaitu INNER
JOIN dengan menemukan persimpangan (intersection) pada field nim
yang berada di table mahasiswa dengan yang ada pada table ambil_mk
kemudian proses menemukan persimpangan (intersection) lagi pada
field kode_mk yang berada di tabel ambil_mk dengan yang ada pada
tabel matakuliah. Dan sebelumnya sudah terdapat deklarasi berupa
a.nim, m.nama, a.kode_mk, k.nama_mk yang berarti tabel hasil akan
menampilkan field nim hasil dari persimpangan antara tabel
mahasiswa dan tabel ambil_mk, lalu menampilkan field nama yang
terdapat pada tabel mahasiswa, kemudian menampilkan field kode_mk
yang merupakan hasil persimpangan dari tabel ambil_mk dan tabel
matakuliah, yang terakhir menampilkan nama_mk yang berada pada
tabel matakuliah, sehingga terbentuk tampilan seperti pada
screenshoot hasil diatas.

Pendekatan Join Implisit :


a. Source code
SELECT m.nim, m.nama, a.kode_mk, nama_mk FROM ambil_mk a,
mahasiswa m, matakuliah k WHERE m.Nim = a.nim AND
a.kode_mk = k.kode_mk;

b. Screenshoot
Proses :
Hasil :

c. Analisis :
Dari table mahasiswa dan table ambil_mk serta table matakuliah yang
sudah terbentuk sebelumnya, untuk mendapatkan nama mahasiswa
yang mengambil matakuliah beserta kode_mk dan nama_mk yang
diambilnya, dengan pendekatan join implisit. Maka menggunakan
SQL SELECT m.nim, m.nama, a.kode_mk, nama_mk FROM
ambil_mk a, mahasiswa m, matakuliah k WHERE m.Nim = a.nim
AND a.kode_mk = k.kode_mk;. Komponen select digunakan untuk
pemanggilan data dimana ketentuan yaitu m.Nim = a.nim AND
a.kode_mk = k.kode_mk dengan menemukan kecocokan antara field
nim yang ada pada tabel mahasiswa dan yang ada pada tabel
ambil_mk serta mencocokkan field kode_mk yang berada di tabel
ambil_mk dengan yang ada pada tabel matakuliah. Dan sebelumnya
sudah terdapat deklarasi berupa m.nim, m.nama, a.kode_mk,
nama_mk yang berarti tabel hasil akan menampilkan field nim hasil
dari pencocokkan antara tabel mahasiswa dan tabel ambil_mk, lalu
menampilkan field nama yang terdapat pada tabel mahasiswa,
kemudian menampilkan field kode_mk yang merupakan hasil
pencocokkan dari tabel ambil_mk dan tabel matakuliah, yang terakhir
menampilkan nama_mk, sehingga terbentuk tampilan seperti pada
screenshoot hasil diatas.

4. Dapatkan nim, nama, dan total sks yang diambil oleh mahasiswa,
Dimana total sksnya lebih dari 3 dan kurang dari 6.
a. Source code
SELECT m.nim, m.nama, k.sks FROM mahasiswa m JOIN
ambil_mk a ON m.Nim = a.nim JOIN matakuliah k ON
a.kode_mk = k.kode_mk WHERE sks>3 AND sks<6;

b. Screenshoot
Proses :

Hasil :
c. Analisis :
Dari table mahasiswa dan table ambil_mk serta table matakuliah yang
sudah terbentuk sebelumnya, untuk mendapatkan nim, nama, dan total
sks yang diambil oleh mahasiswa, Dimana total sksnya lebih dari 3
dan kurang dari 6. Maka menggunakan SQL SELECT m.nim,
m.nama, k.sks FROM mahasiswa m JOIN ambil_mk a ON m.Nim =
a.nim JOIN matakuliah k ON a.kode_mk = k.kode_mk WHERE sks>3
AND sks<6;. Komponen select digunakan untuk pemanggilan data
dimana ketentuannya yaitu menampilkan field nim dengan
menemukan kombinasi antara field nim yang ada pada tabel
mahasiswa dan yang ada pada tabel ambil_mk serta menampilkan field
nama yang ada pada tabel mahasiswa, kemudian menampilkan field
kode_mk dari hasil kombinasi dengan tabel ambil_mk dan tabel
matakuliah. Terakhir yaitu menampilkan field sks yang berada pada
tabel matakuliah dengan syarat lebih besar dari 3 dan kurang dari 6.
Sehingga semua hasil tersebut diperoleh dari proses pengombinasian
atara tabel mahasiswa, tabel ambil_mk, dan juga tabel matakuliah.
Namun program tersebut bernilai kosong (empty) karena di dalam
tabel matakuliah tidak terdapat sks yang lebih dari 3 dan kurang dari 6
sehingga tidak memenuhi syarat untuk menampilkan suatu data dalam
SQL tersebut. Adapun sks yang tersedia adalah kurang dari atau sama
dengan 3.

5. Dapatkan total sks matakuliah yang diambil oleh mahasiswa terdaftar.


a. Source code
SELECT SUM(k.sks) AS total_sks FROM mahasiswa m JOIN
ambil_mk a ON m.Nim = a.nim JOIN matakuliah k ON
a.kode_mk = k.kode_mk;

b. Screenshoot
Proses :

Hasil :

c. Analisis :
Dari table mahasiswa dan table ambil_mk serta table matakuliah yang
sudah terbentuk sebelumnya, untuk mendapatkan total sks matakuliah
yang diambil oleh mahasiswa terdaftar. Maka menggunakan SQL
SELECT SUM(k.sks) AS total_sks FROM mahasiswa m JOIN
ambil_mk a ON m.Nim = a.nim JOIN matakuliah k ON a.kode_mk =
k.kode_mk;. Komponen select digunakan untuk pemanggilan data
dimana ketentuannya yaitu menampilkan nilai pengembalian jumlah
(total atau sum) di kolom matakuliah pada kolom baru yaitu total_sks
dari tabel mahasiswa yang berkombinasi terhadap tabel ambil_mk
untuk memperoleh kombinasi nim. Serta kombinasi antara tabel
ambil_mk dan tabel matakuliah untuk memperoleh kombinasi
kode_mk. Sehingga semua hasil tersebut diperoleh dari proses
pengombinasian atara tabel mahasiswa, tabel ambil_mk, dan juga tabel
matakuliah, Maka akan memperoleh jumlah dari sks matakuliah yang
diambil oleh mahasiswa terdaftar seperti pada tampilan screenshoot
hasil di atas.

III. Tugas Rumah


1. Buatlah database baru dengan nama Universitas. Lalu didalamnya
terdapat tabel-tabel berikut :

Tabel Instruktur
nip Nama Jurusan Asal_kota
1 Junrico Ilmu Komputer Malang
2 Fahmi Hidayat Ilmu Komputer Malang
3 Danio Juan Ilmu Sejarah Klaten
4 Bobi Kristian Sastra Indonesia Magelang

Source code :
INSERT INTO `tabel instruktur` (`nip`, `Nama`,
`jurusan`, `asal_kota`) VALUES ('1', 'Junrico', 'Ilmu
Komputer', 'Malang'), ('2', 'Fahmi Hidayat ', 'Ilmu
Komputer ', 'Malang'), ('3', 'Danio Juan', 'Ilmu Sejarah
', 'Klaten'), ('4', 'Bobi Kristian', 'Sastra Indonesia',
'Magelang');
Screen Shot :
Proses 1

Proses 2
Proses 3

Proses 4

Proses 5
Tabel Matakuliah
Kd_mk Nama_mk sks
PTI101 Algoritma dan Pemrograman 3
PTI102 Basis Data 3
PTI103 Visual Basic 3
IS101 Sejarah Indonesia 3
PTI007 Proyek Perangkat lunak 3
SI102 Sastra Indonesia 3
Source code :
INSERT INTO `tabel matakuliah` (`kd_mk`, `Nama_mk`,
`sks`) VALUES ('PTI101', 'Algoritma dan Pemrograman',
'3'), ('PTI102', 'Basis Data', '3'), ('PTI103', 'Visual
Basic', '3'), ('ISI101', 'Sejarah Indonesia ', '3'),
('PTI007', 'Proyek Perangkat Lunak', '3'), ('SI102',
'Sastra Indonesia', '3');

Screen Shot :
Proses 1

Proses 2
Proses 3

Tabel Ambil_mk
Nip Kd_mk Ruangan jml_mhs
1 PTI102 H5211 40
2 PTI102 H5212 45
2 PTI103 H5206 40
3 IS101 I7312 30
4 IS102 I7322 40
Source code :
INSERT INTO `tabel ambil_mk` (`nip`, `kd_mk`, `ruangan`,
`jml_mhs`) VALUES ('1', 'PTI102', 'H5211', '40'), ('2',
'PTI102', 'H5212', '45'), ('2', 'PTI103', 'H5206',
'40'), ('3', 'ISI101', 'I7312', '30'), ('4', 'IS102',
'I7322', '40');

Screen Shot :
Proses 1

Proses 2

Proses 3
Proses 4

a. Tampilkan kd_mk dan matakuliah yang jumlah mahasiswanya 40


Source code :
SELECT tabel ambil_mk.kode_mk, tabel mahasiswa.nama_mk
FROM tabel ambil_mk INNER JOIN tabel mahasiswa
ON tabel ambil_mk.kode_mk = tabel mahasiswa.kode_mk
WHERE jumlah_mhs = 40;

Screen shot :
Proses 1
Proses 2

Analisis :

Data yang diambil dari tabel matakuliah dan ambil_mk yang


memiliki jumlah mahasiswa 40 dengan menggunakan inner join dan
memanfaatkan fitur derived table, yang diseleksi adalah field
m.KD_MK, m.NAMA_MK, a.JML_MHS. Relasi inner join
tabel_ambil_mk yang dinotasikan dengan huruf a, tabel
tabel_matakuliah yang dinotasikan dengan huruf m kemudian
menggunakan ON a.KD_MK = m.KD_MK mengakibatkan hanya
KD_MK yang sama antara KD_MK pada tabel tabel_ambil_mk dan
KD_MK pada tabel tabel_matakuliah. Spesifikasi seleksi data dengan
klausa WHERE JML MHS = 40, karena yang diinginkan adalah
menampilkan KD_MK dan matakuliah yang jumlah mahasiswanya
adalah 40.

b. Tampilkan data Instruktur yang mengajar ilmu sastra.


Source code :

SELECT * FROM tabel instruktur INNER JOIN tabel


matakuliah WHERE tabel instruktur.jurusan=tabel
matakuliah.nama_mk AND tabel matakuliah.nama_mk LIKE
"Sastra%"
Screen Shot :
Proses 1

Proses 2

Analisis :
Pada soal diatas terdapat tiga tabel yang digabungkan pertama
kita menggabungkan tabel matakuliah dengan tabel ambil_mk dengan
INNER JOIN. Kemudian penggabungan dua tabel tersebut digabung
dengan tabel instruktur. Hasilnya akan ditampilkan dengan SELECT
instrukutur.NIP,nama, jurusan, asal_kota, dan nama_mk. Kemudian
untuk mendapatkan nama matakuliah basisdata digunakan WHERE
nama_mk LIKE “Sastra%”

c. Tampilkan data Instruktur yang tidak mengajar ilmu komputer.

Source code :

SELECT i.nip, i.nama,i.jurusan,i.asal_kota FROM tabel


instruktur i LEFT OUTER JOIN tabel ambil_mk a ON i.nip =
a.nip WHERE a.kd_mk NOT LIKE "PTI%"

Screen Shot :

Proses 1
Proses 2

Analisis :

Menampilkan data instruktur yang tidak mengajar ilmu


Komputer dengan menggunakan tabel instruktur.nip, nama, jurusan,
asal_kota dimana nip pada tabel ambil_mk NOT LIKE "PTI%" (tidak
ada yanng sesuai dengan ketentuan nip pada tabel instruktur).
Kemudian tabel digabungkan dengan SELECT i.nip,
i.nama,i.jurusan,i.asal_kota FROM tabel instruktur i LEFT OUTER
JOIN tabel ambil_mk a ON i.nip = a.nip WHERE a.kd_mk NOT
LIKE "PTI%", untuk Tampilkan data Instruktur yang tidak mengajar
ilmu komputer.

d. Tampilkan data Instruktur yang tidak mengajar.


Source code :
SELECT tabel instruktur.nip, nama,jurusan,asal_kota
FROM tabel instruktur
LEFT OUTER JOIN tabel ambil_mk
ON tabel instruktur.nip = tabel ambil_mk.nip
WHERE tabel ambil_mk.nip is NULL

Screen Shot :
Proses 1
Proses 2

Analisis :
Menampilkan data instruktur yang tidak mengajar dengan
menggunakan tabel instruktur, ambil_mk dan matakuliah dengan
ketentuan NIP dan kode_mk dimana nip pada ambil_mk is null (tidak
ada yanng sesuai dengan ketentuan nip pada tabel instruktur)
menggabungkan tabel instruktur dan ambil_mk dengan LEFT OUTER
JOIN berdasarkan NIP dengan sintaks ONinstrukur.NIP =
ambil_mk.NIP. kemudian hasilnya ditampilkan dengan SELECT
instruktur.NIP,nama_ins,jurusan,asal_kota. Kemudian untuk
mendapatkan data instrukutur yang tidak mengajar digunakan
WHERE ambil_mk.NIP IS NULL. Perlu diketahui pula bahwa kata
kunci OUTER bersifat opsional, jadi ditulis atau pun tidak hasilnya
kan tetap sama.

2. Buatlah tabel seperti di bawah ini.


Tabel Custumer
Customer _id Customer__name Customer_addres
CS001 Aan Pasuruan
CS002 Hanif Banyuangi
CS003 Mirza Malang
CS004 Tanti Tegal
CS005 Budie Kediri
Source code :
CREATE TABLE customer (
customer_id VARCHAR(5) PRIMARY KEY,
customer_name VARCHAR(10),
customer_addres VARCHAR(15)
);
INSERT INTO `customer` (`customer_id`, `customer_name`,
`customer_address`) VALUES ('CS001', 'Aan', 'Pasuruan'),
('CS002', 'Hanif', 'Banyuangi'), ('CS003', 'Mirza',
'Malang'), ('CS004', 'Tanti', 'Tegal'), ('CS005',
'Budie', 'Kediri');

Screen shot :
Proses 1

Proses 2
Tabel Orders
Order_id Order_date Customer_id Qty Amount
CS001 10-12-2016 CS001 1 40000
CS002 11-01-2017 CS002 2 50000
CS003 12-01-2017 CS003 3 35000

Source code :
CREATE TABLE orders
order_id VARCHAR(5) PRIMARI KEY,
Order_date DATE,
Customer_id VARCHAR(5),
Qty INT(2),
Amount INT (5)
);
INSERT INTO `orders` (`order_id`, `order_date`,
`customer_id`, `qty`, `amount`) VALUES ('CS001', '2016-
12-10', 'CS001', '1', '40000'), ('CS002', '2017-01-11',
'CS002', '2', '50000'), ('CS003', '2017-01-12', 'CS005',
'3', '35000');

Screen Shot :
Proses 1
Proses 2

a. Gabungkan kedua tabel tersebut dengan JOIN dan UNION


Pertama menggunankan JOIN =

Source code :
SELECT c.customer_id, customer_name, customer_address,
order_id, order_date, qty, amount FROM customer c INNER
JOIN orders o ON c.customer_id = o.customer_id

Screen Shot :
( Inner Join )
Proses 1

Proses 2

( Left Outer Join )


Source code :
SELECT * FROM customer c LEFT OUTER JOIN orders o ON
c.customer_id = o.customer_id

Screen Shot :
Proses 1

Proses 2
( Right Outer Join )
Source code :
SELECT * FROM
customer c RIGHT OUTER JOIN orders o
ON c.customer_id = o.customer_id;
Screen Shot :
Proses 1

Proses 2

Kedua menggunakan UNION =


Source code :
SELECT * FROM
customer c LEFT OUTER JOIN orders o
ON c.customer_id=o.customer_id
UNION
SELECT * FROM
customer c RIGHT OUTER JOIN orders o
ON c.customer_id=o.customer_id;
Screen Shot :
Proses 1
Proses 2

Analisis :
Untuk menggabungkan JOIN dan UNION pertama dari JOIN
menggunakan Inner join, Left Outer Join, dan Right Outer Join.
Untuk menggunakan inner join dengan memanfaatkan
fitur derived table, yang diseleksi adalah field c.CUSTOMER_ID,
CUSTOMER_NAME, CUSTOMER_ADDRES, ORDER_ID,
ORDER_DATE, QTY, AMOUNT. Relasi inner join tabeL
tb_customer yang dinotasikan dengan huruf c, tabel tb_orders yang
dinotasikan dengan huruf o, kemudian menggunakan ON
c.CUSTOMER_ID = o.CUSTOMER_ID mengakibatkan hanya
CUSTOMER_ID yang sama antara CUSTOMER_ID pada tabel
tb_customer dan CUSTOMER_ID pada tabel tb_order.
Untuk menggunakan Left Outer Join dijadikan patokan
yaitu tabel tb_customer yang dinotasikan dengan c, karena tabel
tb_customer di left outer join dengan tabel tb_orders yang dinotasikan
dengan o, penggabungan kedua tabel berdasarkan CUSTOMER_ID
pada tabel tb_customer dan CUSTOMER_ID pada tabel tb_orders,
sehingga menghasilkan ada data yang NULL.
Untuk menggunakan Right Outer Join dijadikan patokan
yaitu tabel tb_orders, karena tabel tb_orders berada disebelah kanan
tabel tb_customer, penggabungan kedua tabel berdasarkan
CUSTOMER_ID pada tabel tb_customer dan CUSTOMER_ID pada
tabel tb_orders, sehingga tidak menghasilkan data yang NULL.

b. Tampilkan data customer yang memiliki amount order diatas 35000

Source code :
SELECT c.customer_id,c.customer_name,c.customer_address
FROM customer c INNER JOIN orders o WHERE
c.customer_id=o.customer_id AND o.amount>35000

Screen Shot :
Proses 1

Proses 2

Analisis :
program diatas menggabungkan tabel customer dengan secara INNER
JOIN berdasarkan customer_id dengan sintaks ON c.customer_id =
o.customer_id. Kemudian tabel yang digabung akan ditampilkan dengan
SELECT c.customer_id,c.customer_name,c.customer_address FROM
customer c INNER JOIN orders o WHERE c.customer_id=o.customer_id
AND o.amount>35000. Kemudian data akan tampil dengan customer
yang memiliki amount order diatas 35000.

c. Tampilkan field order_date dan amount dengan syarat tahun order


setelah 2016 dan amount order kurang dari 40000
Source code :
SELECT order_date, amount FROM orders WHERE
YEAR(order_date)>2016 AND amount<40000
Screen shot :
Proses 1

Proses 2

Analisis :
Pada program diatas menggabungkan tabel orders dan tabel
amount secara INNER JOIN berdasarkan customer_id dengan sintaks ON
customer.customer_id = orders.customer_id. Kemudian tabel yang
digabung akan ditampilkan dengan SELECT order_date, amount FROM
orders WHERE YEAR(order_date)>2016 AND amount<40000. dan akan
field order_date dan amount dengan syarat tahun order setelah 2016 dan
amount order kurang dari 40000.
Inner Join berguna untuk menggabungkan tabel dan harus
membutuhkan satu kolom unik yang ada pada primary key maupun
foreign key. Apabila ada foreign key maupun primary key yang kosong,
penggunaan fungsi ini hanya akan memunculkan data yang foreign key-
nya memiliki record yang isi saja.

IV. Kesimpulan
Dalam praktikum modul 5 RELASI & JOIN dapat disimpulkan bahwa
RELASI & JOIN merupakan salah satu materi yang membahas mengenai
keterhubungan entitas, jeni – jeni dari RELASI & JOIN dan membahas
fungsi dari union mysql sehingga mahasiswa dapat mengerti dan
memahami setiap keterhubungan entitas di dalam basis data tersebut.
Mahasiswa juga mampu mengerti hasil yang akan muncul jika
menggunakan suatu RELASI & JOIN tertentu dalam bahasa SQL yang
digunakan tersebut. Dari modul 5 RELASI & JOIN ini setiap mahasiswa
juga mengerti penggunaan, cara kerja, dan fungsi dari setiap jenis
RELASI & JOIN yang ada pada modul 5, sehingga saat mahasiswa
tersebut ingin menghasilkan data tertentu maka dapat dengan mudah
menyelesaikannya melalui pemahaman penggunaan setiap jenis RELASI
& JOIN tersebut. Pada RELASI & JOIN ini juga mengenal dan
memahami jenis-jenis operasi pengambilan data di beberapa entitas, untuk
mengerjakan setiap latihan, tugas praktikum, serta tugas rumahnya.
Sehingga dengan praktik langsung, mahasiswa semakin memahami
mengenai RELASI & JOIN serta tidak asing dengan penggunaan berbagai
jenis RELASI & JOIN. Dengan pemahaman yang lebih dalam mengenai
fungsi dari union pada mysql maka mahasiswa tentunya mampu
melakukan operasi-operasi pengambilan data di beberapa entitas, sehingga
dalam pengerjaannya mahasiswa tidak mangalami kesulitan untuk
menyelesaian operasi-operasi tersebut. Pembelajaran mengenai RELASI
& JOIN sangat membantu mahasiswa untuk menentukan pernyataan SQL,
dalam penyelesaian suatu kasus yang ada pada modul 5 ini. Karena
dengan adanya materi RELASI & JOIN ini mahasiswa sangat terbantu
dalam hal menguraikan pernyataan SQL. Dengan demikian maka
mahasiswa mampu memahami dengan baik keterhubungan entitas di
dalam basis data serta jenis – jenis operasi pengambilan data di beberapa
entitas dalam materi RELASI & JOIN ini. Mahasiswa mampu
mengimplementasikan materi RELASI & JOIN paa kasus – kasus
retrieval yang melibatkan lebih dari satu entitas. Serta memahami dan
mengaplikasikan fungsi union pada mysql dengan mudah.

V. Daftar Rujukan
Kadir, Abdul. 2013. Pemrograman Database MySQL untuk Pemula.
Yogyakarta: MediaKom.
Jurusan Teknik Elektro. 2018. Modul 5: RELASI & JOIN. Malang:
Universitas Negeri Malang.

Anda mungkin juga menyukai