Apakah kedua pernyataan di bawah ini setara?
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
Apakah ada semacam tabel kebenaran yang bisa saya gunakan untuk memverifikasi ini?
Jawaban:
And
telah didahulukanOr
, jadi, bahkan jikaa <=> a1 Or a2
tidak sama dengan
karena itu akan Dieksekusi sebagai
dan apa yang Anda inginkan, untuk membuatnya sama, adalah sebagai berikut (menggunakan tanda kurung untuk mengesampingkan aturan prioritas):
Berikut ini contoh untuk diilustrasikan:
Bagi mereka yang suka berkonsultasi referensi (dalam urutan abjad):
sumber
AND
kemudianOR
diutamakan adalah bagian dari standar 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
select case when (@x=1 or @y=1) and @z=1 then'T' else 'F' end
Saya akan menambahkan 2 poin:
Jadi, 2 ekspresi sama sekali tidak sama.
Jadi, ketika Anda memecahkan klausa IN, Anda membagi OR seri ke atas, dan mengubah prioritas.
sumber
Anda bisa menggunakan tanda kurung untuk mengesampingkan aturan prioritas.
sumber
Kueri untuk menampilkan tabel kebenaran ekspresi boolean 3-variabel:
Hasil untuk
(A=1) OR (B=1) AND (C=1)
:Hasil untuk
(A=1) OR ( (B=1) AND (C=1) )
adalah sama.Hasil untuk
( (A=1) OR (B=1) ) AND (C=1)
:sumber