Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Membenarkan Lajur Tidak Dikelompokkan dalam GROUP BY Queries?

Mengapa MySQL Membenarkan Lajur Tidak Dikelompokkan dalam GROUP BY Queries?

DDD
DDDasal
2024-12-10 19:29:12707semak imbas

Why Does MySQL Allow Non-Grouped Columns in GROUP BY Queries?

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 :

  • Peningkatan Prestasi: Mengelakkan pengisihan dan pengelompokan lajur yang tidak perlu boleh meningkatkan prestasi pertanyaan dengan ketara.
  • Kebolehselenggaraan: Membenarkan pemilihan lajur bukan berkumpulan memudahkan penulisan dan penyelenggaraan pertanyaan kompleks.
  • Keputusan Tidak Tentu: Walau bagaimanapun, sambungan ini memperkenalkan potensi hasil tidak tentu jika bukan kumpulan lajur mengandungi nilai yang berbeza dalam setiap kumpulan.

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!

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