> 데이터 베이스 > MySQL 튜토리얼 > SQL 쿼리에서 NOT IN 대신 NOT EXISTS 또는 명시적 조인을 사용하는 이유는 무엇입니까?

SQL 쿼리에서 NOT IN 대신 NOT EXISTS 또는 명시적 조인을 사용하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-03 21:15:08
원래의
266명이 탐색했습니다.

Why Use NOT EXISTS or Explicit Joins Instead of NOT IN in SQL Queries?

SQL 쿼리에서 "NOT IN"의 위험성

한 테이블의 데이터가 다른 테이블에 존재하지 않는지 확인하는 쿼리를 시도할 때 , "NOT IN" 연산자는 특히 null을 처리할 때 예상치 못한 결과를 초래할 수 있습니다.

"NOT IN" 문제

제공된 쿼리에서 "NOT IN" 절은 하위 쿼리의 결과를 "ID_Courses" 열과 비교합니다. "등급" 테이블에서:

Grade.ID_Courses NOT IN (SELECT ID_Courses FROM Evaluation WHERE NAME='JOHN' and Year=1)
로그인 후 복사

하위 쿼리가 null 값을 반환하는 경우 "NOT IN" 절은 "Year" 1의 지정된 "JOHN" 레코드가 "Grade" 테이블에 존재하는 경우에도 false로 평가됩니다. 이는 SQL의 세 값 논리가 null을 "알 수 없음"으로 해석하여 잘못된 평가로 이어지기 때문입니다.

"NOT IN"에 대한 대안

이 문제를 방지하려면 , NOT EXISTS 또는 명시적 조인과 같은 대체 방법을 사용하는 것이 좋습니다.

NOT 존재

SELECT Grade.ID_Courses, Course.ID_Courses, Grade.NAME, 
    Course.NAME, Grade.ID_Courses,
    Evaluation.NAME,
    Evaluation.Year,    
    Grade.Year
    from Grade
    LEFT JOIN Course ON Grade.ID_Courses=Course.ID_Courses
    LEFT JOIN Evaluation ON Grade.NAME=Evaluation.NAME AND GRADE.YEAR = Evaluation.YEAR
    WHERE 
    Grade.NAME='JOHN' and 
    Evaluation.NAME IS NULL
    GROUP BY Grade.ID_Courses
로그인 후 복사

명시적 조인

SELECT Grade.ID_Courses, Course.ID_Courses, Grade.NAME, 
    Course.NAME, Grade.ID_Courses,
    Evaluation.NAME,
    Evaluation.Year,    
    Grade.Year
    from Grade
    LEFT JOIN Course ON Grade.ID_Courses=Course.ID_Courses
    LEFT JOIN Evaluation ON Grade.NAME=Evaluation.NAME AND GRADE.YEAR = Evaluation.YEAR
    WHERE 
    Grade.NAME='JOHN' and 
    NOT (Evaluation.NAME IS NOT NULL)
    GROUP BY Grade.ID_Courses
로그인 후 복사

이러한 대안을 사용하면 쿼리가 지정된 데이터가 없는 레코드를 정확하게 식별하도록 할 수 있습니다. null 값의 존재 여부에 관계없이 다른 테이블에 존재합니다.

위 내용은 SQL 쿼리에서 NOT IN 대신 NOT EXISTS 또는 명시적 조인을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿