기본 미션 : p. 195의 확인 문제 4번 풀고 인증하기
선택 미션 : p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기
현재 마무리된 글을 제목을 안 썼다는 이유로 시원하게 날려먹어서 멘붕이 왔습니다. 그래도 혼공단 완주를 위해서는 다시 또 또 써야겠죠. 나름 자세히 잘 썼다고 만족하고 제목을 입력하고 있었을 뿐인데, 세상이 절 억까하는 중입니다. 하지만 해야겠죠.. 아득바득
분명 몇 시간 전만 해도 여기에는 시간이 참 빠르네요 이런 말들이 가득이었는데 말입니다. 어쩌겠습니까, 제목 작성을 먼저 하지 않은 제 잘못인걸요.
이번을 계기로 벨로그는 제목 작성을 하지 않으면 자동저장이 안 된다는 사실을 알게되었네요. 긍정적으로 복습을 해서 외부조인과 내부조인을 완벽하게 알 수 있게 됐다고 생각하는 것이 좋겠습니다. 하하 참 유익한 3주차네요.
이 문제는 회원가입은 하였지만 구매를 한 번도 한 적이 없는 회원의 목록을 조회하는 문제입니다.
저는 정답을 4번, WHERE B.prod_name IS NULL
로 했는데요, 그 이유가 무엇인지 코드와 함께 천천히 자세히 알아가봅시다.
SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
SELECT
: 조회한다.DISTINCT M.mem_id,
: member
테이블의 중복되지 않은 회원 아이디와B.prod_name,
: buy
테이블의 구매하는 품목의 이름과M.mem_name,
: member
테이블의 회원의 이름과M.addr
: member
테이블의 회원의 집주소를 FROM member M
LEFT OUTER JOIN buy B
ON B.mem_id = M.mem_id
FROM member M
: M
이라는 별칭을 가지고 있는 member
테이블을 기준으로LEFT OUTER JOIN buy B
: B
라는 별칭을 가지고 있는 buy
테이블을 외부조인한다.LEFT
: buy
테이블의 왼쪽에 있는 member
테이블을 기준으로OUTER JOIN buy B
: buy
테이블을 외부 조인한다.ON B.mem_id = M.mem_id
: buy
테이블의 mem_id
와 member
테이블의 mem_id
가 같다면내부조인 - 두 테이블에 모두 데이터가 있어야만 결과가 나옴
외부조인 - 한 테이블에만 필요한 데이터가 있어도 결과가 나옴
이 문제는 회원가입은 하였지만 구매는 하지않은 회원을 조회하는 것입니다.
다시 말해, member 테이블에는 데이터가 존재하지만, buy 테이블에는 없는 데이터가 있다는 뜻입니다.
내부조인은 두 테이블에 모두 데이터가 있어야 한다면 외부조인은 member
테이블에만 데이터가 존재해도 조인이 가능하기 때문에 외부조인을 사용한 것이죠.
WHERE B.prod_name IS NULL
buy
테이블의 품목이름이 null
이라면 (외부조인을 한다.)앞서 말했듯, 외부조인을 할 때는 한 테이블에만 데이터가 있어도 됩니다.
그말인즉슨 member
테이블과 buy
테이블을 외부조인했을 때, member
테이블에는 있지만 buy
테이블에는 없는 데이터는 NULL
값으로 조인이 될 것입니다.
따라서 회원가입은 했지만 결제를 하지 않은 회원을 찾기 위한 조건식으로 WHERE B.prod_name IS NULL
를 선택한 것이죠.
ORDER BY M.mem_id;
member
테이블의 mem_id
를 기준으로 오름차순 정렬합니다.SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON B.mem_id = M.mem_id
WHERE B.prod_name IS NULL
ORDER BY M.mem_id;
SELECT DISTINCT M.mem_id, M.mem_name, M.addr
SELECT
: 조회한다.DISTINCT M.mem_id,
: member
테이블의 중복되지 않은 회원 아이디와M.mem_name,
: member
테이블의 회원의 이름과M.addr
: member
테이블의 회원의 집주소를 FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id
FROM member M
: B
이라는 별칭을 가지고 있는 buy
테이블을 기준으로INNER JOIN member M
: M
라는 별칭을 가지고 있는 member
테이블을 내부조인한다.ON B.mem_id = M.mem_id
: buy
테이블의 mem_id
와 member
테이블의 mem_id
가 같다면이 문제는 회원가입이 되어 있으면서 구매를 한 회원을 조회하는 것입니다.
다시 말해, 이것은 member
테이블과 buy
테이블에 동일하게 데이터가 있다는 것을 의미합니다.
때문에 두 테이블 중 한 테이블에만 데이터가 있어도 괜찮은 외부조인 대신,
두 테이블에 모두 데이터가 있어야 하는 내부조인을 사용한 것입니다.
ORDER BY M.mem_id;
member
테이블의 mem_id
를 기준으로 오름차순 정렬합니다.SELECT DISTINCT M.mem_id, M.mem_name, M.addr
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id
ORDER BY M.mem_id;
잘 읽었습니다. 좋은 정보 감사드립니다.