복붙노트

[SQL] SQL 논리 연산자 우선 순위 : AND와 OR

SQL

SQL 논리 연산자 우선 순위 : 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. ==============================

    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 점을 추가 할 것입니다 :

    나는 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. ==============================

    3.당신은 우선 순위의 규칙보다 우선 괄호를 사용할 수 있습니다.

    당신은 우선 순위의 규칙보다 우선 괄호를 사용할 수 있습니다.

  4. ==============================

    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
    
  5. from https://stackoverflow.com/questions/1241142/sql-logic-operator-precedence-and-and-or by cc-by-sa and MIT license