Anda di halaman 1dari 23

LAPORAN PRAKTIKUM IV

JOIN DAN UNION

Disusun untuk Memenuhi Matakuliah Praktikum Basis Data


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

Disusun Oleh:
Abid Muhibbuddin (150533601917)
Anidia Wulan Sari

(150533601651)

S1 PTI 2015 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
FEBRUARI 2016

MODUL IV

JOIN DAN UNION


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. 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.
Di dalam 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 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) baruyang 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.
Sintaks inner join diperlihatkan sebagai berikut:
SELECT A1, A2, ..., An
FROM r1
INNER JOIN r2

ON r1.join_key = r2.join_key
Inner join juga dapat direpresentasikan dalam bentuk implisit sebagai berikut :

SELECT A1, A2, ..., An


FROM r1, r2
WHERE r1.key = r2.key
Misalkan terdapat tabel A dan B, maka hasil inner join dapat diperlihatkan
sebagai bidang terarsirdalam diagram Venn seperti Gambar 1.

Gambar 1. Inner Join


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 tabel kiri
ditambah dengan nilai dari tabel kanan yang sesuai (atau NULL jika tidak ada
nilai yang sesuai).
Sintaks left outer join diperlihatkan sebagai berikut:

SELECT A1, A2, ..., An


FROM r1
LEFT OUTER JOIN r2
ON r1.join_key = r2.join_key
Left outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 2.

Gambar 2. Left Outer Join


Right Outer Join
Right outer join (atau right join) pada dasarnya sama seperti left join, namun
dalam bentuk terbalikkanan dan kiri.
Sintaks right outer join diperlihatkan sebagai berikut:

SELECT A1, A2, ..., An


FROM r1
RIGHT OUTER JOIN r2
ON r1.join_key = r2.join_key
Right outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 3.

Gambar 3. Right Outer Join


Full Outer Join
Full outer join (atau full join) pada hakekatnya merupakan kombinasi dari left
dan right join.
Sintaks full outer join diperlihatkan sebagai berikut:

SELECT A1, A2, ..., An


FROM r1
FULL OUTER JOIN r2
ON r1.join_key = r2.join_key

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

Gambar 4. Full Outer Join


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

Ganbar 6. Union All

Fungsi Union sendiri dapat dijalankan dengan sintaks sebagai berikut :

SELECT A1,A2, ...An


FROM r1 UNION
SELECT A1,A2, ...An
FROM r2;
SELECT A1,A2, ...An
FROM r1 UNION ALL
SELECT A1,A2, ...An
FROM r2;

1.

Latihan
3.1.

Latihan 1 Relationship
1. Langkah-langkah:

Dalam latihan ini digunakan dua buah tabel 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 :


Tabel Karyawan
nama

Tabel Departemen

id_dep

id_dep

nama_dep

Agus

10

10

Penelitian

Budi

16

11

Pemasaran

Citra

12

12

SDM

Dani

17

13

Keuangan

2. Printscreen

3. Keterangan
3.Keterangan
Tabel karyawan dibuat untuk nantinya dipergunakan untuk di relationshipkan
dengan tabel departemen dengan susunan tabel karyawan : nama dan id_dep, dan
tabel departemen :id_dep dan nama_dep. Pada keduanya memiliki id_dep yang
id_dep tersebut beberapa ada yang sama, inilah yang nanti bisa digunakan untuk
relationshipkan antara kedua tabel.
3.2.

Latihan 2 Inner Join

1.

Langkah langkah

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 :

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;

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

2. Printscreen

3. Keterangan

Untuk mendapatkan data karyawan yang memiliki departemen dengan cara


meneksekusi perintah berikut SELECT * FROM karyawan INNER JOIN
departemen ON karyawan.id_dep = departemen.id_dep; atau juga bisa
menggunakan bentuk implisit SELECT * FROM karyawan, departemen
WHERE karyawan.id_dep = departemen.id_dep;
Perintah ON karyawan.id_dep = departemen.id_dep, berarti akan
menampilkan data-data yang mempunyai nilai sama antara id_dep pada tabel
karyawan dan tabel departemen. Yang artinya tabel tersebut berelasi.
Hasil eksekusi perintah SQL yang menggunakan INNER JOIN dengan yang
menggunakan bentuk implisitnya, bisa kita liahat pada gambar diatas yaitu

sama. Hanya penulisan peryataanya saja yang berbeda. Namun hasil


eksekusinya sama.

Untuk mengambil nama karyawan dan nama departemen yang ditempatinya


saja, dengan eksekusi perintah SELECT karyawan.nama,
departemen.nama_dep FROM karyawan INNER JOIN departemen ON
karyawan.id_dep = departemen.id_dep; Agar penulisan SQL lebih efisien,
kita dapat memanfaatkan fitur derived table (atau alias). SELECT k.nama,
d.nama_dep FROM karyawan k INNER JOIN departemen d ON
k.id_dep = d.id_dep;
Perintah ini SELECT karyawan.nama, departemen.nama_dep FROM
karyawan INNER JOIN departemen menampilkan data-data yang
mempunyai nilai sama antara id_dep pada tabel karyawan dan tabel
departemen. Yang artinya tabel tersebut berelasi. Namun yang akan tampil
dari hasil eksekusi diatas hanya nama dan nama_dep.
Hasil eksekusi perintah SQL yang menggunakan INNER JOIN dengan yang
memanfaatkan fitur derived table (atau alias), bisa kita liahat pada gambar
diatas yaitu sama. Hanya penulisan peryataanya saja yang berbeda. Namun
hasil eksekusinya sama.

3.3.

Latihan 3 Outer Join


1. Langkah-langkah:
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;

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).
Right Outer Joint
Contoh penggunaan RIGHT OUTER JOIN adalah sebagai berikut :

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?

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;

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 .
Contoh penggunaan CROSS JOIN adalah sebagai berikut :

SELECT *
FROM karyawan CROSS JOIN departemen;
Atau dalam bentuk implisitnya :

SELECT * FROM karyawan, departemen;

2. Printscreen

3. Keterangan
Dalam LEFT JOIN akan menampilkan data-data yang tidak berelasi
namun pada table departemen (table kiri), data yang tidak berelasi akan
bernilai NULL.

SELECT * FROM karyawan k LEFT OUTER JOIN departemen d ON


k.id_dep = d.id_dep WHERE d.id_dep IS NULL; perintah ini digunakan
untuk menampilkan tabel yang tidak berelasi saja.

Hampir sama dengan left join Dalam RIGHT JOIN akan menampilkan datadata yang tidak berelasi namaun pada table karyawan (tabel kanan), data yang
tidak berelasi akan bernilai NULL

FULL OUT JOIN akan menampilkan semua data-data dari tabel sisi kiri
walaupun data di pasangan joinnya di sisi kanan nilainya NULL. Dan
sebaliknya.

CROSS JOIN akan menampilkan semua isi tabel sisi kiri akan memiliki
pasangan semua data disisi kanan. Banyaknya record cross join = jumlah
record tabel karyawan x jumlah record tabel departemen.

3.4.

Latihan 4 UNION
1. Langkah-langkah:
Buatlah tabel baru bernama karyawan2 pada database yang sama.
Data tabelnya adalah sebagai berikut.

Setelah itu coba lakukan penggabungan dengan perintah :


SELECT nama, id_dep
FROM karyawan
UNION
SELECT nama, id_dep
FROM karyawan2;

Lakukan perintah yang sama namun menggunakan UNION ALL.


Jelaskan apa perbedaan fungsi UNION dan UNION ALL.
2. Printscreen

3.keterangan
Perintah UNION untuk menggabungkan isi dari 2(dua) tabel atau
lebih yaitu antara tabel karyawan dan tabel karyawan2 maka
menghasikan tabel nama dan id_dep yang berbeda. sebagaiman

bisa dilihat pada tabel diatas.


Perintah UNION ALL menggabungkan keseluruhan data walaupun
data tersebut mempunyai isi yang sama .

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 data_mhs
jenis_kelami
nim nama n
101
102
103
104
105
106
107

Arif
Budi
Wati
Ika
Tono
Iwan
Sari

Tabel ambil_mk
kode_m
Nim k
101 PTI447
103 TIK333
104 PTI333
104 PTI777
111 PTI123
123 PTI999

L
L
P
P
L
L
P

alamat
Jl.
Kenangan
Jl. Jombang
Jl. Surabaya
Jl. Jombang
Jl. Jakarta
Jl. Bandung
Jl. Malang

Tabel matakuliah
kode_m
k
nama_mk
Praktikum Basis
PTI447 Data
Praktikum Basis
TIK342 Data
Basis Data
PTI333 Terdistribusi
TIK123 Jaringan Komputer
TIK333 Sistem Operasi
PTI123 Grafika Multimedia
PTI777 Sistem Informasi

sks

semest
er

3
2
3
3
2

5
5
5
5
3

1. Dapatkan data mahasiswa yang mengambil matakuliah. Selesaikan

dengan pendekatan join eksplisit dan implisit. Hindari duplikasi data.


Jawab:
Untuk mendapatkan data mahasiswa yang mengambil matakuliah dengan
tanpa duplikasi, dilakukan dengan cara inner join, baik secara eksplisit
maupun implisit. Caranya tertera langsung di screenshot.
Screenshot:

Eksplisit

Implisit

Analisis:

Eksplisit
Dengan cara eksplisit, untuk mendapatkan data mahasiswa yang
mengambil matakuliah, menggunakan INNER JOIN ON
Sedangkan agar tidak terjadi duplikasi, menggunakan keyword
DISTINCT. Maka akan diperoleh hasil seperti gambar di atas
Implisit
Dengan cara implisit menggunakan klausa WHERE. Sama seperti pada
cara eksplisit, agar tidak terjadi duplikasi, menggunakan keyword

DISTINCT. Maka akan diperoleh hasil seperti gambar di atas


2. Kelompokkan data mahasiswa yang tidak mengambil matakuliah

berdasarkan jenis kelaminnya, kemudian hitung banyaknya.


Jawab:
Untuk mengelompokkan data mahasiswa yang tidak mengambil matakuliah
berdasarkan jenis kelaminnya serta menghitung banyaknya menggunakan
LEFT OUTER JOIN. Pernyataannya dapat dilihat pada screenshot.
Screenshot:

Analisis:
Pernyataan LEFT POINTER JOIN. Untuk mendapatkan banyaknya data,
menggunakan operasi COUNT. Untuk mendapatkan data yang tidak
mengambil matakuliah menggunakan klausa WHERE IS NULL.
Sedangkan untuk menampilkan jenis_kelamin berdasarkan urutan,
menggunakan keyword GROUP BY. Dan yang akan tampil jenis kelamin
dan jumlah sebagaima gambar di atas
3. Dapatkan nim dan nama mahasiswa yang mengambil matakuliah beserta
kode_mk dan nama_mk yang diambilnya. Selesaikan dengan pendekatan
join eksplisit dan implisit.
Jawab:
Screenshot:

Analisis:
Untuk mendapatkan nim dan nama mahasiswa yang mengambil matakuliah
beserta kode_mk dan nama_mk yang diambil dengan pendekatan join
eksplisit, hanya menggunakan klausa WHERE. Untuk mendapatkan dua
kondisi dimana data_mhs.nim = ambil_mk.nim dan ambil_mk.kode_mk =
modul3.kode_mk, maka di antara kedua kondisi terdapat pernyataan AND.
Sedangkan untuk mengurutkan nim dari yang terkecil, digunakan ORDER
BY. Maka akan diperoleh hasil seperti gambardi atas.

4. Dapatkan nim, nama, dan total sks yang diambil oleh mahasiswa, di mana
total sksnya lebih dari 4 dan kurang dari 10.
Screenshot:

Analisis:
Untuk mendapatkan total sks yang diambil oleh mahasiswa, digunakan
operasi SUM. Untuk memperoleh kondisi dimana data_mhs.nim =
ambil_mk.nim dan ambil_mk.kode_mk = modul3.kode_mk, digunakan
klausa WHERE, dan di antara kedua perbandingan terdapat AND.
Sedangkan klausa HAVING digunakan untuk mendapatkan total sks yang
lebih dari 4 dan kurang dari 10. Penggunaan HAVING dan bukannya
WHERE ini, karena untuk menentukan total sks menggunaan fungsi
agregat SUM.
5. Dapatkan data matakuliah yang tidak diambil oleh mahasiswa terdaftar
(mahasiswa yang terdaftar adalah mahasiswa yang tercatat di tabel
mahasiswa).
Screenshot:

Analisis:
Untuk mendapatkan data matakuliah yang tidak diambil oleh mahasiswa
terdaftar, digunakan LEFT OUTER JOIN dan RIGHT OUTER JOIN.
Untuk memperoleh suatu kondisi, digunakan klausa WHERE. Sedangkan
untuk mengurutkan data sesuai sks dari besar ke kecil digunakan ORDER
BY DESC.
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.

Analisis:
Untuk menampilkan nomor dan mata kuliah yang pesertanya
lebih dari 40 orang, digunakan INNER JOIN. Pada bagian awal
pernyataan SELECT matakuliah.nomk, matakuliah.namamk agar
yang ditampilkan hanya nomk dan namamk saja. Kemudian, agar
yang ditampilkan hanya yang pesertanya lebih dari 40 orang,
digunakan klausa WHERE.
b. Tampilkan nip dan nama instruktur yang mengajar mata kuliah
'Basis Data'

Analisis:
Untuk menampilkan nip dan nama instruktur yang mengajar
matakuliah Basis Data, di sini digunakan cara implisit. Untuk

menampilkannya, digunakan kata kunci Basis Data. Sehingga


pada klausa WHERE terdapat tiga kondisi, yaitu apabila
insfrastruktur.nip = kuliah.nip, kuliah.nomk = matakuliah.nomk,
dan matakuliah = Basis Data.
c. Tampilkan Total jumlah total mahasiswa yang Diajar oleh 'Steve
Wozniak' menggunakan JOIN.

Analisis:
Untuk mendapatkan total/jumlah keseluruhan mahasiswa
digunakan fungsi SUM. Untuk men-join-kan antara tabel
instruktur dan tabel kuliah, digunakan INNER JOIN. Sedangkan
untuk mendapatkan data dari mahasiswa yang hanya diajar oleh
Steve Wozniak, digunakan kata kunci Steve Wozniak pada
klausa WHERE.
2. Buatlah Tabel seperti di bawah ini.
Tabel Customer

Tabel Orders

Gabungkan kedua tabel itu menggunakan JOIN dan UNION sehingga


menjadi seperti di bawah ini.

Screenshot:

Analisis:
Untuk menampilkan tabel seperti pada contoh, digunakan LEFT
OUTER JOIN. Sedangkan untuk pengurutan customer_name sesuai
abjadnya digunakan GROUP BY. Jika tabel tidak saling berelasi maka
nilainya menjadi NULL.

4.

Kesimpulan
Berdasarkan hasil dari praktikum yang telah kamu lakukan dapat disimpulkan bahwa
perintah join ada beberapa macam yaitu :
Inner Join
Outer Join
Cross Join
Union Join

1.

2.
3.

4.

5.

6.

5.

Inner join merupakan jenis join yang paling umum yang dapat digunakan pada
semua database. Jenis ini dapat digunakan bila ingin merelasikan dua set data yang
ada di tabel, letak relasinya setelah pada perintah ON pada join.
Outer join merupakan jenis join yang sedikit berbeda dengan inner join. Pada
MySQL
Left join digunakan dalam situasi ketika ingin mengembalikan semua elemen data
set A, terlepas dari
apakah nilai kunci ada dalam data set B.
Right join digunakan dalam situasi ketika ingin mengembalikan semua elemen data
set B, terlepas dari
apakah nilai kunci ada dalam data set A.
Cross join kadang kala disebut juga sebagai Cartesian Product. Bila menggunakan
cross join, maka hasil dari cross join akan menciptakan hasil yang didasarkan pada
semua kemungkinan kombinasi baris dalam kedua set data. Dengan demikian,
jumlah baris yang dikembalikan adalah N M , dimana N adalah jumlah baris
dalam kumpulan data A dan M jumlah baris dalam kumpulan data B.
union dapat menyederhanakan perintah persyaratan OR yang bertingkat. Bila dalam
sebuah query menghasilkan pemakaian perintah OR yang lebih dari satu sehingga
dapat membuat bingung, sebagai gantinya digunakan perintah UNION. Union
dapat dikatakan sebagai perintah untuk menggabungkan hasil query sql yang
fungsinya sama dengan perintah OR.
Daftar Pustaka
Tim Asisten Dosen. 2016. Modul III.Join dan Union. Malang: Universitas Negeri
Malang.

Anda mungkin juga menyukai