3 Fungsi Join pada Mysql yang Wajib Anda Ketahui

3 Fungsi Join pada Mysql yang Wajib Anda Ketahui

Join adalah penggabungan table yang dilakukan melalui kolom / key tertentu yang memiliki nilai terkait untuk mendapatkan satu set data dengan informasi lengkap.

Lengkap disini artinya kolom data didapatkan dari kolom-kolom hasil join antar table tersebut.

Join diperlukan karena perancangan table pada sistem transaksional kebanyakan di-normalisasi, salah satu alasannya untuk menghindari redundansi data.

Pada bahasa SQL, operasi join atau penggabungan antar table adalah operasi dasar database relasional yang sangat penting. Untuk mendukung perancangan database relasional yang baik.

Seorang programmer biasanya menggunakan join untuk mengidentifikasi record (baris) untuk bergabung. Jika predikat yang dievaluasi benar, record gabungan kemudian diproduksi dalam format yang diharapkan.

JOIN sangat penting untuk Anda pahami, jika ingin menghasilkan output data yang valid, menjamin integritas data, dan meminimalisir redudansi data. 

Anda akan kesulitan menghubungan antar table jika anda tidak memahami konsep JOIN ini. Jadi, sangatlah penting bagi anda untuk benar-benar memahami konsep join ini dengan baik.

 

PERSIAPAN

Untuk mempermudah saya dalam menjelaskan fungsi dari masing-masing join ini, disini saya telah menyediakan satu database dimana terdapat dua tabel yang saling berhubungan didalamnya.

Adapun bentuk skema desain dari database saya adalah seperti gambar berikut:

Pada skema diatas, anda dapat melihat ada dua table yang saling berhubungan. Yaitu table gaji dan karyawan.

Dimana primary key karyawan_id pada table karyawan berelasi dengan foreign key karyawan_id pada table gaji.

Jika anda belum memiliki struktur table diatas, silahkan buat sebuah database dan eksekusi query berikut ini untuk membuat struktur table.

Table Karyawan:

CREATE TABLE karyawan (
    karyawan_id VARCHAR(10) PRIMARY KEY,
    karyawan_nama VARCHAR(100)
);  

Table Gaji:

CREATE TABLE gaji (
    gaji_id VARCHAR(10) PRIMARY KEY,
    karyawan_id VARCHAR(10),
    gaji_pokok DOUBLE,
    FOREIGN KEY (karyawan_id) REFERENCES karyawan(karyawan_id)
)ENGINE=INNODB;   

Insert beberapa data pada table karyawan dengan mengeksekusi query berikut:

INSERT INTO karyawan (karyawan_id,karyawan_nama)VALUES 
('001','Santi'),('002','Dewi'),('003','Joko'),
('004','Putri'),('005','Nadya'),('006','Febri');

Insert juga beberapa data pada table gaji dengan mengeksekusi query berikut:

INSERT INTO gaji (gaji_id,karyawan_id,gaji_pokok) VALUES 
('GJ001','001','2000000'),('GJ002','003','2500000'),('GJ003','002','2200000'),
('GJ004','004','1900000'),('GJ005','005','2000000');

Adapun data yang dihasilkan seperti gambar berikut:

Pada table diatas, anda dapat melihat bahwa table karyawan terdapat 6 record dan table gaji terdapat 5 record.

Pada table gaji terlihat bahwa karyawan dengan karyawan_id 006 tidak ada di table gaji. Dengan kata lain, karyawan dengan id 006 tidak memiliki gaji.

Bagaimana cara merelasikan dua table ini dengan perintah join?

Mari saya jelaskan satu-persatu!

 

#1. INNER JOIN

INNER JOIN adalah tipe join yang akan kita bahas pertama. Tipe join ini akan mengambil semua row dari table asal dan table tujuan dengan kondisi nilai key yang terkait saja, dan  jika tidak maka row tersebut tidak akan muncul. 

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

Contoh:

SELECT * FROM karyawan INNER JOIN gaji 
ON karyawan.karyawan_id=gaji.karyawan_id;

Query diatas akan menghasilakn output seperti berikut:

Coba Anda perhatikan jumlah record yang ditampilkan!

Ya, record yang ditampilkan sebanyak 5 record. Karena INNER JOIN hanya memperhitungkan kondisi key yang terkait antara table karyawan dengan table gaji.

Sedangkan karyawan dengan karyawan_id=’006’ tidak ditampilkan, karena tidak terkait dengan table gaji.

Jika dibuat diagram venn-nya akan terlihat seperti gambar berikut:

 

#2. LEFT JOIN

LEFT JOIN atau biasa juga dikenal dengan LEFT OUTER JOIN merupakan perintah join untuk menampilkan semua data sebelah kiri dari table yang di joinkan dan menampilkan data sebelah kanan yang cocok dengan kondisi join. Jika tidak ditemukan kecocokan, maka akan di set NULL secara otomatis.

Contoh:

SELECT * FROM karyawan LEFT JOIN gaji 
ON karyawan.karyawan_id=gaji.karyawan_id;

Query diatas akan menghasilkan output seperti berikut:

Coba Anda perhatikan jumlah record yang ditampilkan!

Ya, record yang ditampilkan sebanyak 6 record. Karena LEFT JOIN akan menampilkan semua table sebelah kiri dari kondisi join yaitu table karyawan.

Semua data pada table karyawan akan ditampilkan, meskipun tidak ada kecocokan key pada table gaji. 

Jika dibuat diagram venn-nya akan terlihat seperti gambar berikut:

Selain kondisi diatas, LEFT JOIN juga bisa menampilkan data yang hanya kondisi key pada table tamu (foreign key) kosong (NULL).

Contoh:

SELECT * FROM karyawan LEFT JOIN gaji 
ON karyawan.karyawan_id=gaji.karyawan_id 
WHERE gaji.karyawan_id IS NULL;

Query diatas akan menghasilkan output seperti berikut:

Data yang ditampilkan hanya 1 record. Hal ini dikarenakan, hanya ada satu data yang belum memiliki kecocokan key pada table tamu.

Untuk mempermudah anda memahami perbedaan antara kedua LEFT JOIN ini coba perhatikan diagram venn berikut:

Dengan melihat perbedaan dari diagram venn tersebut, maka Anda akan mudah memahami bagaimana left join ini bekerja.

Ingat LEFT JOIN ini sangat penting untuk anda pahami, karena disaat Anda mulai mengerjakan project yang cukup kompleks, maka anda akan banyak berkutat dengan left join ini.

Contoh pada kasus diatas, hanya dengan memanfaatkan left join kita bisa menampilkan semua data karyawan yang sudah ada gajinya dan siapa yang belum ada gajinya.

Selain itu anda juga dapat menampilkan semua data karyawan yang belum ada gajinya dengan fungsi LEFT JOIN WHERE NULL.

 

#3. RIGHT JOIN

Kebalikan dari LEFT JOIN adalah RIGHT JOIN, atau biasa juga dikenal dengan RIGHT OUTER JOIN. RIGHT JOIN akan menampilkan semua data yang ada di table sebelah kanan dan mencari kecocokan key pada table sebelah kiri.

Jika tidak ditemukan kecocokan, maka akan di set NULL secara otomatis pada table sebelah kiri.

Contoh:

SELECT * FROM gaji RIGHT JOIN karyawan 
ON gaji.karyawan_id=karyawan.karyawan_id;

Query diatas akan menampilkan output seperti gambar berikut:

Pada output diatas, anda dapat melihat bahwa terdapat NULL pada table sebelah kiri. Hal ini dikarenakan tidak ditemukan kecocokan key diantara kedua table.

Untuk lebih mudah memahaminya, perhatikan diagram venn berikut:

Selain kondisi diatas, RIGHT JOIN juga bisa menampilkan data yang hanya kondisi key pada table tamu (foreign key) kosong (NULL).

Contoh:

SELECT * FROM gaji RIGHT JOIN karyawan 
ON gaji.karyawan_id=karyawan.karyawan_id 
WHERE gaji.karyawan_id IS NULL;

Query diatas akan menghasilkan output seperti gambar berikut:

Data yang ditampilkan hanya 1 record. Hal ini dikarenakan, hanya ada satu data yang belum memiliki kecocokan key pada table tamu.

Untuk mempermudah anda memahami perbedaan antara kedua RIGHT JOIN ini coba perhatikan diagram venn berikut:

Perhatikan diagram venn diatas, dan bandingkan dengan diagram venn sebelumnya.

 

KESIMPULAN:

Pembahasan kali ini adalah tentang JOIN pada MySQL.

Terdapat tiga macam JOIN yaitu: INNER JOIN, LEFT JOIN, dan RIGHT JOIN.

INNER JOIN adalah tipe join yang akan kita bahas pertama. Tipe join ini akan mengambil semua row dari table asal dan table tujuan dengan kondisi nilai key yang terkait saja, dan  jika tidak maka row tersebut tidak akan muncul. 

LEFT JOIN merupakan perintah join untuk menampilkan semua data sebelah kiri dari table yang di joinkan dan menampilkan data sebelah kanan yang cocok dengan kondisi join. Jika tidak ditemukan kecocokan, maka akan di set NULL secara otomatis.

Kebalikan dari LEFT JOIN adalah RIGHT JOIN. RIGHT JOIN akan menampilkan semua data yang ada di table sebelah kanan dan mencari kecocokan key pada table sebelah kiri, jika tidak ditemukan kecocokan, maka akan di set NULL secara otomatis pada table sebelah kiri.

Share:



Komentar (4)

Alino, 05 November 2017 21:41 - Reply

Dear Mas Fikri, saya ingin mendikusikan mengenail solusi DML, mohon bisa diberikan nomor yg bisa saya hubungi.

M Fikri, 07 January 2018 12:07 - Reply

Makasih atas responnya mas, Untuk DML saya telah menulis artikel tentang itu, silahkan cek pada kategori Basis Data!

Amiri, 31 July 2018 14:16 - Reply

Gmn mas caranya menggabungkan sebagian baris tabel-a dengan semua baris tabel-b

M Fikri, 01 August 2018 17:12 - Reply

Gunakan right join!

Leave a Comment