Rumah >pangkalan data >tutorial mysql >Adakah Pengendali `DAN` dan `ATAU` SQL Mempunyai Keutamaan yang Berbeza, dan Bagaimanakah Ini Mempengaruhi Keputusan Pertanyaan?

Adakah Pengendali `DAN` dan `ATAU` SQL Mempunyai Keutamaan yang Berbeza, dan Bagaimanakah Ini Mempengaruhi Keputusan Pertanyaan?

Linda Hamilton
Linda Hamiltonasal
2025-01-22 21:57:13255semak imbas

Do SQL's `AND` and `OR` Operators Have Different Precedence, and How Does This Affect Query Results?

Keutamaan pengendali logik SQL: DAN dan ATAU

Soalan:

Pertimbangkan pernyataan SQL berikut:

<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col IN (1,2,3,4,5) AND some_other_expr</code>

dan

<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col IN (1,2,3) OR some_col IN (4,5) AND some_other_expr</code>

Adakah kedua-dua pernyataan ini setara? Jika tidak setara, bagaimana kita mengutamakan mereka?

Jawapan:

Keutamaan pengendali DAN dan ATAU

Dalam SQL, keutamaan operator menentukan susunan pengendali logik dalam klausa WHERE dinilai. Keutamaan pengendali AND dan OR adalah seperti berikut:

  • AND operator mempunyai keutamaan yang lebih tinggi daripada operator OR.

Ini bermakna walaupun operator AND muncul di sebelah kanan operator OR, ia akan dinilai terlebih dahulu.

Gunakan keutamaan pada pernyataan

Dalam pernyataan yang diberikan:

  • Pernyataan pertama hanya menggunakan operator DAN, jadi keutamaan adalah mudah.
  • Pernyataan kedua menggunakan gabungan operator OR dan AND, dengan operator OR mendahului operator AND.

Oleh itu, pernyataan kedua akan dinilai seperti berikut:

<code class="language-sql">WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)</code>

Pengesahan jadual kebenaran

Berikut ialah jadual kebenaran yang menggambarkan perbezaan yang dikira:

some_col some_other_expr 语句 1 语句 2
1 0 False True
2 1 True True
3 0 False True
4 0 False False
5 1 False True

Seperti yang dapat kita lihat, nilai kebenaran kedua-dua pernyataan ini berbeza dalam baris pertama, yang menunjukkan bahawa ia tidak setara.

Gunakan kurungan untuk mengatasi keutamaan

Jika anda ingin menukar susunan pengiraan, anda boleh menggunakan kurungan untuk mengatasi keutamaan lalai. Sebagai contoh, untuk membuat pernyataan kedua bersamaan dengan yang pertama, ia akan ditulis seperti berikut:

<code class="language-sql">WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr</code>

Atas ialah kandungan terperinci Adakah Pengendali `DAN` dan `ATAU` SQL Mempunyai Keutamaan yang Berbeza, dan Bagaimanakah Ini Mempengaruhi Keputusan Pertanyaan?. 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