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

Bagaimana KECUALI Bekerja di PostgreSQL

Di PostgreSQL, EXCEPT operator mengembalikan baris yang dikembalikan oleh kueri input kiri yang tidak dikembalikan oleh kueri input kanan. Ini juga bisa disebut sebagai perbedaan antara dua kueri.

Sintaks

Sintaksnya seperti ini:

query1 EXCEPT [ALL] query2

Duplikat dihilangkan kecuali EXCEPT ALL digunakan.

Contoh

Misalkan kita memiliki tabel berikut:

SELECT * FROM Teachers;
SELECT * FROM Students;

Hasil:

 teacherid | teachername 
-----------+-------------
         1 | Warren
         2 | Ben
         3 | Cathy
         4 | Cathy
         5 | Bill
         6 | Bill

 studentid | studentname 
-----------+-------------
         1 | Faye
         2 | Jet
         3 | Spike
         4 | Ein
         5 | Warren
         6 | Bill

Kita dapat menggunakan EXCEPT operator untuk mengembalikan guru yang bukan juga siswa:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Hasil:

 teachername 
-------------
 Cathy
 Ben

Jadi kita hanya mendapatkan nilai yang muncul di Teachers tabel yang juga tidak muncul di Students meja.

Secara default, EXCEPT operator mengembalikan baris yang berbeda. Jadi dalam contoh kita, hanya satu baris yang dikembalikan untuk Cathy , meskipun ada dua guru dengan nama itu.

Contoh di atas setara dengan kueri berikut:

SELECT TeacherName FROM Teachers
EXCEPT DISTINCT
SELECT StudentName FROM Students;

Hasil:

 teachername 
-------------
 Cathy
 Ben

Ini adalah hasil yang sama yang kami dapatkan ketika tidak ada DISTINCT yang eksplisit kata kunci. Kami dapat menyertakan duplikat dengan ALL kata kunci (lebih lanjut tentang ini nanti).

Kita bisa mendapatkan hasil yang berbeda, tergantung tabel mana yang di kiri dan mana yang di kanan. Berikut adalah contoh yang menempatkan Students tabel di sebelah kiri dan Teachers di sebelah kanan:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Hasil:

 studentname 
-------------
 Faye
 Jet
 Spike
 Ein

Kali ini kami mendapatkan siswa yang bukan juga guru.

Sertakan Duplikat

Secara default, EXCEPT operator secara implisit menerapkan DISTINCT operasi. Dengan kata lain, ini hanya mengembalikan nilai yang berbeda secara default.

Kami dapat menyertakan ALL kata kunci untuk memasukkan duplikat dalam hasil kami:

SELECT TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentName FROM Students;

Hasil:

 teachername 
-------------
 Cathy
 Cathy
 Bill
 Ben

Kali ini kami mendapat empat baris, bukan dua baris yang kami dapatkan di contoh pertama kami.

Kita dapat melihat bahwa kedua Cathys dikembalikan, bukan hanya satu seperti pada contoh pertama kita.

Adapun Bill? Ada dua RUU di Teachers tabel, tetapi hanya satu yang dikembalikan ke sini. Itu mungkin karena ada satu RUU di Students tabel, yang akan mengecualikan salah satu Tagihan dari hasil kami.

Alternatif

Anda bisa mendapatkan hasil yang sama tanpa menggunakan EXCEPT operator. Misalnya, kita dapat menulis ulang contoh pertama kita menjadi ini:

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Hasil:

 teachername 
-------------
 Cathy
 Ben

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Hanya Nilai Numerik dari Kolom Database PostgreSQL

  2. Bagaimana cara menggunakan % operator dari ekstensi pg_trgm?

  3. Postgres Tertanam untuk Tes Boot Musim Semi

  4. Bagikan koneksi ke postgres db di seluruh proses dengan Python

  5. Pilih baris yang tidak ada di tabel lain