SQL Server/연습문제
SQL Server JOIN 실습 - 구매회원, 구매기록 조회하기
코딩하는냥이
2025. 6. 11. 15:08
반응형
📖 문제 3
제품을 구매한 전체 회원을 조회하세요.
출력: 아이디(userid), 고객명(username)
📌 예제 정답
SELECT DISTINCT
b.userid AS N'아이디',
a.username AS N'고객명'
FROM userTBL AS a
INNER JOIN buyTBL AS b ON a.userid = b.userid;
💬 해설
- INNER JOIN을 통해 구매 기록이 있는 회원만 조회
- 중복 구매가 있을 수 있으므로 DISTINCT로 한 번만 출력
💡 학습 포인트
- INNER JOIN은 양쪽 테이블에 모두 존재하는 데이터만 추출
- DISTINCT는 중복 제거에 사용
📖 문제 4
userTBL의 아이디별로 총 구매 건수(행 수)를 구하세요.
구매 기록이 없어도 모든 회원이 포함되어야 합니다.
📌 예제 정답
SELECT
a.userid,
COUNT(b.userid) AS buy_count
FROM userTBL AS a
LEFT OUTER JOIN buyTBL AS b ON a.userid = b.userid
GROUP BY a.userid;
💬 해설
- LEFT OUTER JOIN을 사용하여 구매 기록이 없는 회원도 포함
- COUNT(b.userid)는 구매 건수를 계산하며, 없으면 0으로 처리됨
💡 학습 포인트
- LEFT JOIN은 **기준 테이블(userTBL)**은 모두 출력
- COUNT(컬럼)은 NULL은 제외하고 개수를 셈
📖 문제 8
아이디가 'JYP'인 사람의 구매 상세 정보를 출력하세요.
출력: 아이디, 이름, 품목, 주소, 연락처(mobile1 + mobile2)
📌 예제 정답
SELECT
a.userid AS N'아이디',
b.username AS N'이름',
a.prodname AS N'품목',
b.addr AS N'주소',
b.mobile1 + b.mobile2 AS N'연락처'
FROM buyTBL AS a
INNER JOIN userTBL AS b ON a.userid = b.userid
WHERE a.userid = 'JYP';
💬 해설
- INNER JOIN으로 회원 정보와 구매 정보를 연결
- 문자열 연결은 + 연산자 사용 (모바일 번호 합침)
💡 학습 포인트
- 특정 회원 조건을 걸 때는 WHERE userid = '...'
- 문자열 결합은 SQL Server에서는 + 사용
📖 문제 9
모든 회원의 구매 기록을 출력하되, 구매하지 않은 회원도 포함하세요.
📌 예제 정답
SELECT
a.userid,
a.username,
b.prodname,
b.price,
b.amount
FROM userTBL AS a
LEFT OUTER JOIN buyTBL AS b ON a.userid = b.userid;
💬 해설
- LEFT JOIN을 사용하여 구매 기록이 없는 사람도 표시
- 구매하지 않은 회원은 prodname, price, amount가 NULL
💡 학습 포인트
- LEFT JOIN = 기준 테이블(userTBL)은 무조건 출력됨
- 연결 테이블(buyTBL)은 조건 맞을 때만 붙음
📖 문제 10
구매한 기록이 전혀 없는 회원만 출력하세요.
📌 예제 정답
SELECT
a.userid,
a.username
FROM userTBL AS a
FULL OUTER JOIN buyTBL AS b ON a.userid = b.userid
WHERE prodname IS NULL;
💬 해설
- FULL OUTER JOIN을 사용하여 양쪽을 전부 포함한 뒤
- 구매 기록이 없는 행만 WHERE prodname IS NULL로 필터
💡 학습 포인트
- FULL OUTER JOIN + IS NULL은 한쪽에만 있는 데이터 탐색 시 사용
- prodname IS NULL이면 구매 내역이 없는 것
📖 문제 13
구매 기록이 있는 회원을 출력하되, 중복 없이 1회만 출력하세요.
📌 예제 정답
SELECT DISTINCT
a.userid AS N'아이디',
a.username AS N'이름',
a.addr AS N'주소'
FROM userTBL AS a
FULL OUTER JOIN buyTBL AS b ON a.userid = b.userid
WHERE NOT (prodname IS NULL);
💬 해설
- FULL JOIN 후 구매한 사람만 걸러냄
- DISTINCT로 중복 제거
💡 학습 포인트
- DISTINCT는 중복 제거
- NOT (prodname IS NULL)은 구매 기록 있는 사람만 필터링
📌 정리하자면, 이번 실습은 JOIN, LEFT JOIN, FULL OUTER JOIN을 통한
회원-구매 정보의 다양한 연결 방식과 조건 필터링을 다루었습니다.
구매 여부에 따라 데이터를 포함하거나 제외하는 실무형 쿼리 연습입니다.