Di PostgreSQL, INTERSECT operator menggabungkan dua kueri, tetapi hanya mengembalikan baris yang dikembalikan di kedua kueri.
Sintaks
Sintaksnya seperti ini:
query1 INTERSECT [ALL] query2
Duplikat dihilangkan kecuali INTERSECT ALL digunakan.
Contoh
Misalkan kita memiliki tabel berikut:
SELECT * FROM Employees;
SELECT * FROM Customers; Hasil:
employeeid | employeename
------------+--------------
1 | Bart
2 | Jan
3 | Ava
4 | Rohit
5 | Monish
6 | Monish
7 | Monish
customerid | customername
------------+--------------
1 | Mia
2 | Rohit
3 | Peter
4 | Ava
5 | Monish
6 | Monish
Kita dapat menggunakan INTERSECT operator untuk mengembalikan karyawan yang juga pelanggan:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers; Hasil:
employeename -------------- Ava Rohit Monish
Jadi kami hanya mendapatkan nilai yang muncul di Employees tabel yang juga muncul di Customers meja.
Secara default, ini mengembalikan baris yang berbeda, jadi hanya satu baris yang dikembalikan untuk Monish, meskipun ada beberapa karyawan dan beberapa pelanggan dengan nama itu.
Ini sama dengan melakukan ini:
SELECT EmployeeName FROM Employees
INTERSECT DISTINCT
SELECT CustomerName FROM Customers; Hasil:
employeename -------------- Ava Rohit Monish
Jadi kami mendapatkan hasil yang sama dengan yang kami dapatkan ketika kami tidak menyertakan DISTINCT operator.
Sertakan Duplikat
Seperti disebutkan, INTERSECT operator hanya mengembalikan nilai yang berbeda secara default. Tapi kita bisa menambahkan ALL kata kunci untuk menyertakan duplikat:
SELECT EmployeeName FROM Employees
INTERSECT ALL
SELECT CustomerName FROM Customers; Hasil:
employeename -------------- Ava Rohit Monish Monish
Kali ini kami mendapat empat baris, bukan tiga baris yang kami dapatkan di contoh pertama kami.
Kita dapat melihat bahwa dua baris yang berisi nama Monish dikembalikan, bukan hanya satu seperti pada contoh pertama kita. Sebenarnya ada tiga pelanggan bernama Monish, tetapi hanya dua karyawan dengan nama itu. Oleh karena itu, operasi hanya memotong dua dari mereka.
Kueri Alternatif
Anda bisa mendapatkan hasil yang sama tanpa menggunakan INTERSECT operator. Misalnya, kita dapat menulis ulang contoh pertama kita menjadi ini:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName); Hasil:
employeename -------------- Ava Rohit Monish