not exists 예제

팁: 이 예제로 이동하기 전에 SQL Subquery 문서를 참조하여 하위 쿼리 디자인 및 쿼리 구문 분석방법을 이해하는 것이 좋습니다. 하위 쿼리를 사용하여 데이터 집합을 비교할 때 EXISTS 논리 연산자가 IN보다 빠르다는 것이 사용되었습니다. 예를 들어 쿼리가 특정 작업을 수행해야 하지만 하위 쿼리가 행을 반환한 경우에만 where [NOT] EXISTS(하위 쿼리)를 평가할 때 데이터베이스 엔진은 하나의 행만 발견한 즉시 검색을 종료할 수 있지만 WHERE [NOT] IN ( subquery)는 추가 처리 전에 항상 하위 쿼리에서 모든 결과를 수집합니다. 고객 테이블에 나타나는 customerNumber가 주문 테이블에 있는 경우 하위 쿼리는 첫 번째 일치 행을 반환합니다. 결과적으로 EXISTS 연산자는 true를 반환하고 주문 테이블 검색을 중지합니다. 그렇지 않으면 하위 쿼리는 행을 반환하지 않고 EXISTS 연산자는 false를 반환합니다. 마지막 예 (이중 부정사용)는 다음과 같이 해석될 수 있다:Store `si`는 모든 도시에 있는 경우, 이 가게의 경우 `si`가 두 번째 선택 문 SELECT를 exist.so 않는 도시 cj를 찾을 수 없는 경우 * 존재하지 않는 도시에서 detemine th를 위해 적용된다. at.best 첫 번째 예제에서 언급한 EXISTS 연산자사용 쿼리보다 약간 빠릅니다. 아래 EXIST 연산자 사용 쿼리의 성능을 확인합니다: 하위 쿼리가 TRUE를 반환하고 존재하지 않음이 false를 반환하기 때문에 쿼리가 빈 레코드를 반환하는 것을 볼 수 있습니다. 더 나은 이해를 위해 한 가지 예를 더 보여 드리겠습니다. 앞의 예제에서 t2에 NULL 값만 있는 행을 포함하는 경우 EXISTS 조건은 TRUE입니다. [NOT] EXISTS 하위 쿼리에는 거의 항상 상관 관계가 포함되어 있기 때문에 실제로는 거의 불가능합니다.

다음은 몇 가지 보다 현실적인 예입니다: 하위 쿼리가 모든 행을 반환하는 경우 EXISTS 하위 쿼리는 TRUE이고 EXISTS 하위 쿼리는 FALSE입니다. 예를 들어 MS SQL 배경 (내 잘못이 아닌 정직함)에서 오고 있으며 대화 형 모드에서 예상대로 `존재`가 작동하지 않는다는 것을 추가하고 싶습니다. 나는 다음과 같은 일을 할 수 있을 것으로 예상 :if 존재 (사용자 이름 = @username 사용자로부터 1을 선택하십시오) 다음 뭔가를 할 수 있습니다;end if;하지만 대화 형 모드에서, 이것은 구문 오류를 생성합니다. 이상하게도, 그래도, 이것은 저장된 프로시저에서 작동합니다. 마지막 예제는 이중 중첩된 NOT EXISTS 쿼리입니다. 즉, NOT EXISTS 절 내에 NOT EXISTS 절이 있습니다. 공식적으로, 그것은 질문에 대답 “도시는 상점에없는 상점이 존재합니까”? 그러나 중첩 된 NOT EXISTS가 질문에 대답한다고 말하는 것이 더 쉽습니다 “모든 y에 대한 x TRUE입니까?” TestDeleteRows에서 삭제 존재 (TestDeleteRowsValue에서 열 1 선택) 이 존재에 대해 유사하게 작동 하는 것 같지만… 테이블이 비어 있으면 NOT EXISTS는 항상 false를 반환합니다. 예:테이블 상태 만들기(state_id int auto_int null, state_code char(2) null이 아님, state_name varchar(100) null이 아님, UNIQUE(state_code), PRIMARY KEY(state_id)));mysql> 존재하지 않는 상태에서 100개 선택(주 에서 1개 선택) _id=1); 빈 세트(0.00초)는 하위 쿼리에서 SELECT *, SELECT 열, select a_constant 또는 모든 것을 사용할 수 있습니다.