Rumah >pangkalan data >tutorial mysql >SQL DAN/ATAU Keutamaan Operator: Adakah Pernyataan SQL Ini Setara?

SQL DAN/ATAU Keutamaan Operator: Adakah Pernyataan SQL Ini Setara?

Barbara Streisand
Barbara Streisandasal
2025-01-22 21:46:10516semak imbas

SQL AND/OR Operator Precedence: Are These SQL Statements Equivalent?

Keutamaan Operator Logik SQL: Memahami Hierarki DAN dan ATAU

Dalam SQL, operator logik "AND" dan "OR" ialah blok binaan untuk membina ungkapan bersyarat yang menapis data berdasarkan syarat yang ditentukan. Walau bagaimanapun, keutamaannya, atau susunan penilaiannya, adalah penting dalam menentukan keputusan ungkapan ini.

Soalan:

Pertimbangkan dua pernyataan SQL berikut:

<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr</code>
<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 kenyataan ini setara? Adakah terdapat alat seperti jadual kebenaran yang boleh membantu mengesahkan kesetaraan mereka?

Jawapan:

Tidak, kedua-dua pernyataan ini tidak bersamaan . "AND" mempunyai keutamaan yang lebih tinggi daripada "OR", yang bermaksud bahawa ungkapan some_col in (1,2,3,4,5) AND some_other_expr dinilai dahulu, dan kemudian hasil penilaian itu digunakan pada operator OR.

Untuk menggambarkan ini, pertimbangkan contoh berikut:

<code class="language-sql">Declare @x tinyInt = 1
Declare @y tinyInt = 0
Declare @z tinyInt = 0

Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- 输出 T
Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- 输出 F</code>

Pernyataan pertama menilai @x=1 OR @y=1 And @z=1 dan hasilnya ialah "T" kerana ungkapan @y=1 And @z=1 mengembalikan "Salah". Operator "ATAU" kemudiannya menggabungkan hasil ini dengan "@x=1" (iaitu "Benar"), akhirnya mengeluarkan "T".

Walau bagaimanapun, pernyataan kedua menilai (@x=1 OR @y=1) And @z=1 secara berbeza. Operator "OR" mula-mula menggabungkan "@x=1" dan "@y=1", kedua-duanya adalah "Benar", dan hasilnya "Benar". Hasil "Benar" ini kemudiannya dinilai dengan "@z=1" (iaitu "Salah"), menghasilkan output akhir "F".

Oleh itu, susunan penilaian adalah penting dan kurungan boleh digunakan untuk mengatasi peraturan keutamaan. Untuk menjadikan kedua-dua pernyataan ini setara, anda boleh menambah kurungan seperti ini:

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

Bagi mereka yang mencari bahan rujukan lanjut mengenai keutamaan operator logik dalam SQL, sumber berikut disyorkan:

  • Keutamaan pengendali Microsoft Transact-SQL
  • Keutamaan operator Oracle MySQL 9
  • Keutamaan keadaan Oracle 10g
  • Keutamaan pengendali PostgreSQL
  • SQL difahami oleh SQLite

Atas ialah kandungan terperinci SQL DAN/ATAU Keutamaan Operator: Adakah Pernyataan SQL Ini Setara?. 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