MySQL 靈活的「GROUP BY」子句:仔細觀察
與 Oracle 和 SQL Server 等資料庫系統不同,MySQL 為 GROUP BY
子句提供了更寬鬆的方法,允許在沒有聚合函數的情況下進行查詢。這種靈活性雖然偏離了 ANSI SQL 標準,但提供了效能優勢並增強了使用者便利性。
MySQL 在沒有聚合的情況下處理 GROUP BY
在諸如 SELECT X, Y FROM someTable GROUP BY X
之類的查詢中,MySQL 為與每個 Y
群組關聯的 X
選擇任意值。此行為源自於 MySQL 的解釋,即包含不含聚合函數的 Y
或 GROUP BY
本身的 Y
子句是多餘的。
MySQL 設計選擇背後的原因
MySQL 決定允許這種類型的 GROUP BY
查詢是由兩個關鍵因素驅動的:
ANSI SQL 合規性與 MySQL 的正當性
儘管MySQL 的行為不同於嚴格的ANSI SQL 標準(該標準要求聚合函數或按所有非聚合列進行分組),但MySQL 開發人員透過優先考慮效能和使用者的易用性來證明這種偏差是合理的。 在許多實際場景中,潛在的效能提升和常見查詢的簡化超過了不遵守嚴格標準的情況。
以上是為什麼 MySQL 允許使用沒有聚合函數的 GROUP BY 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!