首頁 >資料庫 >mysql教程 >為什麼 MySQL 允許在 GROUP BY 查詢中使用非分組列?

為什麼 MySQL 允許在 GROUP BY 查詢中使用非分組列?

DDD
DDD原創
2024-12-10 19:29:12708瀏覽

Why Does MySQL Allow Non-Grouped Columns in GROUP BY Queries?

MySQL 的非標準GROUP BY 擴充功能:允許非群組欄位選擇

標準SQL 語法禁止選擇非聚合欄位選擇

標準SQL 語法禁止選擇非聚合欄位選擇

標準SQL 語法禁止選擇非聚合欄位選擇

標準SQL 語法禁止選擇非聚合欄位選擇

標準SQL 語法禁止選擇非聚合欄位選擇 未聚合的查詢GROUP BY 子句中明確分組。然而,MySQL 卻偏離了這個標準,允許這樣的選擇。

標準SQL 與MySQL 的擴充
  • 直到1992 年,標準SQL 規格禁止這種行為,確保聚合查詢僅傳回聚合值或在GROUP BY 子句中分組的列。
  • 但是,隨著發佈在 SQL-2003 中,該標準經過修改,允許選擇功能上依賴分組列的列。然而,MySQL 的擴充超越了這個標準,允許選擇所有列,而不管它們的功能依賴性如何。
  • MySQL 擴充的意義
  • 此擴充功能有幾個意義:

效能改善:避免不必要的列排序和分組可以顯著提高查詢效能。

可維護性:

允許非分組列選擇可以簡化複雜查詢的編寫和維護。

不確定結果:

但是,如果非分組列在每個欄位中包含不同的值,則此擴充可能會產生不確定的結果

MySQL 擴充的動機

MySQL 實作此擴充功能是為了符合SQL-2003標準,同時也解決了上述的性能和可維護性問題。然而,他們選擇了一種簡化的方法,允許選擇所有列,而不是實現更複雜的機制來識別功能相關的列。

停用擴充功能如果如果需要,使用者可以透過將 sql_mode 設為 ONLY_FULL_GROUP_BY 來停用該擴充功能。這將恢復更嚴格的 SQL-92 行為,確保在聚合查詢中無法選擇非分組列。 最新進展2011 年,PostgreSQL 增加了更多此功能的限制性實現,更接近 SQL 標準。 MySQL 對 GROUP BY 的處理在 5.7 (2015) 版本中得到了進一步改進,納入了識別函數依賴關係的機制,使其與標準更加一致。

以上是為什麼 MySQL 允許在 GROUP BY 查詢中使用非分組列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn