>데이터 베이스 >MySQL 튜토리얼 >복잡한 SQL 쿼리에서 WHERE 절 필터링을 올바르게 적용하는 방법은 무엇입니까?

복잡한 SQL 쿼리에서 WHERE 절 필터링을 올바르게 적용하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-19 10:16:091002검색

How to Correctly Apply WHERE Clause Filtering in Complex SQL Queries?

SQL문의 WHERE 매개변수 우선순위 문제

다음 SQL 쿼리는 "people" 테이블에서 데이터를 검색하고 결과를 "university=2"인 레코드로 제한하도록 설계되었습니다.

<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>

그러나 이 쿼리는 '대학=2' 조건을 넘어서는 예상치 못한 결과를 낳았습니다. 이 문제를 해결하려면 "university=2" 조건이 검색 결과를 엄격하게 제한하는지 확인해야 합니다.

괄호를 조정하여 작업 순서 제어

이 쿼리의 문제는 괄호를 잘못 사용하여 표현식 평가 순서에 영향을 미친다는 것입니다. 원래 쿼리에서는 "AND"가 "OR"보다 우선순위가 높습니다. 즉, 먼저 평가된다는 의미입니다. 결과적으로 "university=2"는 "MATCH (lname,fname) AGAINST ('massive' IN BOOLEAN MODE)"와만 결합되며 "fname/lname" 테스트와는 결합되지 않습니다.

이 문제를 해결하려면 "university=2"가 전체 검색 기준과 결합되도록 괄호를 조정해야 합니다.

<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>

이 조정을 통해 이제 "university=2" 조건이 괄호 안에 표시됩니다. 이는 해당 조건이 먼저 평가된 다음 두 번째 괄호 세트 내의 검색 조건과 결합되어야 함을 나타냅니다. 이렇게 하면 "university=2"가 true인 레코드만 검색에서 고려됩니다.

위 내용은 복잡한 SQL 쿼리에서 WHERE 절 필터링을 올바르게 적용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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