首頁 > 資料庫 > mysql教程 > MySQL 的非標準 GROUP BY 行為是否違反 SQL 標準?

MySQL 的非標準 GROUP BY 行為是否違反 SQL 標準?

Patricia Arquette
發布: 2024-12-06 21:36:18
原創
145 人瀏覽過

Does MySQL's Non-Standard GROUP BY Behavior Violate SQL Standards?

MySQL 的非標準 GROUP BY 行為是否違反了標準?

簡介

MySQL 對 GROUP BY 的擴充子句允許選擇未包含在分組中的列,這引發了有關遵守 SQL 標準的問題。本文探討了這種偏差的歷史背景和影響。

標準

在 SQL-2003 之前,標準做法是禁止選擇非聚合不屬於 GROUP BY 子句的欄位。此限制透過消除不明確的分組來確保一致的結果。

MySQL 的擴展

MySQL 引入了一個擴展,允許選擇非聚合列,即使它們不屬於分組依據。根據 MySQL 文檔,這樣做是為了透過避免不必要的排序和分組來優化效能。但是,它有一個警告:非聚合值可能是不確定的,這意味著伺服器可以從每個群組中選擇任何值。

標準SQL 解釋

SQL-2003 標準允許選擇清單中的非聚合列參考(如果它們在功能上依賴於分組列或包含在聚合參數中)。函數依賴確保對於分組列的每個值,非聚合列都有一個唯一的值。

MySQL 的實作

MySQL 的擴充偏離標準允許選取所有資料列,即使是那些在功能上不依賴分組列的資料列。當非聚合值在群組內變化時,這可能會導致意外結果。

MySQL 擴展的後果

MySQL 的實現有兩個主要含義:

  • 性能優化:該擴充功能可以增強某些群組的效能BY 查詢,避免不必要的排序和分組。
  • 不確定的結果:此擴充的缺點是非聚合列可能傳回不確定的值,導致結果不一致。

解決 MySQL 的偏差

MySQL使用者可以透過將 sql_mode 設為 ONLY_FULL_GROUP_BY 來停用非標準行為。此外,MySQL 5.7 中還引入了改進,以便更好地符合標準。 PostgreSQL 9.1 也提供了更嚴格的實現,嚴格遵守函數依賴要求。

以上是MySQL 的非標準 GROUP BY 行為是否違反 SQL 標準?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板