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:
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!