강의

멘토링

로드맵

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

작성자 없음

작성자 정보가 삭제된 글입니다.

김영한의 실전 데이터베이스 - 기본편

문제와 풀이1

문제와 풀이1 - 3번 문제

작성

·

15

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요?
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?
3. 질문 잘하기 메뉴얼을 읽어보셨나요?

[질문 내용]
안녕하세요 영한님, 강의 정말 재밌게 봤습니다!

다름이 아니라 문제와 풀이 3번 문제 "RIGHT JOIN으로 주문 없는 고객 찾기"를 보면 '가입은 했지만 주문 기록이 없는 고객의 이름과 이메일을 조회하는 SQL을 작성하라고 되어있는데, DISTINCT를 붙여 중복을 제거한 행을 조회하는게 맞는게 아닌가 싶어 질문 드립니다!!

 

-- 기존 답안
SELECT
    u.name, u.email
FROM
    orders o
RIGHT JOIN
    users u on o.user_id = u.user_id
WHERE o.order_id IS NULL;

-- 제가 생각한 쿼리문
SELECT
    DISTINCT u.name, u.email
FROM
    orders o
RIGHT JOIN
    users u on o.user_id = u.user_id
WHERE o.order_id IS NULL;

답변 2

0

다시 생각해보니 orders-usersright 조인된 것들 중 order_id가 null인 것만 걸러지니까

조회되는 고객 정보는 굳이 distinct를 쓰지 않아도 하나씩만 나오겠더라구요.

 

질문을 삭제하려고 했는데 삭제가 안 되네요ㅎㅎ

0

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

MY님이 제기하신 질문을 잘 검토해보았습니다. 질문의 핵심은 ‘가입은 했지만 주문 기록이 없는 고객의 이름과 이메일을 조회하는 경우에 DISTINCT 사용이 필요한가’에 관한 것입니다.

쿼리의 목적과 DISTINCT 사용 여부

  • 목적: 가입은 했지만 주문 기록이 없는 고객을 조회하고자 할 때, RIGHT JOIN 을 통해 사용되지 않은 고객의 레코드를 조회하게 됩니다. 따라서 orders 테이블의 order_id가 null인 경우만을 검색하는 것을 목표로 합니다.

  • DISTINCT 필요성: 일반적으로 RIGHT JOIN을 사용한 쿼리에서 고객이 중복될 가능성은 낮습니다, 기본적으로 각 고객(user_id)이 orders 테이블과의 연결에서 고유하기 때문입니다. 따라서 쿼리 결과에서 중복된 행이 나타날 가능성은 적습니다.

하지만 만약 여러 테이블에서 동일한 사용자가 여러 번 나타날 수 있는 복잡한 조인 쿼리를 수행한다면, DISTINCT를 사용하여 중복된 결과를 제거하는 것이 필요한 경우도 있습니다. 이번 케이스에서는 RIGHT JOINWHERE o.order_id IS NULL 조건이 고객별로 한 번만 해당되지 않으므로 DISTINCT의 필요성은 상대적으로 낮습니다.

최종적으로 DISTINCT를 추가하는 것은

쿼리 문법상 문제는 없지만, 지금의 쿼리 구조에서는 큰 차이를 만들지 않을 가능성이 높습니다.

참고 자료😄

  • SQL RIGHT JOIN : RIGHT JOIN의 동작 원리 및 예제를 참고하시면 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

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

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기