연관 서브쿼리 질문! 0 1 972

by 가영 [SQL Query] 연관서브쿼리 서브쿼리 [2017.08.20 16:40:39]


선수 자신이 속한 팀의 평균 키보다 작은 선수들의 정보를 출력

SELECT T.TEAM_NAME 팀명, M.PLAYER_NAME 선수명, M.POSITION 포지션, M.BACK_NO 백넘버, M.HEIGHT 키

FROM PLAYER M, TEAM T

WHERE M.TEAM_ID = T.TEAM_ID AND M.HEIGHT < ( SELECT AVG(S.HEIGHT) FROM PLAYER S

WHERE S.TEAM_ID = M.TEAM_ID AND S.HEIGHT IS NOT NULL

GROUP BY S.TEAM_ID )

ORDER BY 선수명;

 

연관서브쿼리 부분이 잘 이해가 안가요 ㅠ 서브쿼리부분에서 왜 셀프조인하는건가요?

by 마농 [2017.08.21 07:46:01]

서브쿼리는 연관과 비연관으로 나뉘는데.
서브쿼리 안의 조건 중에 메인쿼리의 컬럼이 있는지로 구별됩니다.
비연관의 경우 서브쿼리는 독립적으로 수행이 됩니다.
연관의 경우엔 메인 쿼리의 결과 매 행마다 반복적으로 수행됩니다.
"선수 자신이 속한 팀의 평균 키보다 작은 선수" 에서는
"선수"라는 표현이 두번 나오죠.
맨 앞의 선수는 메인의 player m 을 의미하구요.
맨 뒤의 선수는 서브의 player s 을 의미합니다.
"자신이 속한 팀의 평균 키보다 작은" 은 두 선수간의 관계를 표현합니다.
메인에서 player m 을 조회하면서 각 행마다
같은 팀(s.team_id = m.team_id) 소속 선수(player s)의 평균키(avg(s.height))를 구해
자신의 키(m.height)와 비교하는 것입니다.
 

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