Anda di halaman 1dari 13

JOIN

Join merupakan salah satu fitur SQL yang berguna menggabungkan tabel dengan queryquery-
query yang mendapatkan kembali data. Join adalah salah satu dari beberapa operasi paling
penting yang dapat Anda lakukan dengan menggunakan statemen SELECT. Dan sebagai
bagian penting dalam mempelajari SQL, Anda perlu memahami dengan baik join dan sintaks
join.

Alasan utama digunakannya pemisahan data ke dalam banyak tabel memungkinkan proses
pemyimpanannan menjadi lebih efesien, manipulasi lebih mudah dan skalabilitas yang lebih
besar. Tetapi manfaat tersebut ada tuntutan.

Jika data disimpan dalam banyak tabel, bagaimana kalian dapat mendapatkan kembali data
dengan sebuah statemen SELECT tunggal ?

Untuk membuat join sangat sederhana. Anda harus menentukan semua tabel yang akan
dimasukkan dan bagaimana tabel itu dihubungkan satu dengan yang
lainnya.

Sebelum mencoba seperti apa join itu, ada beberapa tabel yang harus dipersiapkan.
 Buat database PRAKTIKUM_JOIN
create database praktikum_join
ikum_join;
use praktikum_join;

 Buat tabel ANGGOTA_KOPERASI


create table anggota_koperasi (
id_anggota varchar (10)
( primary key not null,
nama_anggota varchar (50)( not null,
status_anggota varchar (30)
( not null,
asal varchar (20)) not null
);

insert into anggota_koperasi values


('A0001','Baymax','Anggota Madya','Cirebon'),
('A0002','Princess Anna','Anggota Senior','Cirebon'),
('A0003','Queen Elsa','Anggota Madya','Cirebon'),
('A0004','Woody','Anggota Senior','Cirebon'),
('A0005','Buzz Lightyear','Anggota Junior','Cirebon'),
('A0006','Hiro Yamada','Anggota Junior','Cirebon'),
('A0007','Ralph','Anggota Senior','Cirebon'),
('A0008','Rapunzel','Anggota Madya','Cirebon'),
('A0009','Flint','Anggota Madya','Cirebon'),
Mady
('A0010','Merida','Anggota
da','Anggota Senior','Cirebon');
 Buat tabel PENGURUS
create table anggota_koperasi (
id_anggota varchar (10)
( primary key not null,
nama_anggota varchar (50)( not null,
status_anggota varchar (30)
( not null,
asal varchar (20)) not null
);

insert into pengurus values


('P0001','Spongebob Squarepants','Ketua'),
('P0002','Patrick Star','Kestari'),
('P0003','Squidward Tentacles','Bendahara'),
('P0004','Eugene Krabs','Kestari'),
('P0005','Sheldon Plankton','Bendahara');

 Buat tabel REKAP


create table rekap (
id_rekap varchar (10)
( primary key not null,
id_anggota varchar (10)
( not null,
id_pengurus varchar (10)
( not null,
jenis_transaksi varchar (20)
( not null,
besaran int not null,
foreign key (id_anggota
id_anggota) references anggota_koperasi (id_anggota),
foreign key (id_pengurus
id_pengurus) references pengurus (id_pengurus)
);

insert into rekap values


('R0001','A0009','P0001','Simpan',100000),
('R0002','A0008','P0002','Pinjam',150000),
('R0003','A0007','P0003','Simpan',20000),
('R0004','A0006','P0004','Pinjam',10000),
('R0005','A0005','P0005','Simpan',120000),
('R0006','A0001','P0004','Pinjam',10000),
('R0007','A0002','P0003','Simpan',30000),
('R0008','A0003','P0002','Pinjam',100000
('R0008','A0003','P0002','Pinjam',100000),
('R0009','A0004','P0001','Simpan',50000),
('R0010','A0009','P0002','Pinjam',200000),
('R0011','A0010','P0003','Simpan',15000),
('R0012','A0010','P0004','Simpan',120000),
('R0013','A0009','P0005','Simpan',120000),
('R0014','A0008','P0001','Pinjam',
('R0014','A0008','P0001','Pinjam',150000),
('R0015','A0002','P0002','Simpan',500000);
JENIS-JENIS JOIN

1. INNER JOIN

Inner Join adalah menggabungkan dua tabel untuk mengambil irisan dari kedua tabel tersebut,
atau mengambil kesamaannya. Inner join dapat diilustrasikan sebagai berikut.

Bentuk penulisan sintaksnya :


SELECT nama_field FROM nama_tabel1 INNER JOIN nama_tabel2

ON nama_tabel1.nama_field = nama_tabel2.nama_field;
Atau
SELECT nama_field FROM nama_tabel1 JOIN nama_tabel2

ON nama_tabel1.nama_field = nama_tabel2.nama_field;

Sebagai contoh dar inner join:


join
SELECT anggota_koperasi.id_anggota, nama_anggota, status_anggota, asal
FROM anggota_koperasi INNER JOIN rekap
ON anggota_koperasi.id_anggota = rekap.id_anggota;

Atau
SELECT anggota_koperasi.id_anggota, nama_anggota, status_anggota, asal
FROM anggota_koperasi JOIN rekap
ON anggota_koperasi.id_anggota = rekap.id_anggota;
Jika diantara dua tabel tersebut tidak memiliki irisan maka tidak ada yang ditampilkan, (Empty
set (0.00 sec))

Contoh:
SELECT anggota_koperasi.id_anggota, nama_anggota, status_anggota, asal
FROM anggota_koperasi INNER JOIN rekap
On anggota_koperasi.id_anggota = rekap.id_rekap;
rekap.id_

Atau
SELECT anggota_koperasi.id_anggota, nama_anggota, status_anggota, asal
FROM anggota_koperasi INNER JOIN rekap;
Data yang ditampilkan tidak memiliki tujuan yang jelas.

Sekarang coba
oba tampilkan id_anggota dari tabel anggota_koperasi, id_pengurus dari tabe
tabel
pengurus, dan id_rekap dari tabel rekap dengan menggunakan inner join
join. Apakah bisa
menggabungkan 3 tabel dan mencari irisannya?

2. LEFT JOIN

Left join, adalah query untuk menampilkan record dari tabel kiri walaupun tidak mempunyai
pasangan record pada tabel kanan. Left join dapat diilustrasikan seperti gambar berikut.
Bentuk penulisan sintaksnya:
SELECT table1.field1, table2.field1, table2.field1, table2.field2
FROM table1 LEFT JOIN table2
ON table1.field1=table2.field1;

Contoh:
Sekarang kita coba delete data rekap yang diurus oleh Squidward Tentacles

DELETE from rekap where id_pengurus=’P0003’;


id_pengurus=

Lalu ketikan contoh left join dibawah ini

SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,


rekap.jenis_transaksi, rekap.besaran
FROM pengurus LEFT JOIN rekap
ON pengurus.id_pengurus=rekap.id_pengurus ORDER BY rekap.id_rekap;

Data dimana pengurusnya tidak terdapat pada tabel rekap (tidak memiliki irisan), maka
akan ditampilkan null.

Oke, sekarang kita berikan sedikit variasi pada sintaks tersebut untuk menampilkan data
pada tabel kiri dengan syarat field pada tabel kanan pasangannya NULL NULL. Sintaksnya:
sebagai berikut.
SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,
rekap.jenis_transaksi, rekap.besaran
FROM pengurus LEFT JOIN rekap
ON pengurus.id_pengurus=rekap.id_pengurus
WHERE rekap.id_pengurus IS NULL ORDER BY rekap.id_rekap;
Maka akan ditampilkan data yang tidak meiliki irisan.

Sekarang coba ganti sintaks diatas menjadi


SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,
rekap.jenis_transaksi, rekap.besaran
FROM pengurus LEFT JOIN rekap
ON pengurus.id_pengurus=rekap.id_pengurus
WHERE pengurus.id_pengurus
.id_pengurus IS NULL ORDER BY rekap.id_rekap;
Bagaimana hasilnya? Mengapa?

Karena pada penggabungan tabel pengurus dan tabel rekap, tidak ada id_pengurus pada tabel
pengurus yang NULL atau tidak ada field pada rekap yang tidak memiliki relasi dengan
id_pengurus pada tabel pengurus. Bisakan anda membuat contoh yang NULL?

Selanjutnya, untuk menampilkan field-field


field field dengan syarat yang id_pengurus pada tabel rekap
NOT NULL adalah
dalah sebagai berikut.
SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,
rekap.jenis_transak rekap.besaran
rekap.jenis_transaksi,
FROM pengurus LEFT JOIN rekap
ON pengurus.id_pengurus=rekap.id_pengurus
WHERE rekap.id_pengurus IS NOT NULL ORDER BY rekap.id_rekap;

Maka data yang akan ditampilkan adalah hanya data yang memiliki irisan.
Nah, bagaimana kalau kasusnya seperti berikut?

SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,


rekap.jenis_transaksi, rekap.besaran
FROM pengurus LEFT JOIN rekap
ON pengurus.id_pengurus=rekap.id_pengurus
WHERE pengurus.id_pengurus
pengurus IS NOT NULL ORDER BY rekap.id_rekap;

Bagaimana hasilnya? Mengapa?

3. RIGHT JOIN

Query ini merupakan kebalikan dari Left Join. Dalam Left Join table kanan yang tidak
memiliki irisan dengan table kiri, akan bernilai NULL dengan semua data dari table kiri
akan ditampilkan. Sedangkan dalam Right Join table kiri yang tidak memiliki irisan
dengan table kanan, akan bernilai NULL dengan semua data dari table kanan akan
ditampilkan. Ilustrasi gambar sebagai berikut:

Bentuk penulisan sintaksnya:


SELECT table1.field1, table2.field1, table2.field1, table2.field2
FROM table1 RIGHT JOIN table2
ON table1.field1=table2.field1;
Sekarang kita coba contoh dengan menggunakan right join,
join dan lihat per
perbedaannya
dengan left join.

SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,


rekap.jenis_transaksi, rekap.besaran
FROM rekap RIGHT JOIN pengurus
ON pengurus.id_pengurus=rekap.id_pengurus ORDER BY rekap.id_rekap;

Jika kita rubah posisi tabelnya:

SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,


rekap.jenis_transaksi, rekap.besaran
FROM pengurus RIGHT JOIN rekap
ON pengurus.id_pengurus=rekap.id_pengurus ORDER BY rekap.id_rekap;

Apakah ada kesamaan dengan left join?


Apabila table kiri tidak memiliki irisan dengan table kanan, maka table kiri yang tidak
memiliki irisan akan bernilai NULL dan semua data dari table kanan akan muncul.

SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,


rekap.jenis_transaksi, rekap.besaran
FROM rekap RIGHT JOIN pengurus
ON pengurus.id_pengurus=rekap.id_rekap
pengurus.id_pengurus=rekap. ORDER BY rekap.id_rekap;

Right Join juga memiliki fungsi yang sama dengan Left Join, dimana kamu bisa
menampilkan data table kanan dengan syarat table kiri NULL. Sintaksnya sebagai
berikut:
SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,
rekap.jenis_transaksi, rekap.besaran
FROM rekap RIGHT JOIN pengurus
ON pengurus.id_pengurus=rekap.id_pengurus
WHERE rekap.id_pengurus IS NULL
ORDER BY rekap.id_rekap;

Jika kamu ingin menampilkan data table kanan dengan syarat data table kiri NOT NULL.
Sintaksnya sebagai berikut:
SELECT rekap.id_rekap, pengurus.nama_pengurus, pengurus.jabatan,
rekap.jenis_transaksi, rekap.besaran
FROM rekap RIGHT JOIN pengurus
ON pengurus.id_pengurus=rekap.id_pengurus
WHERE rekap.id_pengurus IS NOT NULL
ORDER BY rekap.id_rekap;
Coba cek dengan contoh kedua right join di atas,, apakah ada kesamaan?
Kesimpulan

 Inner Join hasilnya akan sama dengan Left Join yang table kanannya NOT NULL dan
Right Join yang table kirinya NOT NULL. Mengapa demikian? Mari Berimajinasi!
 Left Join dengan table kanan yang NOT NULL berarti akan menampilkan yang hanya
memiliki irisan. Benar?
 Dan Right Join dengan table kiri NOT NULL berarti akan menampilkan yang hanya
memiliki irisan juga. Inner Join juga menampilkan yang hanya memiliki irisan
diantara table.
 Dengan kata lain Left Join dengan table kanan NOT NULL dan Right Join dengan
table kiri yang NOT NULL akan sama dengan Inner Join.

NB :
 Bila ingin menampilkan semua data yang ada di tabel sebelah kiri baik yang
mempunyai pasangan ataupun yang tidak mempunyai pasangan dengan data pada
tabel di sebelah kanan, maka gunakan left join.
 Sedangkan bila yang terjadi adalah kebalikannya, yaitu ingin menampilkan
semua data yang ada di sebelah kanan baik yang mempunyai pasangan ataupun
yang tidak mempunyai pasangan dengan data pada tabel di sebelah kiri, maka
gunakan right join.
join

“Jika anda berpikir sia-sia,


sia, maka benarlah semuanya sia-sia.
sia sia. Karena manfaat dan hikmah
itu akan tertutup bagi orang-orang
orang orang yang berputus asa.

Brace yourself ! And never give up !”


!

Referensi
Modul #4 Join Praktikum Basis Data 2013

Anda mungkin juga menyukai