Inflearn brand logo image

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

index님의 프로필 이미지
index

작성한 질문수

김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)

SQL 실행 순서

WHERE절 사용에 질문이 있습니다.

해결된 질문

작성

·

89

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요

쿼리를 작성하다 SELECT에 서브쿼리, 함수, 산술연산, 문자열 결합, CASE, DECODE 등 여러가지 작업을 진행하게 됩니다.

이 요소를 where절에 사용하려면 select 절에 입력한 내용을 그대로 입력해야 합니다.

 

이런 경우 저는 쿼리를 한번 감 싸서 where절에서 별칭을 사용해서 처리하는 방식으로 많이 작성하고 있습니다.

 

이런 방식이 안티패턴인지, 이런 방식으로 계속 작성해도 되는지 궁금합니다.

 

SELECT
		customer_name,
        total_purchase
FROM(
	SELECT
		customer_name,
		SUM(price * quantity) AS total_purchase
	FROM
		order_stat
	GROUP BY
		customer_name
) A
WHERE
	A.total_purchase >= 400000;

이 케이스는 HAVING로 해결하면 되는 문제지만

이와 별개로(GROUP BY 존재여부 상관없이) 기존 SQL을 새로운 SELECT ~~ FROM (기존SQL) WHERE (별칭을 사용해서 제어) 이런 방식으로 사용해도 괜찮은 건지 궁금합니다.

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. index님

AI 인턴이 잘 답변해주었는데요. 여기에 더해서 답변을 드릴께요.

SQL의 논리적인 실행 순서상 FROM -> WHERE -> ... -> SELECT 순서이기 때문에 SELECT에서 사용한 별칭을 WHERE에서 사용할 수 없는 문제이지요.

이런 문제를 우회하기 위해 인라인 뷰를 사용하셨는데요.

말씀하신 방식은 안티패턴이 아닙니다. 오히려 SQL의 작동 원리를 잘 이해하고 활용하는 예입니다.

이런 방식은 읽기 쉬움과 중복 제거라는 분명한 이점이 있고, 현대의 옵티마이저들은 대부분 이를 잘 풀어냅니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. index님!

WHERE절에서 별칭을 활용하여 쿼리를 작성하는 방식에 대해 질문해 주셨는데요.

기본적으로 여러 SQL 요소들을 결합하여 쿼리를 작성을 하다가, SELECT에서 별칭(alias)을 활용하여 WHERE 조건을 누적하는 방식은 매우 일반적인 방법 중 하나입니다. 이는 복잡한 쿼리를 논리적으로 분리하고 가독성을 높이는 데 큰 도움이 됩니다.

다음은 해당 접근 방식의 장점과 주의해야 할 점입니다:

  1. 가독성 및 유지보수 측면: 별칭을 활용하면 중첩된 식들을 간단하게 하고, 메인 쿼리에서 필드를 명확하게 참조할 수 있어 코드의 가독성이 향상됩니다. 특히, 복잡한 식이나 집계 함수 등을 중복해서 사용할 필요가 없으므로 유지보수에도 유리합니다.

  2. 성능 측면: 일반적으로 별칭을 사용해 쿼리를 감싸는 것은 성능에 큰 영향을 미치지 않습니다. 그러나 매우 큰 데이터셋을 다루며 서브쿼리를 과도하게 중첩할 경우 성능 최적화를 고려해야 할 수도 있습니다. 인덱스 활용이나 데이터베이스 옵티마이저의 도움을 받는 것이 좋습니다.

이 방식은 주로 데이터 가공 및 분석 시 유용하며, Oracle, MySQL, PostgreSQL 등 다양한 RDBMS에서 자주 사용됩니다. 하지만 쿼리가 복잡해질수록 디버깅이 어려울 수 있으므로 항상 쿼리의 실행 계획(EXPLAIN PLAN 등)을 확인하여 예상 실행 방식과 성능을 평가해 보시는 것이 좋습니다.

유사한 쿼리 질문 사례를 위한 링크는 아래를 참조하시면 도움이 될 수 있습니다:
- 복잡한 쿼리에서 서브쿼리와 별칭 처리 방법

그래서, 별칭을 사용하는 현재의 방법은 SQL을 더 쉽게 관리할 수 있게 해 주므로 충분히 적합한 방식이라고 할 수 있습니다. 다만, 항상 성능 측면도 함께 고려하여 작성해 주시기를 권장드립니다.

저는 질문자님의 이해를 돕고자 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

index님의 프로필 이미지
index

작성한 질문수

질문하기