anayltic sql, 조인, 서브쿼리 셋중 어떤걸 쓰던 상관이 없나요?
468
4 asked
강사님, 서브쿼리 실습 -01에서 다루셨던것 처럼
위의 3가지 방법(anayltic sql, 조인, 서브쿼리)은 다르지만 결국 같은 값이 나옵니다.
제 생각에는 가장 가독성이 좋은건 where절 서브쿼리 인거 같고, 조인은 불필요한 행까지 다 가져오므로 무거워 질거 같고, 개인적으로 analytic sql 사용시 가장 직관적으로 느껴지기에 이해하기 쉬워서 많이 쓰고 있습니다.
모로 가도 서울만 가면 되긴 하지만, ㅎㅎ 강사님께서 추천해주신다면 어떤걸 쓰는게 현실 업무 혹은 협업 과정에서 좋을까가 궁금해서 질문 드려봅니다!
Answer 1
0
안녕하십니까,
질문이 서브쿼리 실습 01의 SQL에 국한된건지 아닌 SQL 전반에 대해서 질문하신 건지 잘 모르겠습니다만,,,,,
강의를 통해서도 잘 알고 계시겠지만, 조인과 서브쿼리는 다릅니다. 조인은 1:M시 M의 집합 레벨로 집합 레벨이 변경되지만 서브쿼리는 메인 쿼리의 집합 레벨을 서브쿼리가 변경하지 않습니다.
where절 서브쿼리가 가장 가독성이 좋게 느끼는건 실습 예제로 주어진 문제가 서브쿼리로 적절하게 사용될 예제를 사용했기 때문입니다.
서브 쿼리를 사용하면 메인 쿼리의 컬럼외에는 추출할 수 없습니다. 서브쿼리는 체크 조건과 같이 메인 쿼리의 결과값을 걸러내는데 주로 사용됩니다. 반면에 조인은 조인 대상 테이블이 서로 동등(?)하므로 어느 테이블의 컬럼이라도 다 가져올 수 있습니다.
이러한 비교가 있다는 것은 강의를 통해서 잘 알고 계실것 같고,,,,
말씀하신대로 서브쿼리가 가독성이 좋습니다. 그리고 메인 쿼리의 집합 레벨을 변경 시키지도 않습니다. 때문에 실무에서 서브 쿼리를 많이 활용합니다. 그런데 서브 쿼리를 불필요하게 남발하는 경향이 생기다 보니 오히려 가독성이 떨어지거나 SQL 성능상에도 문제가 발생하는 사례가 많아지게 됩니다. 뒤에 제가 스칼라 서브쿼리를 설명 드릴텐데, 스칼라 서브쿼리가 도입되면서 한층 더 서브쿼리가 편해진 반면에 조인으로 사용되어야 할 SQL이 스칼라 서브쿼리가 활용되면서 비효율적인 SQL 작성 사례가 늘어나기도 합니다.
정리해서 말씀 드리면, 조인이 가장 기본입니다. 그리고 굳이 다른 테이블의 컬럼을 최종적으로 가져올 필요가 없고 체크 조건이나 Where절의 조건으로 사용된다면 서브쿼리를 이용하면 좋습니다.
analytic SQL은 사용하는 업무가 분석 업무인가 아님 OLTP성 업무인가에 따라 달라질 수 있지만, 분석 업무에서는 analytic SQL을 사용하면 좋습니다.
그리고 질문하신 서브쿼리 실습 예제에서는 당연히 서브쿼리가 더 직관성있는 SQL 작성을 가능하게 합니다.
조인, Analytic SQL, 서브쿼리 각각이 더 나은 선택이 될 수 있는 상황이 다르기 때문에 이들이 어떻게 동작하는지를 이해하셨다면, 좀 더 직관적이고 가독성이 높다고 스스로 판단되시는 것을 선택하시면 될 것 같습니다.
감사합니다.
'레벨 유지'의 의미에 대한 질문
0
52
2
date_part
0
55
2
lag/lead offset 관련 질문
0
55
2
join 관련 질문 (inner join, left join)
1
100
2
배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?
0
89
2
Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다
0
53
2
rollup시 null값 매출 라벨링
0
54
2
10. 조인 실습 - 02 관련 질문
0
59
1
조인실습03 - join의 pk-fk join
0
108
2
조인실습03 - join의 pk-fk join
0
68
2
(공유)맥, 스키마 import
0
81
2
sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?
0
137
2
1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?
0
131
2
안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.
0
91
1
섹션5 Group by 실습-01 강의 예제 질문
0
117
2
섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문
0
123
2
섹션2 조인 실습 01 강의 질문
0
133
2
lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.
0
126
1
Dbeaver오류
0
630
2
직원 별 가장 높은 매출
0
118
1
강의순서대로 실습코드순알려주세요.
0
133
1
m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?
0
130
1
rollup
0
91
2
Dbeaver에 접속해도 postgressql이 네비게이터에 안보입니다.
0
355
2

