집 >데이터 베이스 >MySQL 튜토리얼 >MySQL의 'GROUP BY' 확장은 SQL 표준을 준수합니까, 아니면 편차입니까?
MySQL의 GROUP BY 확장: SQL 표준을 고수할 것인가, 아니면 표준을 벗어날 것인가?
소개
전통적으로 SQL Server 및 기타 RDBMS에서는 비집계를 선택합니다. 집계 쿼리에서 GROUP BY 절의 일부가 아닌 열은 SQL 표준에 의해 금지됩니다. 그러나 MySQL에서는 이러한 동작이 표준에서 벗어나 MySQL의 준수에 대한 의문이 제기됩니다.
MySQL의 Extended GROUP BY
1992년까지의 SQL 버전에서는 실제로 표준이 GROUP BY 절에 포함되지 않은 집계되지 않은 필드를 선택하는 것을 금지합니다. 그러나 SQL-2003부터 표준에서는 그룹화 열에 기능적으로 종속된 열을 선택할 수 있습니다.
MySQL은 이 새로운 표준을 구현하기 위해 GROUP BY를 확장하여 모든 열을 선택할 수 있도록 했습니다. , 그룹화 열에 기능적으로 종속된 것뿐만이 아닙니다. 이 확장은 최신 SQL 표준을 따르지만 구현은 의도한 동작에서 벗어납니다.
MySQL 확장의 결과
SELECT 목록의 모든 열을 허용합니다. 기능적으로 종속적이지 않으며, 그룹화 기준이 아닌 열에 그룹 내 다른 값이 포함되어 있으면 불확실한 결과가 발생할 수 있습니다. 표준에서 벗어나면 사용자에게 혼란과 예측할 수 없는 동작이 발생할 수 있습니다.
이 문제를 해결하기 위해 MySQL은 MySQL의 확장된 GROUP BY 동작을 비활성화하고 더 제한적인 SQL로 되돌리는 ONLY_FULL_GROUP_BY sql_mode를 도입했습니다. -92 표준.
MySQL의 이론적 근거 및 다른 RDBMS와의 비교
MySQL이 이 확장 기능을 사용하는 이유는 성능 최적화입니다. SELECT 목록의 모든 열을 허용함으로써 MySQL은 불필요한 정렬 및 그룹화를 방지하여 성능을 향상시킬 수 있습니다.
그러나 PostgreSQL 및 이후 버전의 MySQL(5.7)과 같은 다른 RDBMS는 보다 표준을 준수하는 접근 방식을 구현했습니다. 기능적 종속성을 인식하고 이에 따라 SELECT 목록의 집계되지 않은 열을 제한합니다. 이는 성능과 SQL 표준 준수를 모두 보장합니다.
결론
MySQL의 확장 GROUP BY는 SQL 표준에서 영감을 얻었지만 의도한 구현에서 벗어났습니다. 이 확장은 불확실한 결과를 초래할 수 있으며 기능 종속성에 대한 보다 미묘한 이해가 필요합니다. ONLY_FULL_GROUP_BY sql_mode를 설정하면 사용자는 더 제한적인 SQL-92 동작으로 되돌릴 수 있습니다. 최신 버전의 MySQL(5.7)에서는 표준에 더 잘 부합하도록 GROUP BY 처리가 개선되었습니다.
위 내용은 MySQL의 'GROUP BY' 확장은 SQL 표준을 준수합니까, 아니면 편차입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!