집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL WHERE 절이 매개변수를 무시하는 이유는 무엇입니까?
SQL WHERE 절 문제 해결: 매개변수가 무시되는 이유
SQL 쿼리는 때때로 예기치 않은 결과를 생성할 수 있으며, 특히 WHERE
절에 여러 조건이 포함된 경우 더욱 그렇습니다. 이는 종종 잘못된 연산자 우선 순위 및 그룹화로 인해 발생합니다.
WHERE
절이 매개변수를 무시하는 것처럼 보이는 시나리오를 살펴보겠습니다.
<code class="language-sql">SELECT * FROM people WHERE university='2' AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE) OR (fname LIKE '%box%' OR lname LIKE '%box%')</code>
이 쿼리는 people
이 '2'인 university
테이블에서 레코드를 선택하고 '대량'에 대한 전체 텍스트 검색이 또는 첫 번째 또는 성에는 '상자'가 포함되어 있습니다. 그러나 결과 집합에는 university='2'
조건
문제는 SQL의 연산자 우선순위에 있습니다. AND
가 OR
보다 우선합니다. 쿼리의 암시적 그룹화는 다음과 같습니다.
<code class="language-sql">(university='2') AND ( (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)) OR (fname LIKE '%box%' OR lname LIKE '%box%') )</code>
university='2'
이 전체 텍스트 검색에만 적용되는 방식에 유의하세요. 이를 수정하려면 AND
조건이 모든 부분에 적용되도록 명시적인 괄호가 필요합니다.
<code class="language-sql">SELECT * FROM people WHERE (university='2') AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE) OR fname LIKE '%box%' OR lname LIKE '%box%')</code>
모든 조건을 괄호 안에 그룹화하여 지정된 모든 기준을 충족하는 레코드만 반환되도록 의도한 논리를 시행합니다. 이는 SQL에서 복잡한 WHERE
절을 구성할 때 신중한 괄호 사용의 중요성을 강조합니다.
위 내용은 내 SQL WHERE 절이 매개변수를 무시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!