벌써 혼공학습단 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)로 진행됩니다!☆
[기본 미션]
아래의 이미지는 [기본 미션]에 대한 인증샷이다~!
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까지 복습하는 시간을 가져야겠다고 다짐했다!
다음 주는 설 연휴로 인해서 다다음주에 여기 블로그에서 또 만나요.
☆혼공족장님 그리고 혼공학습단 7기 여러분들 행복한 설 연휴 보내세요.☆
출처: 한빛미디어, 혼자 공부하는 SQL
'혼공학습단 > 혼자 공부하는 SQL' 카테고리의 다른 글
[혼공학습단 7기] 5주차 미션 : Chapter 06 (0) | 2022.02.15 |
---|---|
[혼공학습단 7기] 4주차 미션 : Chapter 05 (0) | 2022.02.07 |
[혼공학습단 7기] 2주차 미션 : Chapter 03 (0) | 2022.01.21 |
[혼공학습단 7기] 1주차 미션 : Chapter 01~02 (0) | 2022.01.10 |
[혼공학습단 7기] 선정 (0) | 2022.01.06 |