기본숙제
SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
____________________
ORDER BY M.mem_id;
B.prod_name IS NULL
해설: 'LEFT OUTER JOIN'은 'member' 테이블의 모든 행과 'buy' 테이블의 일치하는 행을 결합합니다. 일치하는 행이 없으면 'buy' 테이블의 열은 'NULL' 값을 가집니다. 4번 문제에서는 구매 기록이 없는 회원을 찾고자 합니다. 이는 'buy' 테이블의 'prod_name'이 'NULL'인 경우를 뜻합니다.
문제를 해결하기 위해서는 'LEFT OUTER JOIN' 결과에서 'prod_name'이 'NULL'인 행을 필터링해야 합니다. 따라서, 'WHERE'을 사용하여 필터링하는 것이 적합합니다. ('HAVING'은 'GROUP BY'와 함께 사용되어 그룹화된 결과를 필터링할 때 사용됩니다.)
정답: 4. WHERE B.prod_name IS NULL
최종 결과:
SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
WHERE B.prod_name IS NULL
ORDER BY M.mem_id;
해석: 이 쿼리는 'member' 테이블과 'buy' 테이블을 'LEFT OUTER JOIN'한 후, 'buy' 테이블의 'prod_name'이 'NULL'인 행을 선택합니다. 이는 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원을 의미합니다. 결과는 회원 ID(mem_id)를 기준으로 정렬됩니다.
추가숙제

'프로그래밍' 카테고리의 다른 글
| [혼자 공부하는 SQL] Ch3 (1) | 2024.07.14 |
|---|---|
| [혼자 공부하는 SQL] Ch1~2 (0) | 2024.07.07 |