본문 바로가기

혼공학습단/혼자 공부하는 SQL

[혼공학습단 7기] 3주차 미션 : Chapter 04

벌써 혼공학습단 7기의 절반이 지났고, SQL 학습 내용은 점점 어려워진다...ㅠㅠ

그래도 한빛미디어 유튜브 강의 진심으로 감사합니다! 강의 덕분에 처음 접해본 SQL을 포기하지 않고 계속 공부할 수 있어요!! [^_^]

이번 주도 열심히 혼공!!

그럼 3주차 미션은 무엇일까요>?

[기본 미션]
p. 195 - 확인문제 4번 풀고 인증샷
[선택 미션]
p. 183 - [좀 더 알아보기] 손코딩 실행하고 결과화면 인증샷

[기본 미션]과 [선택 미션]을 풀기 위해서는 Chapter 04-2 두 테이블을 묶는 조인에 대한 내용을 잘 이해해야 되기 때문에 Chapter 04-2를 간단하게 정리해보겠습니다!!

Chapter 04-2 두 테이블을 묶는 조인


용어 설명
일대다 관계
(PK-FK 관계)
일대다 관계: 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계
(예) 회원 테이블(member)의 아이디와 구매 테이블(buy)의 아이디: 기본 키-외래 키 관계

✓ 기본 키(PK): 데이터를 구분할 수 있는 식별자(중복 X, NULL 값 X)
(예) 회원 테이블(member)의 아이디

✓ 외래 키(FK): 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할
(예) 구매 테이블(buy)의 아이디
내부 조인
(INNER JOIN)
두 테이블을 조인할 때, 테이블에 모두 지정한 열의 데이터가 있어야 함
✓ INNER JOIN 문
외부 조인
(OUTER JOIN)
두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옴
✓ LEFT OUTER JOIN 문: 왼쪽 테이블의 모든 값이 출력되는 조인
✓ RIGHT OUTER JOIN 문: 오른쪽 테이블의 모든 값이 출력되는 조인
✓ FULL OUTER JOIN 문: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인
상호 조인
(CROSS JOIN)
한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능
✓ CROSS JOIN 문
자체 조인 자신이 자신과 조인된다는 의미로, 1개의 테이블을 사용함

✓ 내부 조인(INNER JOIN)의 형식

SELECT <열 목록>
    FROM <첫 번째 테이블>
        INNER JOIN <두 번째 테이블>
        ON <조인될 조건>
    [WHERE 검색 조건];

✓ 외부 조인(OUTER JOIN)의 형식

SELECT <열 목록>
    FROM <첫 번째 테이블(LEFT 테이블)>
        <LEFT|RIGHT|FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
        ON <조인될 조건>
    [WHERE 검색 조건];

3주차 미션 어려웠지만 열심히 설명해보겠습니다!!

☆아래의 미션은 인터넷 마켓 데이터베이스(market_db)의 회원 테이블(member)과 구매 테이블(buy)로 진행됩니다!☆

market_db

[기본 미션]


아래의 이미지는 [기본 미션]에 대한 인증샷이다~!

[기본 미션] 인증샷

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;

 

위에 코드를 작성하고 결과화면을 출력해보면...?

[기본 미션] 결과화면


'회원 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록 출력'에 대한 기본 미션은 외부 조인(OUTER JOIN)에 대한 코드입니다!

  • 아이디(M.mem_id)/ 구매 물품명(B.prod_name)/ 이름(M.mem_name)/ 주소(M.addr) 열만 추출한다.
  • DISTINCT 문은 조회된 회원 아이디(M.mem_id)에서 중복된 것을 1개만 남긴다.
  • LEFT OUTER JOIN 문으로 왼쪽에 있는 회원 테이블(member)을 기준으로 외부 조인을 하므로 '왼쪽 테이블(member)의 내용이 모두 출력'되어야 한다.
  • ON 조인될 조건으로 회원 테이블의 회원 아이디(M.mem_id)와 구매 테이블의 회원 아이디(B.mem_id)가 동일한 행
  • WHERE 검색 조건으로 한 번도 구매하지 않았으므로 구매 물품명(B.prod_name)이 빈 값(NULL)인 조건이 추가되야 한다.
    정답: WHERE B.prod_name IS NULL
  • ORDER BY 문은 회원 아이디(M.mem_id)로 오름차순(A-Z순서) 정렬을 하게 된다.

[선택 미션]


아래의 이미지는 [선택 미션]에 대한 결과화면 인증샷이다~!

[선택 미션] 결과화면 인증샷

위에 결과화면을 출력하려면 아래의 코드를 복붙 해보세요~!

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;

'한 번이라도 구매한 기록이 있는 회원의 목록 출력'에 대한 선택 미션은 내부 조인(INNER JOIN)에 대한 코드입니다!

  • 아이디(M.mem_id)/ 이름(M.mem_name)/ 주소(M.addr) 열만 추출한다.
  • DISTINCT 문은 조회된 회원 아이디(M.mem_id)에서 중복된 것을 1개만 남긴다.
  • INNER JOIN 문으로 내부 조인을 하므로 '두 테이블에 모두 있는 내용만 조인되는 방식'이다.
  • ON 조인될 조건으로 구매 테이블의 회원 아이디(B.mem_id)와 회원 테이블의 회원 아이디(M.mem_id)가 동일한 행
  • ORDER BY 문은 회원 아이디(M.mem_id)로 오름차순(A-Z순서) 정렬을 하게 된다.

3주차 미션을 마무리하면서... 다음 주는 Chapter 01에서 Chapter 04까지 복습하는 시간을 가져야겠다고 다짐했다!

다음 주는 설 연휴로 인해서 다다음주에 여기 블로그에서 또 만나요.

 

'혼공학습단/혼자 공부하는 SQL' 카테고리의 글 목록

노력하는 데이터분석 전문가

so-kr.tistory.com

☆혼공족장님 그리고 혼공학습단 7기 여러분들 행복한 설 연휴 보내세요.☆


출처: 한빛미디어, 혼자 공부하는 SQL