인프런 커뮤니티 질문&답변

khloe님의 프로필 이미지
khloe

작성한 질문수

데이터 분석 SQL Fundamentals

[서브 쿼리 실습 02 - 5:57] 상관 서브쿼리 관련 질문

해결된 질문

작성

·

187

0

안녕하세요, 강의 너무 잘 듣고 있습니다.

서브 쿼리 실습 -02 강의 5:57에 나오는 부분에서 하나 궁금한 점이 있어서 문의드립니다.

select * from hr.emp_hist_01 a where todate =

(select max(todate) from hr.emp_hist_01 x where x.empno = a.empno);

위 쿼리에서 서브쿼리가 9999-12-31로 단일 값이 나올 것으로 생각했는데,

아래 테이블 12행에 보면 1983-12-24 데이터도 있어서요.

서브쿼리에 group by empno가 없는데 어떻게 각 empno별 max(todate) 값을 가져오는지 궁금합니다.

group by empno가 없으면 그냥 x.empno = a.empno로 조인을 한 뒤 전체 데이터에서 max(todate)값을 가져오는 걸로 이해했는데 아닌 걸까요?

 

감사합니다.

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

적어 주신대로 각 empno별 max(to_date)를 가져오기 때문에 1983-12-24 가 나오게 됩니다.

empno별 max(to_date)를 가져 올 수 있는 이유는 서브 쿼리내의 where x.empno = a.empno

로 메인쿼리와 연결이 되기 때문입니다. 그러니까 메인 쿼리 집합의 레코드 한건씩 서브 쿼리 연결 조건인

where x.empno = a.empno 로

로 서브쿼리와 연결하면서 empno 별 max(to_date)를 계산해 내기 때문입니다.

그러니까 메인 쿼리의 empno 7369 가 서브쿼리의 empno 7369와 연결되어 여러개의 레코드가 있더라도 max(to_date)를 하면 한건 max to_date로 만들어 지게 되므로 별도의 group by 는 필요하지 않습니다. 물론 group by empno를 하셔도 결과는 동일합니다.

 

감사합니다.

 

 

 

khloe님의 프로필 이미지
khloe

작성한 질문수

질문하기