Inflearn brand logo image

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

Jason님의 프로필 이미지
Jason

작성한 질문수

[백문이불여일타] 데이터 분석을 위한 중급 SQL

LEFT JOIN 리트코드 문제풀이

16강 LEFT JOIN 리트코드 (183. Customers Who Never Order) 관련 질문

작성

·

16

0

SELECT c.name as Customers
FROM customers as c
LEFT JOIN orders o ON c.id = o.customerid
where o.id is null

안녕하세요. 리트코드 Average Population of Each Continent 문제 풀다가 질문 생겨서 남깁니다.

 

제가 생각했을때, 아래 코드 (where o.customerid is null) 만 정답이 되어야한다고 생각하는데.

SELECT c.name as Customers
FROM customers as c
LEFT JOIN orders o ON c.id = o.customerid
where o.customerid is null

선미님도 위에 코드와 똑같이 하셨더라구요 ?

왜 위에도 정답이 되는지 잘 모르겠어요.

orders 테이블의 customerid 칼럼이 NULL 값인 것을 찾는 것과

orders 테이블의 id 칼럼이 NULL 인것을 찾는 것. 조금 다르지 않나요??

 

아... 질문 작성하면서 좀 이해한 거 같은데. ㅋㅋ

orders 테이블의 id 칼럼이 NULL 인 것 (즉, id칼럼이 3, 4) 과

orders 테이블의 customerid 칼럼이 NULL인 것 (즉, customerid 칼럼이 2,4)

같나요???

.

.

.

아... 헷갈리네요 ㅠㅠ 질문입니다.

답변 2

0

Jason님의 프로필 이미지
Jason
질문자

아 90% 이해했습니다! 감사합니다!

추가 질문 드려도 될까요?

SELECT *
FROM customers AS c
LEFT JOIN orders as o on c.id = o.customerid 
| id | name  | id   | customerId |
| -- | ----- | ---- | ---------- |
| 1  | Joe   | 2    | 1          |
| 2  | Henry | null | null       |
| 3  | Sam   | 1    | 3          |
| 4  | Max   | null | null       |

위에 코드는 선미님께서 강의에서 실행하신 코드 입니다.

그런데, 동일한 코드를 제가 Leetcode에서 실행하면,

맨처음 칼럼 A열에서,

id 가 1,2,3,4 순서인 것을 확인하실 수 있습니다.

 

강의에서 3,1,2,4 로 보이는 것과는 다른 상황입니다.

솔직히 대단히 중요한 건 아닌거같은데.

그냥 여기 꽃혀서 좀 이해가 안되는 것 같습니다.

왜 다른건가요??

0

지식공유자 J님의 프로필 이미지
지식공유자 J
지식공유자

FROM customers as c 
  LEFT JOIN orders o ON c.id = o.customerid

위 LEFT JOIN 조건에 따르면 c.id와 일치하는 값이 o.customerid에 없을 경우 orders의 어떤 행도 조인될 수 없기 때문에, 조인 후 테이블 형태에서 orders의 모든 컬럼이 null이 됩니다.

그러므로 o.id IS NULL로 필터링하는 것과 o.customerid IS NULL로 필터링하는 것은 같은 결과를 반환합니다. 둘 중 어떤 조건으로 작성해도 상관 없습니다.

Jason님의 프로필 이미지
Jason

작성한 질문수

질문하기