Thursday, July 5, 2018

Seputar fungsi INTERSECT dan EXCEPT di MYSQL dan Alternatif-nya

Seputar fungsi INTERSECT dan EXCEPT di MYSQL dan Alternatif-nya

Cukup kaget awalnya dengan materi ini, secara saya pribadi baru kali ini mendengar istilah INTERSECT dan EXCEPT di mysql. Karna memang selama ini saya merasa belum pernah menggunakan fungsi tersebut, untuk UNION sendiri sudah tidaklah asing mungkin.

Maksud dari INTERSECT ini merupakan sebuan fungsi yang berguna untuk menampilkan irisan dari dua tabel atau lebih. Lalu untuk EXCEPT, dari namanya sudah ketahuan, tanpa saya kasih tahu pun sudah dapat tahu apa maksudnya. Singkatnya untuk EXCEPT ini mirip seperti logika NOT IN atau mungkin fungsi LEFT JOIN.

Cara penggunaan dan syarat penggunaan fungsi INTERSECT dan EXCEPT mirip seperti UNION, dimana salah satu syaratnya ialah, jumlah dan nama field harus sama.

Misal kita punya tabel dengan nama mahasiswa dimana tabel tersebut memiliki field nama, alamat dan kelas. Maka ketika kita akan mengunakan fungsi UNION, EXCEPT, atau pun INTERSECT, tabel lawannya harus memiliki jumlah dan nama field yang sama seperti tabel mahasiswa.

Tapi jika kamu coba menggunakan fungsi EXCEPT atau INTERSECT di mysql itu tidak akan berfungsi, kenapa?

Alasannya karena fungsi EXCEPT dan INTERSECT itu bukan fungsi murni dari mysql, karna memang fungsi itu tidak ada di mysql.

Tapi kamu tak perlu kwatir, disini saya punya query alternatif untuk masalah fungsi INTERSECT atau pun EXCEPT.

ALTERNATIF INTERSECT

Inti dari fungsi inteersect ini, seperti yang sudah saya katakan tadi, yaitu untuk menampilkan irisan, dimana data yang sama atau cocok saja yang akan di tampilkan. Pada kasus ini kamu bisa menggunakan kombinasi INNER JOIN dan DISTINCT.

Disini saya punya tabel dengan nama mahasiswa dengan field :
  • id int(11) auto_increment primary key
  • nama varchar(75)
  • alamat text
  • kelas varchar(20)
Lalu untuk tabel keduanya adalah table siswa dengan filed :
  • id int(11) auto_increment primary key
  • nama varchar(75)
  • alamat text
  • kelas varchar(20)
Jika mengacu pada kedua tabel di atas, maka untuk query INTERSECT-nya kurang lebih seperti ini :

SELECT DISTINCT id, nama
FROM mahasiswa
INNER JOIN siswa USING(id)

Kamu bisa mengotak-ngati sesuai yang kamu inginkan, namun kuncinya disini ada di DISTINCT dan INNER JOIN.

ALTERNATIF EXCEPT

Pada EXCEPT ini kita masih menggunakan tabel yang di pakai di pembahasan INTERSECT, yaitu tabel mahasiswa dan siswa. Jika mengacu pada kedua tabel tersebut maka untuk alternatif query EXCEPT-nya kurang lebih seperti ini :

Versi NOT IN

SELECT mhs.id 
FROM mahasiswa mhs    
WHERE mhs.id NOT IN 
(
    SELECT sw.id 
    FROM siswa sw 
    WHERE sw.id = 1
);

Versi LEFT JOIN

SELECT mhs.id 
FROM mahasiswa mhs    
LEFT JOIN siswa sw ON mhs.id = sw.id
WHERE IFNULL(sw.id, 0) != 1

Kurang lebih seperti itu, semoga kamu dapat memahaminya, dan bermanfaat ilmunya. Jadi intinya, seperti yang sudah saya katakan di awal, kalau fungsi INTERSECT dan EXCEPT itu tidak ada di MYSQL.

Mungkin pembahasan kali ini saya cukupkan sampai disini dulu, saya pamit undur diri, terima kasih.

Tschuss...

Saya hanya seorang "newbie" yang baru bisa ngoding lohor kemarin.

This Is The Newest Post


EmoticonEmoticon