테이블이 하나라면?
- 값 수정 시 모든 데이터를 수정해야 하는 번거로움.
- 관리 목적에 따라서 테이블을 구분해주는 것이 잘 설계된 DB!
INNER JOIN
(내부조인)USING
사용 가능!2개 테이블 JOIN
SELECT 컬럼명
FROM 테이블명 AS A
JOIN 테이블명 AS B
ON A.id = B.id
[작성 조건]
- SELECT절 : 출력할 컬럼명
- FROM절 : 출력할 테이블명
- 주로 관용적으로 테이블에 별칭을 주어 사용함!
- ON : 테이블 합치는 기준 작성
3개 테이블 JOIN
SELECT 컬럼명
FROM 테이블명 AS A
JOIN 테이블명 AS B
ON A.id = B.id
JOIN 테이블명 AS C
ON A.id = C.id
[작성 조건]
- 2개 테이블과 동일
- 단, 먼저 2개의 테이블 선 JOIN 후
-> 결과 확인
-> 그 후에 나머지 1개 테이블을 JOIN하는 것이 좋음!
INNER JOIN
: 공통 부분(내부 조인)OUTER JOIN
: 외부 조인LEFT JOIN
: 왼쪽 테이블이 기준!RIGHT JOIN
: 오른쪽 테이블이 기준!기준을 삼는 테이블에 따른 결과가 나오는 것
INNER JOIN
JOIN
키워드로 동작ON
뒤에 공통 KEY 기준 JOIN
LEFT (OUTER) JOIN
RIGHT (OUTER) JOIN
테이블을 아래로(세로로) 이어붙이기!
데이터를 합쳐 새로운 행 생성
데이터가 너무 많다면 -> 쪼갠 뒤 관리 가능
사용 시 유의점
SELECT *
FROM 테이블1
UNION ALL
SELECT *
FROM 테이블2
2020년, 2021년 테이블 합치기
2020년 및 2021년 테이블 합치기 + 특정 컬럼만 추출하기
중복 제거
pandasql의 경우 타 DBMS와는 달리 UNION DISTINICT 사용 불가(에러 발생)
SELECT *
FROM 테이블1
UNION
SELECT *
FROM 테이블2
2020년 테이블 및 2021년 테이블 중복 제거 후 합치기
즉, 메인 쿼리 > 서브 쿼리 포함하는 종속적 관계
SELECT *
FROM 테이블명
WHERE 컬럼명 IN (SELECT 컬럼명
FROM 테이블명)
( )
로 묶어 사용ORDER BY
사용 ❌;
사용 ❌단일행 서브쿼리와 다중행 서브쿼리가 있음!
서브 쿼리 결과 == 메인쿼리 조건
가장 작은 주문 금액 보기
이 결과를 이용해 가장 작은 주문금액보다 작은 한도를 가진 고객 정보 보기
단일행 서브쿼리
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = (SELECT 컬럼명
FROM 테이블명
WHERE 조건절)
다중행 서브쿼리
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 IN (SELECT 컬럼명
FROM 테이블명
WHERE 조건절)
인라인뷰(inline view)
💬 View(뷰)? : 가상 테이블(논리적 테이블, 물리적 테이블이 아님)
고객별 마지막 제품 구매일자 확인
인라인 뷰 + julianday 사용
MySQL : DATEDIFF 함수 등을 사용
pandasql, SQLite : julianday 함수 등을 사용