Program
Operasi himpunan menjadi landasan SQL dan memungkinkan kita menggabungkan, membandingkan, serta memfilter data dari berbagai sumber. Operasi ini sangat penting untuk tugas-tugas mulai dari integrasi dan pembersihan data hingga analitik lanjutan dan pelaporan.
Dalam tutorial ini, kita akan mempelajari apa itu operator himpunan, bagaimana penggunaannya di SQL, penerapannya secara praktis, dan banyak lagi! Jika Anda mencari sumber belajar SQL yang lengkap, lihat SQL Fundamentals yang terdiri dari tujuh kursus ini.
Bagi Anda yang ingin cepat, mari mulai dengan jawaban sangat singkat tentang apa itu operasi himpunan di SQL.
Apa Itu Operasi Himpunan di SQL?
Operasi himpunan di SQL adalah teknik untuk menggabungkan atau membandingkan hasil dari dua atau lebih pernyataan SELECT. Operasi ini berperan seperti operasi himpunan matematis, memungkinkan kita menemukan gabungan, irisan, atau selisih antar baris yang dikembalikan oleh kueri. Ini menjadikannya tak tergantikan saat menganalisis data dari berbagai sumber atau perspektif.
Berikut gambaran singkat operasi himpunan inti:
-
UNION: Menggabungkan semua baris unik dari dua atau lebih pernyataanSELECT, menghapus duplikasi. -
UNION ALL: Menggabungkan semua baris dari dua atau lebih pernyataanSELECT, mempertahankan duplikasi. -
INTERSECT: Mengembalikan hanya baris yang muncul di kedua pernyataanSELECT. -
EXCEPT: Mengembalikan baris dari pernyataanSELECTpertama yang tidak muncul di pernyataan kedua.
Perbandingan dengan operasi aljabar relasional
Aljabar relasional adalah kerangka teoretis yang menjadi dasar untuk memahami kueri basis data. Ia menawarkan operasi abstrak seperti proyeksi, seleksi, dan join, berakar pada prinsip matematis dan independen dari sistem basis data tertentu. Anggap saja ini sebagai logika "di balik layar" yang menggerakkan interaksi kita dengan basis data.
Operator himpunan di SQL menawarkan implementasi praktis dari konsep-konsep ini dalam lingkungan basis data. Operator ini memungkinkan kita melakukan operasi himpunan seperti gabungan, irisan, dan selisih langsung pada himpunan hasil kueri SQL.
Sementara aljabar relasional memberikan fondasi formal untuk operasi basis data, operator himpunan di SQL menyediakan antarmuka yang terstandarisasi dan mudah digunakan untuk tugas manipulasi data.
Memahami hubungan antara operator himpunan dan operasi aljabar relasional memberi wawasan tentang landasan teoretis SQL. Mengetahui kaitan ini membantu Anda menulis kueri dengan model mental yang lebih jelas tentang apa yang terjadi di balik layar.
Jenis Operator Himpunan di SQL
Ada tiga operator himpunan utama di SQL:
-
UNION -
INTERSECT -
EXCEPT(atauMINUSdi beberapa dialek)
Operator-operator ini secara matematis berkorespondensi dengan konsep gabungan, irisan, dan selisih himpunan.
Aturan Menggunakan Operator Himpunan
Sebelum menggabungkan kueri dengan operator himpunan, ada empat persyaratan yang harus dipenuhi. Salah satunya saja salah, kueri Anda akan gagal.
-
Jumlah kolom sama: Setiap
SELECTharus mengembalikan jumlah kolom yang sama. Jika satu kueri mengembalikan tiga dan yang lain dua, basis data akan melempar error. -
Tipe data kompatibel: Kolom yang bersesuaian harus memiliki tipe yang cocok. Anda tidak bisa menggabungkan kolom nama
VARCHARdengan IDINTEGERpada posisi yang sama. -
Urutan kolom sama: SQL memetakan kolom berdasarkan posisi, bukan nama. Kolom pertama kueri satu dipetakan ke kolom pertama kueri dua, terlepas dari apa nama kolom tersebut.
-
ORDER BYhanya di akhir:ORDER BYharus muncul sekali, di paling akhir kueri gabungan. Anda tidak dapat menggunakannya di dalam pernyataanSELECTindividual.
Satu detail lagi: nama kolom pada output berasal dari pernyataan SELECT pertama. Alias pada kueri berikutnya akan diabaikan, jadi tambahkan alias hanya pada kueri pertama jika Anda memerlukan nama output khusus.
Cara Menggunakan Operator UNION di SQL
Operator UNION menggabungkan hasil dari dua atau lebih kueri SELECT menjadi satu himpunan hasil, secara bawaan menghapus baris duplikat.
Sebagai contoh, misalkan kita memiliki dua tabel, employees dan contractors, masing-masing dengan kolom serupa seperti contractors, department, dan salary. Untuk tujuan pembelajaran, mari gunakan dua tabel contoh berikut:
employees:
|
name |
department |
salary |
|
Alice |
Marketing |
65000 |
|
Bob |
Sales |
70000 |
|
Carol |
Engineering |
80000 |
|
John |
HR |
55000 |
contractors:
|
name |
department |
salary |
|
David |
Marketing |
60000 |
|
Eva |
Sales |
68000 |
|
Carol |
Engineering |
75000 |
Kita bisa menggabungkan hasil dari kedua tabel dengan perintah berikut:
-- Using UNION to combine all employees and contractors
SELECT name, department, salary FROM employees
UNION
SELECT name, department, salary FROM contractors;
Kueri ini memilih kolom name, department, dan salary dari tabel employees dan contractors lalu menggabungkannya menjadi satu himpunan hasil. Operator UNION secara otomatis menghapus baris duplikat dari hasil akhir.
|
name |
department |
salary |
|
Alice |
Marketing |
65000 |
|
Bob |
Sales |
70000 |
|
Carol |
Engineering |
80000 |
|
John |
HR |
55000 |
|
David |
Marketing |
60000 |
|
Eva |
Sales |
68000 |
Perhatikan bahwa Carol, yang muncul di kedua tabel, hanya terdaftar sekali pada hasil. Jika kita ingin mempertahankan kedua kemunculan Carol (dengan gaji berbeda), kita akan menggunakan UNION ALL.
UNION vs UNION ALL
Operator UNION tidak menghapus nilai NULL. Jika sebuah kolom berisi nilai NULL pada satu himpunan hasil dan berisi nilai bukan NULL pada kolom bersesuaian di himpunan hasil lainnya, nilai NULL akan tetap ada di himpunan hasil akhir yang dihasilkan oleh operator UNION.
Jika kita ingin memasukkan nilai NULL dalam himpunan hasil dan mencegah penghapusannya oleh operator UNION, kita dapat menggunakan operator UNION ALL. Operator ini menggabungkan hasil dari beberapa kueri SELECT, termasuk semua baris dari setiap himpunan hasil, terlepas apakah itu duplikat atau mengandung nilai NULL.
Cara Menggunakan Operator INTERSECT di SQL
Operator INTERSECT mengembalikan hanya baris yang muncul di kedua himpunan hasil. Anggap saja seperti mencari orang yang termasuk dalam kedua kelompok.
Mari gunakan INTERSECT untuk mengkueri tabel kita di atas. Demi contoh, kita hanya mengkueri kolom name dan department:
-- Using INTERSECT to find common employees
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;
Kueri ini memilih kolom name dan department dari kedua tabel employees dan contractors dan mengembalikan hanya baris yang ada di kedua tabel berdasarkan semua kolom yang dipilih.
|
name |
department |
|
Carol |
Engineering |
Operator INTERSECT menangani nilai NULL berdasarkan aturan perbandingan standar, menganggap nilai NULL setara saat membandingkan kolom yang bersesuaian. Operator ini juga menghasilkan himpunan kosong saat berhadapan dengan himpunan hasil kosong.
Dengan kata lain, jika nilai NULL ada pada satu himpunan hasil dan kolom bersesuaian pada himpunan hasil lain berisi nilai bukan NULL, baris tersebut tidak dianggap sama – sehingga tidak akan disertakan dalam hasil irisan.
Selain itu, jika salah satu himpunan hasil yang diberikan ke operator INTERSECT kosong, maka hasil keseluruhannya juga kosong. Tidak ada baris yang sama antara himpunan kosong dan apa pun.
Cara Menggunakan Operator UNION di SQL
Operator EXCEPT mengembalikan baris dari himpunan hasil pertama yang tidak ada di himpunan kedua.
Di Oracle Database, EXCEPT ditulis sebagai MINUS; semua dialek utama lainnya (PostgreSQL, SQL Server, MySQL 8.0.31+, SQLite) menggunakan EXCEPT.
Sebagai contoh, misalkan kita mengeksekusi kueri berikut:
-- Using EXCEPT to find employees who are not contractors
SELECT name, department, salary FROM employees
EXCEPT
SELECT name, department, salary FROM contractors;
Kolom name, department, dan salary dipilih dari tabel employees dan hanya mengembalikan baris yang tidak ada di tabel contractors.
|
name |
department |
salary |
|
Alice |
Marketing |
65000 |
|
Bob |
Sales |
70000 |
|
John |
HR |
55000 |
Operator EXCEPT juga mengikuti aturan perbandingan standar untuk menangani nilai NULL. Perilakunya terhadap himpunan hasil kosong menghasilkan himpunan kosong jika himpunan hasil pertama kosong atau menyertakan semua baris dari himpunan hasil pertama jika himpunan hasil kedua kosong.
Operator Himpunan SQL: Performa dan Optimasi
Dampak operator himpunan terhadap performa kueri di SQL dapat bervariasi tergantung pada faktor seperti ukuran dataset yang terlibat, kompleksitas kueri, dan sistem manajemen basis data (DBMS) yang digunakan.
Mari uraikan faktor-faktor kunci dan strategi optimasinya.
Volume data dan kompleksitas kueri
Saat bekerja dengan data berukuran besar, operator himpunan dapat berdampak signifikan pada performa kueri karena ukuran himpunan hasil yang perlu digabungkan, diiris, atau dibandingkan meningkatkan waktu pemrosesan yang dibutuhkan untuk melakukan operasi tersebut.
Kueri kompleks yang berisi banyak subkueri, join, atau operator himpunan dapat menimbulkan overhead pemrosesan tambahan dan memengaruhi performa kueri. Operasi berantai atau operator himpunan bertingkat bisa semakin memperburuk konsekuensi performa.
Pengindeksan dan teknik optimasi
Pengindeksan yang tepat pada kolom-kolom yang terlibat dalam operasi himpunan dapat meningkatkan performa kueri secara signifikan. Indeks membantu mesin basis data dengan cepat menemukan dan mengambil baris yang relevan, mengurangi kebutuhan pemindaian tabel penuh dan mempercepat eksekusi kueri.
Untuk meningkatkan performa kueri yang melibatkan operator himpunan, administrator dan pengembang basis data dapat menerapkan teknik seperti penulisan ulang kueri, analisis rencana eksekusi, dan optimasi skema. Teknik seperti caching kueri dan materialized view juga dapat digunakan untuk menghitung terlebih dahulu dan menyimpan hasil kueri kompleks, sehingga mengurangi beban komputasi dari operasi himpunan.
Mesin basis data dan sumber daya perangkat keras
Performa operasi himpunan dapat bervariasi tergantung pada mesin basis data yang mendasari dan kemampuan optimasinya. Berbagai DBMS mungkin menerapkan strategi dan algoritma optimasi yang berbeda untuk memproses operasi himpunan, yang mengarah pada variasi performa.
Ketersediaan sumber daya perangkat keras seperti CPU, memori, dan I/O disk juga memengaruhi performa kueri yang melibatkan operator himpunan. Sumber daya perangkat keras yang memadai dapat membantu mengurangi bottleneck performa dan memastikan eksekusi kueri yang efisien.
Operator Himpunan SQL dalam Praktik
Operator himpunan bukan hanya alat teoretis; operator ini memiliki penerapan nyata yang dapat berdampak signifikan pada keputusan bisnis. Mari telusuri contoh sederhana bagaimana sebuah perusahaan dapat menggunakan operator himpunan untuk melakukan segmentasi basis pelanggan untuk kampanye pemasaran bertarget.
Skenarionya
Bayangkan sebuah perusahaan yang berjualan baik secara online maupun di toko fisik. Mereka memiliki dua dataset terpisah:
- Pembelian online: ID pelanggan, riwayat pembelian, demografi, dan lokasi untuk pembeli online.
- Transaksi di toko: Informasi serupa untuk pelanggan yang berbelanja langsung.
Menggunakan operator himpunan
Untuk mendapatkan gambaran lengkap semua pelanggan, perusahaan terlebih dahulu akan menggunakan UNION untuk menggabungkan kedua dataset menjadi satu tabel, menghapus duplikasi. Ini memberi mereka tampilan terpadu atas seluruh basis pelanggan.
Berikutnya, mereka dapat menggunakan INTERSECT untuk mengidentifikasi pelanggan yang berbelanja baik online maupun di toko. Segmen ini sangat berharga karena mereka sangat terlibat dengan merek di berbagai kanal.
Untuk menemukan peluang promosi lintas kanal, perusahaan dapat menggunakan EXCEPT. Misalnya, SELECT * FROM online_purchases EXCEPT SELECT * FROM in_store_transactions akan menemukan pelanggan yang hanya berbelanja online tetapi tidak di toko. Perusahaan kemudian dapat menargetkan pelanggan ini dengan promosi yang mendorong mereka mengunjungi lokasi fisik.
Melampaui segmentasi
Dengan segmen-segmen ini teridentifikasi, perusahaan dapat melangkah lebih jauh, menyaringnya berdasarkan faktor tambahan seperti demografi atau riwayat pembelian. Pemahaman mendalam ini memungkinkan mereka menyesuaikan kampanye pemasaran dengan lebih presisi.
Operator Himpunan vs. JOIN
Baik operator himpunan maupun SQL JOIN menggabungkan data dari beberapa kueri, tetapi bekerja dengan cara berbeda. Pertanyaan utamanya adalah apakah Anda ingin menggabungkan baris atau kolom.
| Feature | Set Operators | JOINs |
|---|---|---|
| Menggabungkan | Baris (menumpuk kueri secara vertikal) | Kolom (melebarkan baris secara horizontal) |
| Mensyaratkan | Jumlah kolom sama dan tipe data kompatibel | Kolom kunci bersama antar tabel |
| Gunakan saat | Menggabungkan dataset serupa, mencari irisan atau perbedaan antar himpunan hasil | Memperkaya sebuah baris dengan data terkait dari tabel lain |
| Penanganan duplikasi | UNION menghapus duplikasi; UNION ALL mempertahankannya |
Tergantung jenis join dan datanya |
| Jenis | UNION, UNION ALL, INTERSECT, EXCEPT/MINUS |
INNER, LEFT, RIGHT, FULL OUTER, CROSS |
Keterbatasan dan Pertimbangan Operator Himpunan
Saat menggunakan operator himpunan di SQL, penting untuk mempertimbangkan beberapa keterbatasan dan faktor yang dapat memengaruhi performa kueri, akurasi hasil, dan kegunaan secara keseluruhan.
Kompatibilitas tipe data dan nilai NULL
Kolom yang bersesuaian dalam himpunan hasil harus memiliki tipe data yang kompatibel. Pastikan kolom yang bersesuaian memiliki tipe data yang kompatibel sebelum menggabungkan kueri. Ketidakcocokan tipe menyebabkan error yang mudah terlewat.
Operator himpunan dapat memperlakukan nilai NULL secara berbeda tergantung pada DBMS dan operator spesifiknya. Untuk menghindari kesalahan, pengembang harus memahami bagaimana nilai NULL diperlakukan.
Dampak performa dan baris duplikat
Operasi himpunan dapat berdampak besar pada performa kueri, terutama saat menangani dataset besar atau kompleks. Faktor seperti pengindeksan, optimasi kueri, dan sumber daya perangkat keras dapat memengaruhi performa. Teknik optimasi dan strategi penalaan performa penting untuk mengurangi bottleneck performa.
Secara bawaan, operator himpunan menghapus baris duplikat dari himpunan hasil. Namun, dalam beberapa kasus, mempertahankan baris duplikat mungkin diperlukan. Penting untuk memahami perilaku operator himpunan terkait baris duplikat dan menggunakan teknik yang sesuai untuk menanganinya bila diperlukan.
Pengurutan hasil dan keterbatasan memori
Operator himpunan tidak menjamin urutan hasil pada keluaran akhir. Untuk mengurutkan hasil gabungan, tambahkan klausa ORDER BY di paling akhir dari seluruh kueri, setelah pernyataan SELECT terakhir.
Operasi himpunan dapat mengonsumsi memori dan sumber daya yang signifikan, terutama saat menangani dataset besar. Keterbatasan memori dan sumber daya harus dipertimbangkan untuk menghindari penurunan performa atau ketidakstabilan sistem.
Kompleksitas, keterawatan, dan kompatibilitas lintas DBMS
Kueri kompleks yang melibatkan banyak operator himpunan, subkueri, dan join dapat menantang untuk dipahami, dirawat, dan di-debug. Untuk meningkatkan keterbacaan dan keterawatan, kueri harus ringkas, terdokumentasi dengan baik, dan modular.
Operator himpunan dapat memiliki variasi dalam sintaks dan perilaku di berbagai sistem manajemen basis data (DBMS). Mengetahui perbedaan ini penting saat menulis kueri SQL yang kompatibel lintas platform.
Penutup
Operator himpunan menyelesaikan masalah spesifik: menggabungkan atau membandingkan himpunan hasil tanpa mengetahui sebelumnya baris mana yang tumpang tindih.
Operator ini mencakup UNION, INTERSECT, dan EXCEPT: tiga operator untuk menggabungkan, membandingkan, dan mengurangkan himpunan hasil.
Jika Anda ingin belajar lebih jauh, lihat kursus Joining Data in SQL ini.
FAQ Operator SQL
Apa perbedaan antara UNION ALL dan UNION?
UNION ALL menyertakan semua baris dari kedua kueri, meskipun ada duplikasi. UNION menghapus baris duplikat.
Apa bedanya UNION dengan JOIN di SQL?
UNION menggabungkan hasil kueri secara vertikal, menambahkan baris dari satu kueri ke kueri lain. JOIN menggabungkan tabel secara horizontal, mencocokkan baris berdasarkan kolom terkait dan membuat himpunan hasil yang lebih lebar.
Apakah ada pertimbangan performa saat menggunakan operasi himpunan?
Operasi himpunan bisa membutuhkan komputasi yang mahal, terutama saat menangani dataset besar. Penting untuk mengoptimalkan kueri individual dan menggunakan indeks bila memungkinkan untuk meningkatkan performa.
Apa perbedaan antara EXCEPT dan NOT IN?
EXCEPT dan NOT IN dapat menghasilkan hasil yang serupa, tetapi perilakunya berbeda terhadap nilai NULL. EXCEPT memperlakukan nilai NULL sebagai setara saat membandingkan baris, jadi dua nilai NULL pada posisi kolom yang sama akan menyebabkan baris dikeluarkan. NOT IN, sebaliknya, tidak mengembalikan baris sama sekali jika subkueri berisi nilai NULL, karena perbandingan NULL tidak terdefinisi di SQL. Untuk dataset besar, EXCEPT juga bisa lebih mudah dibaca daripada subkueri berkorelasi NOT IN.
Bisakah saya menggunakan ORDER BY dengan operator himpunan?
Bisa, tetapi hanya sekali, di paling akhir seluruh kueri. Anda tidak dapat menggunakan ORDER BY di dalam pernyataan SELECT individual dalam operasi himpunan. Untuk mengurutkan hasil gabungan, tambahkan satu klausa ORDER BY setelah pernyataan SELECT terakhir.
Contoh:
SELECT name FROM employees
UNION
SELECT name FROM contractors
ORDER BY name ASC;Apakah MySQL mendukung INTERSECT dan EXCEPT?
MySQL menambahkan dukungan untuk INTERSECT dan EXCEPT pada versi 8.0.31. Jika Anda menggunakan versi yang lebih lama, Anda perlu mengemulasinya: gunakan INNER JOIN atau subkueri dengan IN untuk mereplikasi INTERSECT, dan LEFT JOIN ... WHERE IS NULL atau subkueri NOT IN untuk mereplikasi EXCEPT. Oracle menggunakan MINUS alih-alih EXCEPT.

