
이전 강의를 듣다가 이 강의가 좀 더 설명이 잘 되어 있어서 이 강의로 잠깐 넘어왔다!
여기서 이해를 좀 더 한 다음에 문제를 풀어보는게 좋을 것 같다~
김영한의 실전 데이터베이스 - 기본편| 김영한 - 인프런 강의
현재 평점 5.0점 수강생 2,589명인 강의를 만나보세요. 실무에 꼭 필요한 SQL과 데이터베이스의 기본기를 학습합니다. 개발자뿐만 아니라 기획자나 데이터 분석가분들도 SQL을 깊이있게 학습합니다
www.inflearn.com
INNER JOIN
- 교집합.
조인을 사용하는 이유?
- 데이터 정규화
- 데이터 중복을 피하기 위해; 데이터 갱신, 삽입, 삭제 시 발생할 수 있는 이상 현상 방지
데이터 정규화란? - 테이블을 나누는 방법, 과정
- 데이터 중복을 최소화하고, 데이터 삽입, 갱신, 삭제 시 발생할 수 있는 이상 (anmaly)을 방지하기 위한 스키마 설계 원칙
- 데이터의 일관성의 무결성을 확보, DB의 저장 용량을 줄일 수 있음.
정규화의 종류
- 제 1정규형 (1NF): 모든 속성의 값은 원자값 (하나의 값)
- 하나의 컬럼에 배열이나 쉼표로 구분된 값(CSV)와 같은 복합적인 값을 넣지 말아야 함.
- 제 2정규형 (2NF): 제 1정규형을 만족 + 부분 함수 종속성 제거 (완전 함수 종속)
- 기본키의 부분집합이 결정자가 되어서는 안됨.
- 복합 기본키의 일부에만 종속된 속성을 별도의 테이블로 분리
- → 종류가 다르면 다른 테이블이다 (복합키)
- 제 3정규형 (3NF): 제 2정규형을 만족 + 이행적 함수 종속성 제거
- 이행적 종속: A→B, B→C가 성립할 때 A→C가 성립하는 것
- 기본키가 아닌 속성이 다른 비-키 속성에 종속되는 경우, 이를 분리
- → 회원, 주소, 우편번호로 생각해보자
- 보이스-코드 정규형 (BCNF): 제 3정규형보다 엄격한 형태. 모든 결정자가 후보키
- 이는 키가 아닌 속성이 다른 키가 아닌 속성을 결정하는 경우를 제거
- 교수가 특강이름을 결정하는 결정자이지만, 후보키가 아니다.
- BCNF 정규화를 만족하기 위해서는 위의 테이블을 분리해야 함.
- 이는 키가 아닌 속성이 다른 키가 아닌 속성을 결정하는 경우를 제거
- 제 4정규형 (4NF): 다치 종속성 제거
- 하나의 속성이 여러 값을 가질 수 있는 경우를 분리
- 복합 키본키?
- 데이터베이스 테이블에서 두 개 이상의 컬럼을 조합하여 하나의 기본 키로 사용하는 것
- 여러 개의 컬럼을 묶어서 각 행을 고유하게 식별하는 역할.
https://mangkyu.tistory.com/110
[Database] 정규화(Normalization) 쉽게 이해하기
지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz
mangkyu.tistory.com
여기 이미지를 참고하면 좀 더 쉽게 이해가 간다 !
실무 팁
김영한 선생님이 가르쳐주신 실무 팁~!
- 테이블 별칭: AS 생략
- 컬럼 별칭: AS 사용
SELECT salary * 12 annual_salary
SELECT salary * 12 AS annual_salary
문제
특정 기간 동안의 고객별 구매 내역
[문제]
INNER JOIN을 사용하여 orders, users, products 테이블을 연결하라.
2025년 6월 이후(2025-06-01 이후)에 주문한 고객들의 고객 이름, 상품명, 주문일자, 총 금액(=수량 * 가격)을 조회하라.
총 금액이 큰 순서대로 정렬하라.
[실행 결과] (중간 이후 생략)
| user_name | product_name | order_date | total_price |
| 이순신 | 4K UHD 모니터 | 2025-06-15 11:30:00 | 350000 |
| 네이트 | 프리미엄 게이밍 마우스 | 2025-06-17 12:00:00 | 150000 |
| 네이트 | 기계식 키보드 | 2025-06-11 14:20:00 | 120000 |
| 션 | 프리미엄 게이밍 마우스 | 2025-06-10 10:00:00 | 75000 |
| … |
정답
SELECT
u.name AS user_name,
p.name AS product_name,
o.order_date,
(o.quantity * p.price) AS total_price
FROM
orders o
JOIN
users u ON o.user_id = u.user_id
JOIN
products p ON o.product_id = p.product_id
WHERE
o.order_date >= '2025-06-01'
ORDER BY
total_price DESC;
'Programming > SQL' 카테고리의 다른 글
| [CS Study] 서브쿼리란? 서브쿼리의 종류와 특징 (김영한의 실전 데이터베이스 기본편) (1) | 2025.12.09 |
|---|---|
| [CS Study] JOIN 2: 외부 조인과 기타 조인 (김영한의 실전 데이터베이스 기본편) (0) | 2025.11.21 |
| <인프런 강의 추천> 중고급 SQL과 실전 데이터 분석 101 문제 풀이 (0) | 2025.10.21 |