Rumah >pangkalan data >tutorial mysql >Adakah Sambungan `GROUP BY` MySQL Menepati Piawaian SQL, atau Adakah Ia Sisihan?

Adakah Sambungan `GROUP BY` MySQL Menepati Piawaian SQL, atau Adakah Ia Sisihan?

Susan Sarandon
Susan Sarandonasal
2024-12-07 03:56:10244semak imbas

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

Pelanjutan MySQL kepada KUMPULAN OLEH: Pematuhan atau Sisihan daripada Standard SQL?

Pengenalan

Secara tradisinya dalam SQL Server dan RDBMS lain, memilih lajur bukan agregat yang bukan sebahagian daripada klausa GROUP BY dalam pertanyaan agregat adalah dilarang oleh standard SQL. Walau bagaimanapun, dalam MySQL, tingkah laku ini menyimpang daripada standard, menimbulkan persoalan tentang pematuhan MySQL.

MySQL's Extended GROUP BY

Dalam versi SQL sehingga 1992, standard memang melarang memilih medan bukan agregat yang tidak termasuk dalam klausa GROUP BY. Walau bagaimanapun, dari SQL-2003 dan seterusnya, piawaian membenarkan untuk memilih lajur yang bergantung pada fungsi lajur pengelompokan.

MySQL, dalam keghairahannya untuk melaksanakan standard baharu ini, dilanjutkan GROUP BY untuk membenarkan pemilihan semua lajur , bukan sahaja yang bergantung secara fungsi pada lajur pengelompokan. Walaupun sambungan ini mematuhi piawaian SQL terkini, pelaksanaannya menyimpang daripada gelagat yang dimaksudkan.

Akibat Sambungan MySQL

Membenarkan semua lajur dalam senarai SELECT, malah yang tidak bergantung secara fungsi, boleh membawa kepada hasil yang tidak tentu jika lajur bukan kumpulan demi lajur mengandungi nilai yang berbeza dalam kumpulan. Penyimpangan daripada piawai ini boleh menyebabkan kekeliruan dan tingkah laku yang tidak dapat diramalkan untuk pengguna.

Untuk menangani perkara ini, MySQL memperkenalkan ONLY_FULL_GROUP_BY sql_mode, yang melumpuhkan gelagat GROUP BY MySQL yang dilanjutkan dan kembali kepada SQL yang lebih ketat -92 standard.

Rasional dan Perbandingan MySQL dengan RDBMS Lain

Rasional MySQL untuk sambungan ini ialah pengoptimuman prestasi. Dengan membenarkan semua lajur dalam senarai SELECT, MySQL boleh mengelakkan pengisihan dan pengelompokan yang tidak perlu, yang membawa kepada peningkatan prestasi.

Walau bagaimanapun, RDBMS lain seperti PostgreSQL dan versi MySQL (5.7) yang lebih baru telah melaksanakan pendekatan yang lebih mematuhi standard. dengan mengiktiraf kebergantungan berfungsi dan mengehadkan lajur bukan agregat dalam senarai SELECT dengan sewajarnya. Ini memastikan prestasi dan pematuhan kepada standard SQL.

Kesimpulan

KUMPULAN BY lanjutan MySQL, sambil diilhamkan oleh standard SQL, menyimpang daripada pelaksanaan yang dimaksudkan. Sambungan ini boleh membawa kepada hasil yang tidak tentu dan memerlukan pemahaman yang lebih bernuansa tentang pergantungan fungsi. Dengan menetapkan ONLY_FULL_GROUP_BY sql_mode, pengguna boleh kembali kepada tingkah laku SQL-92 yang lebih ketat. Versi MySQL (5.7) yang terkemudian telah memperbaik pengendalian GROUP BY mereka agar lebih sejajar dengan standard.

Atas ialah kandungan terperinci Adakah Sambungan `GROUP BY` MySQL Menepati Piawaian SQL, atau Adakah Ia Sisihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn