


Pertanyaan MySQL: WHERE vs. HAVING – Bilakah Saya Harus Menggunakan HAVING untuk Lajur Tersuai?
Kedudukan lajur tersuai dalam pertanyaan MySQL: WHERE dan HAVING
Soalan:
Mengapa mesti lajur yang dibuat dalam pernyataan SELECT diletakkan selepas klausa HAVING dan bukan selepas klausa WHERE dalam MySQL? Juga, adakah terdapat sebarang kelemahan untuk menggunakan WHERE 1 dan bukannya menentukan definisi penuh lajur?
Jawapan:
Walaupun jawapan lain telah menyentuh topik ini, perbezaan utama adalah seperti berikut:
Klausa WHERE: Menapis data sebelum memilih, membenarkan mana-mana lajur jadual. Ia tidak boleh menggunakan alias atau fungsi agregat.
Klausa MEMPUNYAI: Menapis data selepas pemilihan, membenarkan penggunaan lajur, alias atau fungsi agregat yang dipilih.
Lokasi:
Lajur tersuai hendaklah diletakkan selepas klausa HAVING kerana:
- MEMILIH menapis data hasil yang dipilih, termasuk lajur tersuai.
- WHERE menapis data hasil sebelum pemilihan, tidak termasuk lajur tersuai.
Kecekapan:
Untuk menapis set data yang besar, menggunakan klausa WHERE adalah lebih cekap kerana ia menghapuskan baris yang tidak berkaitan sebelum melakukan pemilihan.
Contoh:
Pertimbangkan borang berikut:
CREATE TABLE `table` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `value` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `value` (`value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Mengandungi 10 baris data, dengan nilai id dan nilai antara 1 hingga 10.
Pertanyaan:
SELECT `value` v FROM `table` WHERE `value`>5; -- 获取 5 行 SELECT `value` v FROM `table` HAVING `value`>5; -- 获取 5 行
Keputusan:
Kedua-dua pertanyaan mengembalikan hasil yang sama, yang menunjukkan bahawa klausa HAVING boleh berfungsi tanpa klausa GROUP BY.
JELASKAN:
EXPLAIN SELECT `value` v FROM `table` WHERE `value`>5;
<code>+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+ | 1 | SIMPLE | table | range | value | value | 4 | NULL | 5 | Using where; Using index | +----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+</code>
EXPLAIN SELECT `value` v FROM `table` having `value`>5;
<code>+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+ | 1 | SIMPLE | table | index | NULL | value | 4 | NULL | 10 | Using index | +----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+</code>
Seperti yang anda lihat, WHERE dan HAVING menggunakan indeks, tetapi bilangan baris yang dikembalikan adalah berbeza. WHERE menapis data sebelum pemilihan, mengurangkan bilangan baris, manakala HAVING menapis baris selepas pemilihan.
Kesimpulan:
- Letakkan lajur tersuai selepas klausa HAVING untuk menapis data yang dipilih.
- Gunakan klausa WHERE untuk menapis set data yang besar dengan cekap dengan mengecualikan baris yang tidak berkaitan.
Atas ialah kandungan terperinci Pertanyaan MySQL: WHERE vs. HAVING – Bilakah Saya Harus Menggunakan HAVING untuk Lajur Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

TODROPAVIEWInMYSQL, gunakan "dropviewififeXistsview_name;" andTomodifyAview, gunakan "createorreplaceviewview_nameasSelect ..."

Mysqlviewscaneffectivetyutilizedesignpatternslikeadapter, penghias, kilang, andobserver.1) adapterpaternaptsdatafromdifferenttablesintoaunifiedview.2)

ViewsinmysqlarebeneficialforsImplifingceMlexqueries, Enhancingsecurity, MemastikanDataconsistency, andoptimizingperformance

TOCREATEASIMPLEVIEWInMYSQL, USETHECreatEviewStatement.1) definetheViewWithCreateViewView_nameas.2)

TOCReateUsersinMysql, UsethecreateUserStatement.1) Foralocaluser: createuser'localuser '@' localhost'identifiedby'SecureShword '; 2) foraremoteuser: createuser'remoteuser'@'%'

Mysqlviewshavelimitations: 1) theDon'tsupportallsqloperations, bintikDatamanipulationThroughviewswithjoinsorsubqueries.2) merekacanimpactperformance, terutamanya dengan komplekssum

Betul -betul

Mysqldoes'timposeahardlimitontriggers, butpracticalfactorsDeterminetheirefectiveus


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan
