PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana INTERSECT Bekerja di PostgreSQL

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

  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 memperbarui stempel waktu secara otomatis di PostgreSQL

  2. Bagaimana cara menginstal postgres dengan NSIS dengan semua parameter?

  3. file postgres db - file mana yang mewakili tabel/indeks tertentu?

  4. Tidak dapat INSERT:ERROR:nilai array harus dimulai dengan { atau informasi dimensi

  5. Bagaimana saya bisa memasukkan komentar kolom di PostgreSQL melalui Python?