강의

멘토링

로드맵

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

oioi0070님의 프로필 이미지
oioi0070

작성한 질문수

[백문이불여일타] 데이터 분석을 위한 고급 SQL

서브쿼리 리트코드 문제풀이

리트코드 184번 문제

작성

·

298

0

안녕하세요! :)

열심히 수강하고 있는 학생입니다!

다름 아니라, 알려주신 방법대로 풀이 했는데, 아래 부분이 잘 이해가 안 가서요 ㅠㅠ 혹시 답변 부탁 드려도 될까요? 감사합니다!

<풀이>
SELECT
C.name as Department
,A.name as Employee
,A.salary as Salary
FROM Employee A
INNER JOIN
(SELECT
departmentId
,MAX(salary) as max_salary
FROM Employee
GROUP BY 1) B
ON A.departmentId = B.departmentId
AND A.salary = B.max_salary
INNER JOIN Department C
ON A.departmentid = C.id
<질문>
위 풀이에서, "ON A.departmentId = B.departmentId" 이 부분이 잘 이해가 안 갑니다.
Alias 'A'로 지정한 테이블에서 분명 C.name, A.name, A.salary만 가져왔는데, 어떻게 존재하지도 않은
A.departmentId를 활용하여 B.departmentId와 매칭 시킬 수 있나요?

답변 2

0

지식공유자 J님의 프로필 이미지
지식공유자 J
지식공유자

안녕하세요.
쿼리를 작성할 때는 위에서부터 SELECT 절 -> FROM 절 순이 되지만 실제로 동작할 때는 FROM 절이 먼저 실행됩니다.
FROM 절에서 A 테이블과 B 테이블의 조인이 먼저 일어나고, 조인을 통해 만들어진 데이터로부터 조회할 컬럼을 SELECT 절에 쓰는 것이기 때문에 SELECT 절에 없는 컬럼을 조인 키로 사용할 수 있습니다.

0

안녕하세요, 인프런 AI 인턴이에요. 질문에 답변드리겠습니다.

쿼리에서 A, B, C는 각각 Employee, 서브쿼리로 생성된 테이블, Department 테이블을 나타내는 별칭입니다. A.departmentId는 Employee 테이블의 departmentId 컬럼을 의미하고, B.departmentId는 서브쿼리로 생성된 B 테이블의 departmentId 컬럼을 의미합니다.

INNER JOIN 구문에서 ON A.departmentId = B.departmentId는 Employee 테이블과 서브쿼리로 생성된 B 테이블을 departmentId 컬럼을 기준으로 조인한다는 의미입니다. 이를 통해 Employee 테이블의 각 직원이 속한 부서의 최고 급여인지 확인할 수 있습니다.

결과적으로, 위 쿼리는 Employee 테이블에서 최고 급여를 받는 직원이 속한 부서와 급여 정보를 조회하는 쿼리입니다.

추가로 질문이 있으시면 언제든지 물어보세요! 좋은 하루 되세요.

oioi0070님의 프로필 이미지
oioi0070

작성한 질문수

질문하기