Soal 1Manakah deskripsi yang benar tentang SELECT name FROM employee UNION SELECT name FROM contractor;?
Operasi Himpunan — UNION / INTERSECT / EXCEPT
Pelajari operasi himpunan SQL UNION / UNION ALL / INTERSECT / EXCEPT dengan data karyawan dan kontraktor, semuanya berjalan langsung di browser kamu.
Data yang dipakai di artikel ini — employee dan contractor
Operasi himpunan (operasi yang menggabungkan beberapa hasil SELECT menjadi satu sebagai gabungan, irisan, atau selisih himpunan) adalah sintaks untuk menumpuk hasil yang diambil terpisah secara vertikal, atau mengambil baris yang sama-sama ada di keduanya atau baris yang hanya muncul di salah satu sisi.
Kamu akan bekerja dengan empat di antaranya: UNION (gabungan), UNION ALL (gabungan yang mempertahankan duplikat), INTERSECT (irisan), dan EXCEPT (selisih).
Materinya adalah tabel karyawan employee (30 baris) dan tabel kontraktor contractor (6 baris).
Kamu akan mencoba keempat operasi himpunan satu per satu — menggabungkan dua hasil dengan kondisi berbeda di dalam employee, atau memadukan hasil yang diambil dari tabel berbeda seperti employee dan contractor menjadi satu.
Premis operasi himpunan — menjadi kompatibel UNION
Keempat operasi himpunan menggabungkan dua hasil SELECT atau lebih dalam bentuk SELECT ... operator SELECT ....
Premis untuk menggabungkan adalah SELECT atas dan bawah kompatibel UNION (jumlah kolom sama, dan tipe kolom yang bersesuaian kompatibel).
SELECT name FROM employee dan SELECT name FROM contractor keduanya adalah satu kolom string, jadi kompatibel.
Di sisi lain, SELECT name FROM employee dan SELECT name, city FROM contractor punya jumlah kolom berbeda, jadi kamu tidak bisa menggabungkannya.
-- kompatibel UNION: kedua sisi 2 kolom (name, city)
SELECT name, city FROM employee WHERE city = 'Tokyo'
UNION
SELECT name, city FROM contractor
ORDER BY name;
-- ORDER BY hanya sekali di paling akhir
-- kamu tidak bisa menulis ORDER BY per-SELECT di tengah
UNION dan UNION ALL — buang duplikat atau pertahankan
UNION menumpuk dua hasil secara vertikal dan menggabungkan baris yang sama persis menjadi satu (penghapusan duplikat).
UNION ALL tidak melakukan penghapusan duplikat dan mempertahankan setiap baris dari kedua sisi apa adanya.
Ketika kamu tidak perlu membuang duplikat, atau ketika kamu ingin mempertahankan "berapa banyak baris yang muncul di keduanya," pakai UNION ALL.
UNION menjalankan pengurutan internal untuk mendeteksi duplikat, jadi UNION ALL adalah operasi yang lebih ringan.
Contoh di bawah menggabungkan hasil "tinggal di Kyoto" dan hasil "gaji 7 juta atau lebih" di dalam employee.
Karyawan yang memenuhi kedua kondisi menjadi 1 baris dengan UNION, dan 2 baris dengan UNION ALL.
-- UNION: baris duplikat digabungkan menjadi satu
SELECT name FROM employee WHERE city = 'Osaka'
UNION
SELECT name FROM employee WHERE salary >= 5000000
ORDER BY name;
-- UNION ALL: duplikat dipertahankan (baris yang cocok keduanya muncul dua kali)
SELECT name FROM employee WHERE city = 'Osaka'
UNION ALL
SELECT name FROM employee WHERE salary >= 5000000
ORDER BY name;
INTERSECT dan EXCEPT — baris yang sama dan baris selisih
INTERSECT(irisan) mengembalikan hanya baris yang muncul sama-sama di kedua hasil.EXCEPT(selisih) mengembalikan baris yang ada di hasil atas tapi tidak ada di hasil bawah.
Keduanya otomatis membuang duplikat (perilaku yang sama dengan UNION).
EXCEPT adalah operasi asimetris yang hasilnya berubah jika kamu menukar sisi atas dan bawah — A EXCEPT B dan B EXCEPT A adalah hal yang berbeda.
Contoh di bawah menggabungkan name untuk "tinggal di Kyoto" dan "gaji 6,5 juta atau lebih" di dalam employee dengan INTERSECT, mengambil karyawan yang memenuhi keduanya (baris yang sama).
-- INTERSECT: karyawan yang tinggal di Osaka DAN dengan gaji 6000000 atau lebih
SELECT name FROM employee WHERE city = 'Osaka'
INTERSECT
SELECT name FROM employee WHERE salary >= 6000000
ORDER BY name;
-- EXCEPT: karyawan yang tinggal di Osaka tapi BUKAN dengan gaji 6000000 atau lebih
SELECT name FROM employee WHERE city = 'Osaka'
EXCEPT
SELECT name FROM employee WHERE salary >= 6000000
ORDER BY name;
Operasi himpunan lintas tabel berbeda — employee dan contractor
Operasi himpunan bekerja tidak hanya di dalam satu tabel tapi juga antara hasil yang diambil dari tabel terpisah.
Selama keduanya kompatibel UNION (jumlah dan tipe kolom cocok), tabelnya boleh berbeda.
Ketika kamu ingin mengurutkan hasil gabungan, tulis satu ORDER BY setelah SELECT paling akhir (ia berlaku untuk seluruh hasil gabungan).
Menggabungkan name tabel karyawan employee dan tabel kontraktor contractor dengan INTERSECT memungkinkanmu memunculkan orang yang muncul di keduanya dengan nama yang sama.
Contoh di bawah menarik hanya satu kolom name dan menggabungkannya dengan INTERSECT.
Karena name kedua tabel punya Alice dan Bob, 2 orang dikembalikan sebagai baris yang sama.
-- nama yang muncul di employee dan contractor
SELECT name FROM employee
INTERSECT
SELECT name FROM contractor
ORDER BY name;
-- nama di contractor tapi tidak di employee (hanya eksternal)
SELECT name FROM contractor
EXCEPT
SELECT name FROM employee
ORDER BY name;
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Ketika menggabungkan dua SELECT dengan operasi himpunan, manakah kondisi yang harus selalu terpenuhi?
Soal 3Manakah yang benar tentang hubungan antara A EXCEPT B dan B EXCEPT A?