MySQL's Non-Standard GROUP BY Extension: Membenarkan Pemilihan Lajur Bukan Berkumpulan
Sintaks SQL standard melarang memilih medan bukan agregat yang tidak dihimpunkan secara eksplisit dalam klausa GROUP BY agregat pertanyaan. Walau bagaimanapun, MySQL menyimpang daripada piawaian ini dengan membenarkan pemilihan sedemikian.
SQL Standard vs. Sambungan MySQL
Sehingga 1992, spesifikasi SQL standard melarang tingkah laku ini, memastikan agregat itu pertanyaan hanya mengembalikan nilai agregat atau lajur yang dikumpulkan dalam GROUP BY klausa.
Walau bagaimanapun, dengan keluaran SQL-2003, piawaian telah dipinda untuk membolehkan pemilihan lajur yang bergantung pada fungsi lajur pengelompokan. Sambungan MySQL, walau bagaimanapun, melangkaui standard ini dengan membenarkan semua lajur dipilih, tanpa mengira kebergantungan fungsinya.
Implikasi Sambungan MySQL
Pelanjutan ini mempunyai beberapa implikasi :
Motivasi MySQL untuk Pelanjutan
MySQL melaksanakan sambungan ini untuk mematuhi piawaian SQL-2003, sambil juga menangani prestasi dan kebimbangan kebolehselenggaraan yang dinyatakan di atas. Walau bagaimanapun, mereka memilih pendekatan yang dipermudahkan dengan membenarkan semua lajur dipilih, dan bukannya melaksanakan mekanisme yang lebih kompleks untuk mengenal pasti lajur yang bergantung kepada fungsi.
Melumpuhkan Sambungan
Jika dikehendaki, pengguna boleh melumpuhkan sambungan dengan menetapkan sql_mode kepada ONLY_FULL_GROUP_BY. Ini akan memulihkan tingkah laku SQL-92 yang lebih ketat, memastikan lajur tidak berkumpulan tidak boleh dipilih dalam pertanyaan agregat.
Perkembangan Terkini
Pada tahun 2011, PostgreSQL menambah lagi pelaksanaan menyekat ciri ini, lebih dekat dengan standard SQL. Pengendalian MySQL terhadap GROUP BY telah dipertingkatkan lagi dalam versi 5.7 (2015), menggabungkan mekanisme untuk mengenali kebergantungan berfungsi, menyelaraskannya lebih rapat dengan standard.
Atas ialah kandungan terperinci Mengapa MySQL Membenarkan Lajur Tidak Dikelompokkan dalam GROUP BY Queries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!