Rumah >pangkalan data >tutorial mysql >Adakah Sambungan `GROUP BY` MySQL Menepati Piawaian SQL, atau Adakah Ia Sisihan?
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!