[MySQL] EXISTS 와 NOT EXISTS
서브쿼리가 어떤 레코드 던지 리턴하면 EXIST subquery는
TRUE이며 NOT EXIST suquery는 FALSE가 된다.
예를 들면:
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
전통적으로 EXISTS서브쿼리는 SELECT *와 함께 시작하나, SELECT 5 혹은 SELeCT
column1과 함께 시작할 수도 있다. MySQL은 그런 서브쿼리에서 SELECT를 무시하여
차이를 만들지 않는다. 처음 예문에서 NULL 값들만 가진 레코드라도 t2가 레코드를
포함하면 EXISTS조건은 TRUE를 갖는다.
실제로 [NOT] EXISTS서브 쿼리는 항상 상호 관계를 갖기 때문에 드문 예제 이다.
여기 실질적인 예제가 있다.:
어떤 종류의 가계가 하나 이상의 도시에 있는가?
SELECT DISTINCT store_type FROM stores WHERE EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
어떤 종류의 가계가 어떤 도시에도 나타나지 않는가
SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
어떤 종류의 가계가 모든 도시에서 보여지는가?
SELECT DISTINCT store_type FROM stores s1 WHERE NOT EXISTS ( SELECT * FROM cities WHERE NOT EXISTS ( SELECT * FROM cities_stores WHERE cities_stores.city = cities.city AND cities_stores.store_type = stores.store_type));
마지막 예문은 이중 중첩 NOT EXISTS 쿼리이다. 즉, NOT EXISTS질의이다. 즉 NOT EXISTS절 안에 NOT EXISTS절을 갖는다. 공식적으로 그것은 “가계들 안에서 있는 않은 한 가계를 가진 도시가 있는가?”의 질문에 응답한다. 그러나 중첩 NOT EXISTS가 “x가 모든 y에 대해 TRUE”인가 라는 질문에 답하기를 쉽도록 한다.
'IT' 카테고리의 다른 글
[스크랩] MySQL 함수 레퍼런스(수학 관련) (0) | 2012.12.20 |
---|---|
[스크랩] Python/파이썬 에러 해결, SyntaxError: Non-ASCII character \x8c in file... (0) | 2012.11.14 |
[스크랩] SKT·KT, 모바일인터넷전화를 막는 건 너무 하잖아? 공정위, 방통위에 고발 (0) | 2011.11.23 |
[스크랩] 친환경 전기 어선시장 `활짝` (0) | 2010.09.19 |
[스크랩] 자동차만 하이브리드? 이젠 자전거도 하이브리드! (0) | 2010.09.19 |