NOT EXISTS 연관 문의 0 4 787

by DB_SQL [Oracle 기초] NOT EXSISTS [2020.11.03 18:00:05]


3.png (20,479Bytes)

안녕하세요? SQL 연습할 수 있는 사이트에서 연습하다가 이해가 안되어서 질문드립니다.

문제는 모든 나라의 인구가  25000000 이하인 대륙(continent)를 만족하는 대륙들에 속한 나라의 이름, 인구를 출력하는 것입니다.

이것을 NOT EXISTS로 풀어보려고 했는데(NOT EXISTS 정확히 이해하기 위함), NOT EXISTS로 어떻게 하면 될지 도저히 모르겠어서 여쭤봅니다..

 

by 신이만든지기 [2020.11.04 17:47:10]
SELECT NAME
     , CONTINENT
     , AREA
     , POPULATION
     , GDP
  FROM TABLE_NAME A
 WHERE NOT EXISTS
           (SELECT 1
              FROM TABLE_NAME
             WHERE POPULATION <= 2500000 AND NAME = A.NAME);

 

not exists 안의 서브쿼리와 바깥  테이블과 조인(연관)을 맺어줘야 합니다.

 


by DB_SQL [2020.11.04 21:11:20]

답변해주셔서 정말 감사드립니다.

제가 그런데 아직 초짜라 상관쿼리가 어떻게 작동하는지 잘 모르겠어서 여쭤봅니다...

혹시 순서를 좀 여쭤봐도 될까요..??

바깥의 1행부터 시작하는지... 그리고 만약 맞다면, 한 개의 행에 대해서 서브쿼리 몇 개가 실행되는지 도무지 모르겠습니다ㅜㅜ....


by 마농 [2020.11.05 09:15:48]

메인 쿼리 결과 행마다 각각의 서브쿼리가 실행됩니다.
모든 나라의 인구가 25000000 이하인 대륙
인구가 25000000 초과인 나라가 존재하지 않는 대륙

SELECT *
  FROM table_name a
 WHERE NOT EXISTS
       (SELECT 1
         FROM table_name
        WHERE population > 2500000
          AND continent = a.continent
        )
;

 


by DB_SQL [2020.11.05 20:48:38]

 

마농님, 깔끔한 코드와 설명 감사합니다. 제가 정말 초보라 또 여쭤보는데, 예를들어 저 위에 테이블에 아프가니스탄부터 시작해서 아프가니스탄이 속한 대륙의 나라를 쫙 검사하고, 그 다음 로우(알바니아) - 유럽 대륙에 속한 나라을 쫙 검사하고, 그 다음에 또 Andorra 검사할 때는 유럽에 속한 나라를 쫙 검사하는 것인가요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입