Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Operator Oracle INTERSECT Dijelaskan

Di Oracle Database, INTERSECT operator digunakan untuk membuat kueri gabungan yang mengembalikan hasil perpotongan kiri dan kanan SELECT pernyataan. Dengan kata lain, ini menggabungkan dua kueri, tetapi hanya mengembalikan baris yang dikembalikan di kedua kueri.

Contoh

Misalkan kita memiliki tabel berikut:

SELECT * FROM Employees;
SELECT * FROM Customers;

Hasil:

EMPLOYEEID NAMA KARYAWAN
1 Bart
2 Jan
3 Ava
4 Rohit
5 Senin
6 Senin
7 Senin
ID PELANGGAN NAMA PELANGGAN
1 Mia
2 Rohit
3 Petrus
4 Ava
5 Senin
6 Senin

Kita dapat menggunakan INTERSECT operator untuk mengembalikan karyawan yang juga pelanggan:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Hasil:

NAMA KARYAWAN
Ava
Senin
Rohit

Jadi itu hanya mengembalikan nilai-nilai yang muncul di kedua Employees tabel dan Customers meja.

Implementasi Oracle Database dari INTERSECT operator mengembalikan baris yang berbeda saja. Hal ini dapat kita lihat pada contoh di atas. Ini mengembalikan hanya satu baris untuk Monish, meskipun ada banyak karyawan dan banyak pelanggan dengan nama itu.

Beberapa RDBMS memungkinkan kami untuk menyertakan duplikat dalam hasil dengan menerima ALL opsional kata kunci dengan INTERSECT operator, tetapi Oracle bukan salah satunya (setidaknya, tidak pada saat penulisan). SQLite juga tidak.

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:

NAMA KARYAWAN
Rohit
Ava
Senin

Beberapa Hal yang Perlu Diingat

Perhatikan bahwa ekspresi harus cocok dalam jumlah dan harus dalam grup tipe data yang sama. Oleh karena itu, kami tidak dapat melakukan hal berikut:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerId, CustomerName FROM Customers;

Hasil:

ORA-01789: query block has incorrect number of result columns

Atau ini:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerId FROM Customers;

Hasil:

ORA-01790: expression must have same datatype as corresponding expression

Meskipun, kita dapat menggunakan fungsi seperti TO_CHAR() untuk mengonversi kolom ke grup tipe data yang sesuai:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT TO_CHAR(CustomerId) FROM Customers;

Hasil:

no data found

Dalam hal ini, tidak ada data yang ditemukan karena tidak ada CustomerId nilai cocok dengan salah satu EmployeeName nilai-nilai. Tetapi jika mereka melakukannya, maka kita akan melihat kecocokannya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara memilih hanya baris dengan urutan maksimal tanpa menggunakan subquery?

  2. Mengapa fungsi agregat tidak diizinkan di klausa where

  3. BadImageFormatException. Ini akan terjadi ketika berjalan dalam mode 64 bit dengan komponen klien Oracle 32 bit diinstal

  4. Apakah ada fungsi di Oracle yang mirip dengan group_concat di mysql?

  5. Kesalahan ORA-00932 saat menggunakan pilih dengan bidang gabungan dan CLOB