Rumah >pangkalan data >tutorial mysql >IN vs. ANY dalam PostgreSQL: Bilakah Saya Perlu Menggunakan Setiap Operator?
PostgreSQL IN
dan ANY
Operator: Perbandingan Terperinci
PostgreSQL menawarkan pengendali IN
dan ANY
untuk membandingkan nilai lajur dengan set nilai. Walaupun fungsinya serupa, perbezaan utama wujud yang memberi kesan kepada prestasi pertanyaan dan fleksibiliti.
Kesamaan Fungsian
Pada asasnya, IN
bersamaan dengan = ANY
. Kedua-duanya menyemak sama ada nilai lajur sepadan dengan mana-mana nilai dalam set yang ditentukan. Contohnya:
<code class="language-sql">SELECT * FROM my_table WHERE id IN (1, 2, 3); SELECT * FROM my_table WHERE id = ANY ('{1, 2, 3}');</code>
Pertanyaan ini menghasilkan hasil yang sama.
Variasi Sintaksis
Kedua-dua pengendali mempunyai sintaks yang berbeza:
IN (set)
: Menggunakan kurungan untuk menyertakan senarai nilai yang dipisahkan koma.
<code class="language-sql"> SELECT * FROM my_table WHERE id IN (1, 2, 3);</code>
ANY (set)
: Menggunakan pendakap kerinting untuk merangkum set nilai (biasanya tatasusunan).
<code class="language-sql"> SELECT * FROM my_table WHERE id = ANY ('{1, 2, 3}');</code>
Pengendalian Jenis Data: Tatasusunan lwn. Senarai
Perbezaan penting terletak pada cara mereka mengendalikan input:
IN
menerima senarai dipisahkan koma, berpotensi mencampurkan jenis data.ANY
menjangkakan tatasusunan, memerlukan jenis data yang dipratentukan.Perbezaan ini boleh menjejaskan prestasi dan kekangan jenis data.
ANY
Kepelbagaian yang Dipertingkatkan
ANY
mengatasi IN
dalam serba boleh. Ia berpasangan dengan pelbagai pengendali di luar =
, contohnya:
<code class="language-sql">SELECT * FROM my_table WHERE name LIKE ANY ('{John, Mary, Joe}');</code>
Aspek Prestasi
Untuk set nilai yang luas, ANY
dengan tatasusunan biasanya mempamerkan kebolehskalaan yang lebih baik berbanding IN
dengan senarai yang dipisahkan koma.
Penolakan dan Pengecualian
Untuk mengecualikan baris yang nilai lajur berada dalam set:
IN
: Gunakan NOT IN (1, 2, 3)
ANY
: Gunakan id <> ALL ('{1, 2, 3}')
Mengendalikan nilai NULL
dalam pengecualian memerlukan pertimbangan yang teliti, selalunya memerlukan semakan IS NOT TRUE
eksplisit:
<code class="language-sql">SELECT * FROM my_table WHERE (id = ANY ('{1, 2, 3}')) IS NOT TRUE;</code>
Atas ialah kandungan terperinci IN vs. ANY dalam PostgreSQL: Bilakah Saya Perlu Menggunakan Setiap Operator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!