Tingkah Laku GROUP BY
Bukan Standard MySQL
Perbezaan utama antara MySQL dan pangkalan data SQL lain (seperti Oracle dan SQL Server) terletak pada cara mereka mengendalikan klausa GROUP BY
. MySQL membenarkan GROUP BY
pertanyaan tanpa memerlukan fungsi agregat, ciri yang menyimpang daripada ANSI SQL standard. Keputusan reka bentuk ini, sambil menawarkan potensi manfaat prestasi dan kemudahan pengguna, telah mendapat kritikan mengenai pematuhan standard SQL.
Jusifikasi MySQL:
Pembangun MySQL berpendapat bahawa fleksibiliti ini meningkatkan prestasi pertanyaan dan kebolehgunaan. Dengan membenarkan pemilihan lajur tidak teragregat dalam klausa GROUP BY
, pengguna mengelakkan keperluan untuk fungsi agregat tambahan yang mungkin tidak diperlukan. Ini memudahkan pertanyaan dan boleh membawa kepada peningkatan kecekapan.
Sebagai contoh, pertanyaan berikut:
<code class="language-sql">SELECT X, Y FROM someTable GROUP BY X;</code>
Dalam MySQL, ini mengembalikan senarai nilai X
unik, setiap satu dipasangkan dengan nilai arbitrari sepadan Y
daripada kumpulan. Ini berguna apabila hanya nilai X
yang berbeza diperlukan, tanpa mengira data Y
khusus yang dikaitkan dengan setiap satu.
Mengawal Gelagat MySQL:
Walaupun MySQL menawarkan tafsiran santai ini, pengguna boleh menguatkuasakan pematuhan ANSI SQL yang ketat dengan menetapkan only_full_group_by
mod SQL. Dengan mod ini didayakan, GROUP BY
pertanyaan yang tidak mempunyai fungsi agregat akan menghasilkan ralat.
Ringkasan:
Fungsi GROUP BY
fleksibel MySQL mencerminkan falsafah reka bentuk yang mengutamakan prestasi dan kemudahan penggunaan. Walau bagaimanapun, ini menyimpang daripada piawaian ANSI SQL. Tetapan only_full_group_by
membolehkan pembangun memilih antara kemudahan ini dan pematuhan standard yang ketat.
Atas ialah kandungan terperinci Bagaimanakah Fleksibel MySQL `GROUP BY` Berbeza daripada Standard SQL, dan Mengapa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!