Keutamaan pengendali logik SQL: DAN dan ATAU
Soalan:
Pertimbangkan pernyataan SQL berikut:
SELECT [...] FROM [...] WHERE some_col IN (1,2,3,4,5) AND some_other_expr
dan
SELECT [...] FROM [...] WHERE some_col IN (1,2,3) OR some_col IN (4,5) AND some_other_expr
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:
Ini bermakna walaupun operator AND muncul di sebelah kanan operator OR, ia akan dinilai terlebih dahulu.
Gunakan keutamaan pada pernyataan
Dalam pernyataan yang diberikan:
Oleh itu, pernyataan kedua akan dinilai seperti berikut:
WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)
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:
WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr
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!