>데이터 베이스 >MySQL 튜토리얼 >SQL AND/OR 연산자 우선 순위: 이 SQL 문은 동일합니까?

SQL AND/OR 연산자 우선 순위: 이 SQL 문은 동일합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-22 21:46:10581검색

SQL AND/OR Operator Precedence: Are These SQL Statements Equivalent?

SQL 논리 연산자 우선 순위: AND 및 OR 계층 구조 이해

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의 논리 연산자 우선순위에 대한 추가 참조 자료를 찾는 경우 다음 리소스를 권장합니다.

  • Microsoft Transact-SQL 연산자 우선 순위
  • Oracle MySQL 9 연산자 우선순위
  • Oracle 10g 조건 우선
  • PostgreSQL 연산자 우선 순위
  • SQLite가 이해하는 SQL

위 내용은 SQL AND/OR 연산자 우선 순위: 이 SQL 문은 동일합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.