mssql exists 관련 질문드립니다. 0 1 2,803

by 준일정 [SQL Query] mssql mysql oracle sql query [2018.06.25 22:59:13]


aa.PNG (13,455Bytes)

일단 이런 테이블의 데이터가 있습니다. 

 

select 
    *
from test1 a 
where exists ( select 1 from test3 b where a.no = b.no1 ) 


결과값은 

no    |  name
-------------------
1      |   Lee 
로 나오는 데 그 이유를 모르겠습니다. 



제가 이해한 

select 
    *
from test1 a 
where exists ( select 1 from test3 where a.no = b.no1 ) 

(위의)이 쿼리의 의미는 

select 
1
from test1 a, test3 b 
where a.no = b.no1 
이라는 데이터가 존재하니? 
(이 쿼리의 결과값은 
1
1
이 될 것이다)

존재하면 조회좀 해줄래?  인데 

row가 2줄인데... 어떻게  한줄의 1    Lee만 나오냐입니다. 

솔직히 질문을 어떻게 해야 할 지도 모르겠어요..
제가 무슨소리하는지 좀 알아들으신분이라면 답변좀 부탁드립니다. 


 

by 마농 [2018.06.26 08:14:31]

메인쿼리의 테이블을 조회하는 것이지, 서브쿼리를 조회하는 것이 아닙니다.
서브쿼리는 존재여부만 체크하는 거죠.
메인쿼리 테이블이 1건이니 한건만 나오는 것입니다.
동작원리는
1. 메인테이블을 1건씩 읽습니다. 5건
2. 메인 결과 1건씩 서브쿼리를 돌립니다. 5번
3. no = 1 일 때 서브쿼리 결과 존재합니다.
4. no = 1 의 메인 결과를 결과셋에 담습니다.
5. no = 2 일 때 서브쿼리 결과 없습니다. 패스
6. no 가 각각  3, null, null 에 대한 서브쿼리 결과 없습니다. 패스
7. 결과셋을 리턴합니다.

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