首頁 > 資料庫 > mysql教程 > MySQL 的「GROUP BY」擴充符合 SQL 標準還是偏差?

MySQL 的「GROUP BY」擴充符合 SQL 標準還是偏差?

Susan Sarandon
發布: 2024-12-07 03:56:10
原創
244 人瀏覽過

Does MySQL's `GROUP BY` Extension Conform to SQL Standards, or Is It a Deviation?

MySQL 對 GROUP BY 的擴充:遵守還是偏離 SQL 標準?

簡介

傳統上,在SQL Server 和其他RDBMS 中,選擇非聚合SQL 標準禁止不屬於聚合查詢中GROUP BY 子句的列。然而,在 MySQL 中,這種行為偏離了標準,引發了對 MySQL 遵守情況的質疑。

MySQL 的擴充 GROUP BY

在 1992 年之前的 SQL 版本中,標準確實禁止選擇未包含在 GROUP BY 子句中的非聚合欄位。然而,從 SQL-2003 開始,該標準允許選擇功能上依賴分組列的列。

MySQL 急於實現這一新標準,擴展了 GROUP BY 以允許選擇所有列,而不僅僅是那些功能上依賴於分組列的。雖然此擴充符合最新的 SQL 標準,但其實作偏離了預期行為。

MySQL 擴充的後果

允許SELECT 清單中的所有欄位,甚至是那些欄位不依賴功能,如果非分組依據欄位在群組內包含不同的值,則可能會導致不確定的結果。這種與標準的偏差可能會給用戶帶來混亂和不可預測的行為。

為了解決這個問題,MySQL 引入了 ONLY_FULL_GROUP_BY sql_mode,它禁用 MySQL 的擴展 GROUP BY 行為並恢復為更嚴格的 SQL -92 標準。

MySQL 的基本原理和比較其他 RDBMS

MySQL 進行此擴充的基本原理是效能最佳化。透過允許 SELECT 清單中的所有列,MySQL 可以避免不必要的排序和分組,從而提高效能。

但是,其他 RDBMS,例如 PostgreSQL 和更高版本的 MySQL(5.7)已經實現了更符合標準的方法透過識別函數依賴性並相應地限制 SELECT 清單中的非聚合列。這確保了效能並遵守 SQL 標準。

結論

MySQL 的擴展 GROUP BY 雖然受到 SQL 標準的啟發,但偏離了其預期的實現。這種擴展可能會導致不確定的結果,並且需要對函數依賴性有更細緻的理解。透過設定 ONLY_FULL_GROUP_BY sql_mode,使用者可以恢復到更嚴格的 SQL-92 行為。 MySQL 的更高版本 (5.7) 改進了 GROUP BY 的處理,以更好地符合標準。

以上是MySQL 的「GROUP BY」擴充符合 SQL 標準還是偏差?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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