Apa yang dimaksud dengan intersect pada mysql

Apa yang dimaksud dengan intersect pada mysql

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

Tutorial MySQL ini menjelaskan Cara Menggunakan Operator MySQL INTERSECT dengan sintaks dan contoh.

Deskripsi

Fungsi Operator MySQL INTERSECT adalah Meskipun tidak ada operator INTERSECT di MySQL, teman-teman dapat dengan mudah mensimulasikan jenis query ini menggunakan klausa IN atau klausa EXISTS, tergantung pada kompleksitas permintaan INTERSECT.

Pertama, mari kita jelaskan apa itu query INTERSECT. Permintaan INTERSECT mengembalikan persimpangan 2 atau lebih kumpulan data. Jika sebuah record ada di kedua kumpulan data, maka akan disertakan dalam hasil INTERSECT. Namun, jika sebuah record ada dalam satu kumpulan data dan tidak di sisi lain, maka akan dihilangkan dari hasil INTERSECT.

Contoh INTERSECT Query

Apa yang dimaksud dengan intersect pada mysql

Penjelasan: Permintaan INTERSECT akan mengembalikan catatan di area yang berwarna biru. Ini adalah catatan yang ada di Dataset1 dan Dataset2.

Syntax

Sintaks untuk operator MySQL INTERSECT adalah:

SELECT expression1,expression2,...expression_n

FROM tables

[WHERE conditions]

INTERSECT

SELECT expression1,expression2, ...expression_n

FROM tables

[WHERE conditions];

Penjelasan Parameter
expression1, expression2, … expression_nKolom atau perhitungan yang ingin Anda ambil kembali.tablesTabel yang ingin Anda ambil dari arsip. Paling tidak ada satu tabel yang tercantum dalam klausa FROM.WHERE conditionsPilihan. Kondisi yang harus dipenuhi agar catatan bisa dipilih.
Catatan
  • Harus ada jumlah ekspresi yang sama di kedua pernyataan SELECT dan memiliki tipe data yang serupa.
Contoh – dengan Single Expression

Pertama, mari jelajahi cara mensimulasikan permintaan operator MySQL INTERSECT yang memiliki satu bidang dengan tipe data yang sama.

Jika database mendukung operator INTERSECT (yang tidak MySQL), ini adalah bagaimana Anda akan menggunakan operator MySQL INTERSECT untuk mengembalikan nilai category_id yang umum di antara tabel products dan inventory.

SELECT category_id

FROM products

INTERSECT

SELECT category_id

FROM inventory;

Karena teman-teman tidak dapat menggunakan operator INTERSECT di MySQL, teman-teman akan menggunakan operator IN untuk mensimulasikan permintaan operator MySQL INTERSECT sebagai berikut:

SELECT products.category_id

FROM products

WHERE products.category_id IN(SELECT inventory.category_id FROM inventory);

Dalam contoh sederhana ini, teman-teman dapat menggunakan operator IN untuk mengembalikan semua nilai category_id yang ada di tabel products dan inventory.

Sekarang, mari kita mempersulit contoh kita lebih jauh dengan menambahkan kondisi WHERE ke query operator MySQL INTERSECT.

Sebagai contoh, ini adalah bagaimana operator MySQL INTERSECT akan terlihat dengan kondisi WHERE:

SELECT category_id

FROM products

WHERE category_id<100

INTERSECT

SELECT category_id

FROM inventory

WHERE quantity>0;

Ini adalah bagaimana teman-teman akan mensimulasikan permintaan operator MySQL INTERSECT menggunakan operator IN dan memasukkan kondisi WHERE:

SELECT products.category_id

FROM products

WHERE products.category_id<100

ANDproducts.category_id IN

   (SELECT inventory.category_id

    FROM inventory

    WHERE inventory.quantity>0);

Dalam contoh ini, klausa WHERE telah ditambahkan yang menyaring tabel produk dan juga hasil dari tabel persediaan.

Contoh – dengan Multiple Expressions

Selanjutnya, mari kita lihat bagaimana mensimulasikan operator MySQL INTERSECT yang menghasilkan lebih dari satu kolom.

Pertama, inilah bagaimana teman-teman akan menggunakan operator MySQL INTERSECT untuk mengembalikan banyak ekspresi.

SELECT contact_id,last_name,first_name

FROM contacts

WHERE contact_id<100

INTERSECT

SELECT customer_id,last_name,first_name

FROM customers

WHERE last_name<>'Heidi';

Sekali lagi, karena teman-teman tidak dapat menggunakan operator MySQL INTERSECT, teman-teman dapat menggunakan klausa EXISTS dalam situasi yang lebih kompleks untuk mensimulasikan permintaan operator MySQL INTERSECT sebagai berikut:

SELECT contacts.contact_id,contacts.last_name,contacts.first_name

FROM contacts

WHERE contacts.contact_id<100

AND EXISTS(SELECT *

            FROM customers

            WHERE customers.last_name<>'Heidi'

            AND customers.customer_id=contacts.contact_id

            ANDcustomers.last_name=contacts.last_name

            AND customers.first_name=contacts.first_name);

Dalam contoh yang lebih kompleks ini, teman-teman dapat menggunakan klausa EXISTS untuk mengembalikan banyak ekspresi yang ada di kedua tabel contacts dimana contact_id kurang dari 100 serta tabel customers dimana last_name tidak sama dengan Heidi.

Karena teman-teman sedang melakukan operator MySQL INTERSECT, teman-teman perlu bergabung dengan bidang berpotongan sebagai berikut:

ANDcustomers.customer_id=contacts.contact_id

ANDcustomers.last_name=contacts.last_name

ANDcustomers.first_name= contacts.first_name

Join disiini dilakukan untuk memastikan bahwa bidang customer_id, last_name, dan first_name dari tabel pelanggan berpotongan dengan bidang contact_id, last_name, dan first_name dari tabel kontak.