[SQL] SQL 논리 연산자 우선 순위 : AND와 OR
SQLSQL 논리 연산자 우선 순위 : AND와 OR
해당하는 아래의 두 문장이 있습니까?
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr
과
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr
일부 진리표의 종류 내가 이것을 확인하는 데 사용할 수 있나요?
해결법
-
==============================
1.그리고, 그래서, 또는보다 우선 순위가 된 경우에도 <=> A1 또는 A2
그리고, 그래서, 또는보다 우선 순위가 된 경우에도 <=> A1 또는 A2
Where a And b
하지와 동일합니다
Where a1 Or a2 And b,
그는 다음과 같이 실행 때문에
Where a1 Or (a2 And b)
당신이 원하는 무엇을, (우선 순위의 규칙보다 우선 괄호를 사용하여), 그들에게 다음과 같은되어 있는지 확인합니다 :
Where (a1 Or a2) And b
여기에서 설명하는 예는 다음과 같습니다
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 -- outputs T Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- outputs F
(알파벳 순서) 참조를 참조 싶은 분들을 위해 :
-
==============================
2.나는 2 점을 추가 할 것입니다 :
나는 2 점을 추가 할 것입니다 :
그래서,이 표현은 단순히 동일하지 않습니다.
WHERE some_col in (1,2,3,4,5) AND some_other_expr --to the optimiser is this WHERE ( some_col = 1 OR some_col = 2 OR some_col = 3 OR some_col = 4 OR some_col = 5 ) AND some_other_expr
당신이 IN 절을 나눌 때, 당신은 시리얼 관찰 보고서를 분할하고, 우선 순위를 변경했습니다.
-
==============================
3.당신은 우선 순위의 규칙보다 우선 괄호를 사용할 수 있습니다.
당신은 우선 순위의 규칙보다 우선 괄호를 사용할 수 있습니다.
-
==============================
4.쿼리는 3 변수 부울 식 진리표를 표시합니다 :
쿼리는 3 변수 부울 식 진리표를 표시합니다 :
;WITH cteData AS (SELECT 0 AS A, 0 AS B, 0 AS C UNION ALL SELECT 0,0,1 UNION ALL SELECT 0,1,0 UNION ALL SELECT 0,1,1 UNION ALL SELECT 1,0,0 UNION ALL SELECT 1,0,1 UNION ALL SELECT 1,1,0 UNION ALL SELECT 1,1,1 ) SELECT cteData.*, CASE WHEN (A=1) OR (B=1) AND (C=1) THEN 'True' ELSE 'False' END AS Result FROM cteData
(A = 1), 또는 검색 결과 (B = 1), (C = 1) :
A B C Result 0 0 0 False 0 0 1 False 0 1 0 False 0 1 1 True 1 0 0 True 1 0 1 True 1 1 0 True 1 1 1 True
(A = 1) OR ((B = 1), (C = 1))에 대한 검색 결과는 동일하다.
검색 결과 ((A = 1) 또는 (B = 1)) AND (C = 1) :
A B C Result 0 0 0 False 0 0 1 False 0 1 0 False 0 1 1 True 1 0 0 False 1 0 1 True 1 1 0 False 1 1 1 True
from https://stackoverflow.com/questions/1241142/sql-logic-operator-precedence-and-and-or by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 이 집계 함수 나 GROUP BY 절 중 하나에 포함되지 않기 때문에 열 이유는 선택 목록에서 유효하지 않습니다 [중복] (0) | 2020.03.08 |
---|---|
[SQL] 단일 SQL 쿼리에서 여러 행을 삽입? [복제] (0) | 2020.03.08 |
[SQL] MySQL은 - 선택에 행 번호를 가져옵니다 (0) | 2020.03.08 |
[SQL] MySQL은 실행중인 총을 계산 (0) | 2020.03.08 |
[SQL] 두 날짜 사이의 날짜의 목록을 가져옵니다 (0) | 2020.03.08 |