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.

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:
|
1 2 3 4 5 6 7 |
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] INTERSECT SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions]; |
Penjelasan Parameter
- expression1, expression2, … expression_n
- Kolom atau perhitungan yang ingin Anda ambil kembali.
- tables
- Tabel yang ingin Anda ambil dari arsip. Paling tidak ada satu tabel yang tercantum dalam klausa FROM.
- WHERE conditions
- Pilihan. 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.
|
1 2 3 4 5 |
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:
|
1 2 3 |
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:
|
1 2 3 4 5 6 7 |
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:
|
1 2 3 4 5 6 7 |
SELECT products.category_id FROM products WHERE products.category_id < 100 AND products.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.
|
1 2 3 4 5 6 7 |
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:
|
1 2 3 4 5 6 7 8 9 |
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 AND customers.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:
|
1 2 3 |
AND customers.customer_id = contacts.contact_id AND customers.last_name = contacts.last_name AND customers.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.