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

Perbedaan antara notasi Oracle plus (+) dan notasi ANSI JOIN?

AFAIK, (+) notasi hanya hadir untuk kompatibilitas mundur karena Oracle memulai debutnya sebelum standar ANSI untuk bergabung diberlakukan. Ini khusus untuk Oracle dan Anda harus menghindari menggunakannya dalam kode baru jika tersedia versi yang memenuhi standar yang setara.

Sepertinya ada perbedaan antara keduanya, dan (+) notasi memiliki batasan yang tidak dimiliki sintaks ANSI join. Oracle sendiri menyarankan Anda untuk tidak menggunakan (+) notation.Deskripsi lengkap di sini di Oracle® Database SQL Language Reference11g Rilis 1 (11.1):

Oracle menyarankan Anda menggunakan FROM klausa OUTER JOIN sintaks daripada operator bergabung Oracle. Kueri gabungan luar yang menggunakan operator bergabung Oracle (+) tunduk pada aturan dan batasan berikut, yang tidak berlaku untuk FROM klausa OUTER JOIN sintaks:

  • Anda tidak dapat menentukan (+) operator di blok kueri yang juga berisi FROM klausa bergabung dengan sintaks.
  • (+) operator hanya dapat muncul di WHERE klausa atau, dalam konteks korelasi kiri (saat menentukan TABLE klausa) di FROM klausa, dan hanya dapat diterapkan ke kolom tabel atau tampilan.
  • Jika A dan B digabungkan dengan beberapa kondisi join, maka Anda harus menggunakan (+) operator dalam semua kondisi ini. Jika tidak, maka Oracle Database hanya akan mengembalikan baris yang dihasilkan dari gabungan sederhana, tetapi tanpa peringatan atau kesalahan untuk memberi tahu Anda bahwa Anda tidak memiliki hasil gabungan luar.
  • (+) operator tidak menghasilkan gabungan luar jika Anda menentukan satu tabel di kueri luar dan tabel lainnya di kueri dalam.
  • Anda tidak dapat menggunakan (+) operator untuk melakukan outer-join ke tabel itu sendiri, meskipun self join adalah valid.

Misalnya, pernyataan berikut tidak valid:

SELECT employee_id, manager_id
FROM employees
WHERE employees.manager_id(+) = employees.employee_id;

Namun, self join berikut ini valid:

SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id;
  • (+) operator hanya dapat diterapkan ke kolom, bukan ekspresi arbitrer. Namun, ekspresi arbitrer dapat berisi satu atau lebih kolom yang ditandai dengan (+) operator.
  • Sebuah WHERE kondisi yang mengandung (+) operator tidak dapat digabungkan dengan kondisi lain menggunakan OR operator logika.
  • Sebuah WHERE kondisi tidak dapat menggunakan IN kondisi perbandingan untuk membandingkan kolom yang ditandai dengan (+) operator dengan ekspresi.

Jika WHERE klausa berisi kondisi yang membandingkan kolom dari tabel B dengan konstanta, maka (+) operator harus diterapkan ke kolom sehingga Oracle mengembalikan baris dari tabel A yang telah menghasilkan null untuk kolom ini. Jika tidak, Oracle hanya mengembalikan hasil gabungan sederhana.

Dalam kueri yang melakukan gabungan luar lebih dari dua pasang tabel, satu tabel bisa menjadi tabel yang dihasilkan nol hanya untuk satu tabel lainnya. Karena alasan ini, Anda tidak dapat menerapkan (+) operator ke kolom B dalam kondisi join untuk A dan B dan kondisi join untuk B dan C. Lihat SELECT untuk sintaks untuk gabungan luar.



  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 meningkatkan Pengecualian di dalam Pemicu? Apakah ada cara untuk melakukan ini?

  2. Cara mengatasi ORA-28000 akun terkunci

  3. Konversi Basis 36 ke Basis 10 hanya menggunakan SQL

  4. REGEXP_REPLACE() Fungsi di Oracle

  5. Cara Mengubah Format Tanggal di Sesi Oracle Anda