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

Mengapa Group By Mysql dan Group by Oracle berbeda?

Perancang MySQL memasukkan ekstensi tidak standar mereka ke GROUP BY dalam upaya membuat pengembangan lebih mudah dan kueri tertentu lebih efisien.

Berikut alasan mereka.

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

Ada mode server yang disebut ONLY_FULL_GROUP_BY yang menonaktifkan ekstensi tidak standar. Anda dapat mengatur mode ini menggunakan pernyataan ini.

 SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'  

Berikut kutipan dari halaman itu, dengan penekanan ditambahkan.

Jika ONLY_FULL_GROUP_BY dinonaktifkan, ekstensi MySQL ke SQL standar menggunakan GROUP BY mengizinkan daftar pilih, HAVING kondisi, atau ORDER BY list untuk merujuk ke kolom yang tidak diagregasi meskipun kolom tidak bergantung secara fungsional pada GROUP BY kolom... Dalam hal ini, server bebas memilih nilai apa pun dari setiap grup , jadi kecuali keduanya sama, nilai yang dipilih adalah nondeterministik , yang mungkin bukan yang Anda inginkan.

Kata yang penting di sini adalah nondeterministik. Apa artinya? Artinya acak, tapi lebih buruk. Jika server memilih nilai acak, itu berarti ia akan mengembalikan nilai yang berbeda dalam kueri yang berbeda, jadi Anda memiliki peluang untuk menangkap masalah saat Anda menguji perangkat lunak Anda. Tapi nondeterministik dalam konteks ini berarti server memilih nilai yang sama setiap saat, sampai tidak.

Mengapa itu bisa mengubah nilai yang dipilihnya? Upgrade server adalah salah satu alasannya. Perubahan ukuran tabel mungkin lain. Intinya, server bebas mengembalikan nilai apa pun yang diinginkannya.

Saya berharap orang yang baru belajar SQL akan mengatur ONLY_FULL_GROUP_BY ini mode; mereka akan mendapatkan hasil yang jauh lebih dapat diprediksi dari kueri mereka, dan server akan menolak kueri nondeterministik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Joins - Perbandingan antara sintaks konvensional VS ANSI Syntax

  2. Mengikat parameter kueri berdasarkan nama dengan ODP.NET

  3. SQLT dan Partisi

  4. Bagaimana saya bisa mengakses Oracle dari Python?

  5. perbedaan antara NLS_NCHAR_CHARACTERSET dan NLS_CHARACTERSET untuk Oracle