집 >데이터 베이스 >MySQL 튜토리얼 >SQL AND/OR 연산자 우선 순위: 이 SQL 문은 동일합니까?
SQL에서 논리 연산자 "AND"와 "OR"은 지정된 조건에 따라 데이터를 필터링하는 조건식을 작성하기 위한 구성 요소입니다. 그러나 우선 순위나 평가 순서는 이러한 표현식의 결과를 결정하는 데 중요합니다.
질문:
다음 두 SQL 문을 고려하세요.
<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>
이러한 진술은 동일합니까? 동등성을 확인하는 데 도움이 되는 진리표와 같은 도구가 있습니까?
정답:
아니요, 이 두 진술은 동일하지 않습니다. "AND"는 "OR"보다 우선순위가 높습니다. 즉, some_col in (1,2,3,4,5) AND some_other_expr
표현식이 먼저 평가된 다음 해당 평가 결과가 OR 연산자에 적용됩니다.
이를 설명하기 위해 다음 예를 고려해보세요.
<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>
첫 번째 문은 @x=1 OR @y=1 And @z=1
을 평가하고 @y=1 And @z=1
표현식이 "False"를 반환하므로 결과는 "T"입니다. 그런 다음 "OR" 연산자는 이 결과를 "@x=1"("True")과 결합하여 최종적으로 "T"를 출력합니다.
그러나 두 번째 문은 (@x=1 OR @y=1) And @z=1
을 다르게 평가합니다. "OR" 연산자는 먼저 "@x=1"과 "@y=1"을 결합하는데, 둘 다 "True"이고 결과는 "True"입니다. 그런 다음 이 "True" 결과는 "@z=1"("False")에 대해 평가되어 "F"라는 최종 출력이 생성됩니다.
따라서 평가 순서가 중요하며 괄호를 사용하여 우선순위 규칙을 무시할 수 있습니다. 이 두 문을 동일하게 만들려면 다음과 같이 괄호를 추가하면 됩니다.
<code class="language-sql">SELECT [...] FROM [...] WHERE (some_col in (1,2,3) or some_col in (4,5)) AND some_other_expr</code>
SQL의 논리 연산자 우선순위에 대한 추가 참조 자료를 찾는 경우 다음 리소스를 권장합니다.
위 내용은 SQL AND/OR 연산자 우선 순위: 이 SQL 문은 동일합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!