inflearn logo
강의

Course

Instructor

Data Analysis SQL Fundamentals

10. 조인 실습 - 02 관련 질문

59

Idea

23 asked

0

안녕하세요.

강의를 들으면서 잘 이해가 되지 않는 부분이 있어 질문 드립니다.

질문 드리고자 하는 부분은 "직원명 SMITH의 과거 소속 부서 정보를 구할 것"이라는 문제의 쿼리문인데요.

 

우선 제가 작성한 쿼리문은 아래와 같습니다.

selecta.ename, a.empno, b.deptno, c.dname, b.fromdate, b.todate

fromhr.empa

joinhr.emp_dept_histbona.empno = b.empno

joinhr.deptcona.deptno = c.deptno

wherea.ename = 'SMITH';

 

그리고 강사님께서 작성하신 쿼리문은 아래와 같구요.

selecta.ename, a.empno, b.deptno, c.dname, b.fromdate, b.todate

fromhr.empa

joinhr.emp_dept_histbona.empno = b.empno

joinhr.deptconb.deptno = c.deptno

wherea.ename = 'SMITH';

 

두 쿼리문의 차이는 join hr.dept c on 부분에서 "a.deptno = c.deptno"과 "b.deptno = c.deptno"입니다.

 

제 생각에는 위 두 쿼리문이 같은 결과를 뱉어야 할 것 같은데.. 아래 쿼리문 결과를 보면 dname 부분이 다르게 출력됩니다.

 

1) 제가 작성한 쿼리문 결과

image.png

 

2) 강사님이 작성하신 쿼리문 결과

image.png

 

제 짧은 지식으로는 두 결과가 동일해야 할 것 같은데, 제가 잘못 생각한 부분이 있다면 말씀 부탁드립니다 ㅠ

sql postgresql dbms/rdbms 데이터-엔지니어링

Answer 1

1

dooleyz3525

안녕하십니까,

이런 경우 수행하신 SQL을 차근 차근 결합해 보시는게 좋습니다.

먼저 emp a 와 emp_dept_hist b 만 조인해서 a의 dept_no와 b의 dept_no를 보시면

selecta.ename, a.empno, a.deptno as a_deptno, b.deptno as b_deptno

fromhr.empa

joinhr.emp_dept_histbona.empno = b.empno

wherea.ename = 'SMITH';

a의 dept_no는 직원의 현재 dept_no입니다. 그리고 b의 dept_no는 과거까지 포함된 dept_no 입니다.

그런데 아래와 같이 emp의 a.dept_no와 dept의 c.deptno를 조인하게 되면 현재 부서의 dept에 대한 정보만 나오게 됩니다. 그러니까, b.fromdate, b.todate는 부서 변경이력이 나오지만, c.dname은 현재 부서명만 나오게 되므로 원하는 결과가 되지 않습니다.

selecta.ename, a.empno, b.deptno, c.dname, b.fromdate, b.todate

fromhr.empa

joinhr.emp_dept_histbona.empno = b.empno

joinhr.deptcona.deptno = c.deptno

wherea.ename = 'SMITH';

 

그래서 제가 작성한 SQL과 같이 과거 이력의 emp_dept_hist의 deptno와 dept의 deptno를 조인해야 과거 dept에 대한 dname 정보를 가져 올 수 있습니다.

 

감사합니다.

0

Idea

아.. emp와 emp_dept_hist 테이블의 deptno 컬럼 앞에 "a_", "b_"를 붙여서 비교해보니 빠르고 명확하게 이해가 되네요!

 

빠른 답변 정말 감사드립니다 ㅎㅎ

 

머신러닝 PerfectGuide부터 강사님 강의를 수강한 사람으로써, 정말 이해하기 쉽게 잘 설명해주시는 것 같아요!

 

항상 감사드립니다 :)

'레벨 유지'의 의미에 대한 질문

0

51

2

date_part

0

55

2

lag/lead offset 관련 질문

0

55

2

join 관련 질문 (inner join, left join)

1

98

2

배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?

0

89

2

Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다

0

52

2

rollup시 null값 매출 라벨링

0

53

2

조인실습03 - join의 pk-fk join

0

107

2

조인실습03 - join의 pk-fk join

0

68

2

(공유)맥, 스키마 import

0

81

2

sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?

0

137

2

1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?

0

130

2

안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.

0

90

1

섹션5 Group by 실습-01 강의 예제 질문

0

117

2

섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문

0

123

2

섹션2 조인 실습 01 강의 질문

0

133

2

lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.

0

125

1

Dbeaver오류

0

628

2

직원 별 가장 높은 매출

0

118

1

강의순서대로 실습코드순알려주세요.

0

133

1

m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?

0

129

1

rollup

0

90

2

Dbeaver에 접속해도 postgressql이 네비게이터에 안보입니다.

0

354

2

제발...오류가 계속 납니다

0

236

2