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을 통한
회원-구매 정보의 다양한 연결 방식과 조건 필터링을 다루었습니다.
구매 여부에 따라 데이터를 포함하거나 제외하는 실무형 쿼리 연습입니다.