작성
·
43
0
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
users 말고, orders 기준으로 쿼리를 작성 중인데요 여기서 봉착한 난관이... 주문 기록이 없다면, null로 표현되는 부분을 어떻게 풀어나가야 할지 모르겠어서 문의드립니다ㅠㅠ
SELECT u.name as user_name, p.name as product_name
FROM orders AS o
LEFT JOIN users AS u ON o.user_id=u.user_id
LEFT JOIN products AS p ON o.product_id=p.product_id
답변 4
1
안녕하세요, 정유진님.
먼저 말씀하신 문제를 해결할 수 있는 코드를 먼저 제시해드린 뒤에 설명 이어가겠습니다. 올려주신 코드에서 LEFT JOIN users ...
부분을 RIGHT JOIN users ...
로만 변경해주시면 됩니다.
SELECT
u.name AS user_name,
p.name AS product_name
FROM
orders o
RIGHT JOIN
users u ON o.user_id = u.user_id
LEFT JOIN
products p ON o.product_id = p.product_id
ORDER BY
u.name, p.name
;
실행 결과
어려움을 겪으신 부분이 orders 테이블 기준으로 쿼리를 작성할 때 주문 기록이 없다면, null로 표현되는 부분이라고 하셨는데요.
저도 실력이 좋지는 않지만 조언을 드리자면 '무엇을 무조건 남겨야 하는가' 에 대해 집중하시면 말씀하신 문제를 풀어나가는 데에 도움이 될 거예요.
예를 들어 이 문제에서는 (주문 내역이 없더라도) 고객 이름을 무조건 남겨야 합니다.
따라서 고객 이름 컬럼이 존재하는 users
테이블 쪽으로 OUTER JOIN을 수행하시면 됩니다. orders
를 기준 테이블로 쿼리를 작성하셨으니 users
테이블 쪽은 RIGHT가 되겠네요.
추가로 이런 경우에는 애초에 기준 테이블을 '무조건 남겨야 되는 컬럼이 있는 테이블(users
)'로 설정하고 LEFT JOIN orders
로 해결하는 방식이 더 적절하다고 여겨집니다.
1
안녕하세요. 정유진님
orders에서 쿼리를 시작하게 되면 주문 내역이 없는 orders 행은 존재할 수 없습니다.
만약 주문은 있지만 회원은 없는 경우를 찾고 싶다면 이 경우 RIGHT JOIN을 사용해야 합니다.
감사합니다.
0
0
안녕하세요, 인프런 AI 인턴입니다. 정유진님.
주문 기록이 없을 경우, LEFT JOIN
을 사용해 조회할 때 null
로 표현되는 부분에 대한 해결책을 찾고 계시는군요. LEFT JOIN
은 데이터베이스 테이블을 조인할 때, 왼쪽 테이블(여기서는 orders
)의 모든 레코드를 반환하고, 오른쪽 테이블(users
나 products
)에서 일치하는 레코드가 없는 경우는 null
로 반환하는 방식입니다.
클라이언트 애플리케이션에서 null 값을 처리할 수 있는 방법을 고려해보세요. 예를 들어, 쿼리 결과를 받아오는 애플리케이션 코드 내부에서 null
값을 특정 문자열이나 값으로 대체할 수 있습니다.
만약 SQL 쿼리 내에서 null 값을 바로 처리하고 싶다면, COALESCE
함수를 사용하여 null
을 다른 값으로 대체할 수 있습니다. 아래와 같이 사용할 수 있습니다:
SELECT
COALESCE(u.name, 'Unknown User') AS user_name,
COALESCE(p.name, 'Unknown Product') AS product_name
FROM
orders AS o
LEFT JOIN
users AS u ON o.user_id = u.user_id
LEFT JOIN
products AS p ON o.product_id = p.product_id
ORDER BY
u.name, p.name;
이 쿼리는 users
또는 products
에 해당하는 레코드가 없을 경우, user_name
과 product_name
을 각각 ‘Unknown User’와 ‘Unknown Product’로 대체하여 반환하게 됩니다.
또한, 추가적인 예제나 설명이 필요한 경우라면 아래의 참고 링크를 확인하시면 도움이 될 것입니다:
- 질문 877966: 외래키가 없는 경우 조회
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
영한님이 해주신 답변에서는
'만약 주문은
있지만
회원은없는
경우를 찾고 싶다면 이 경우 RIGHT JOIN을 사용해야 합니다.'부분을
'만약 주문은
없지만
회원은있는
경우를 찾고 싶다면 이 경우 RIGHT JOIN을 사용해야 합니다.'으로만 바꾸면 원하시는 답이 되겠네요.