1. 서브쿼리(SQL의 꽃)
select [컬럼명], ...
from [테이블명] ☜ ★★ 서브쿼리 위치
join ☜ ★ 서브쿼리 위치
where [조건절]
group by [컬럼명 or 컬럼순서]
having [집계함수 조건절]
order by [컬럼명 or 컬럼순서]
limit [N]
cf) 서브쿼리 위치는 특정지어져있지는 않은데, 실무에서는 거의 from절에 온다!(99.5%)
※ 서브쿼리를 언제 사용할까?
: 하나의 SQL문으로 풀 수 없는, 조금 더 복잡한 데이터를 추출할 때
ex)
- 하루동안 2개 이상의 상품을 구매한 고객은 주로 어떤 상품을 구매했을까?
ex)
- A상품을 구매한 고객은 A상품 외에 추가로 어떤 상품을 구매했을까?
ex)
- 하룻동안 2개 이상의 상품을 구매한 고객의 성연령 분포는 어떠할까?
→ 2depth로 들어가는 문제를 해결.. 서브쿼리는 SQL의 꽃 (이런 문제로 엑셀보다 SQL을 사용한다)
2. 서브쿼리 예시
ex) join구문에도 올 수 있다. 1 depth 결과를 하나의 테이블로 볼 수 있음

ex)

ex)

# 서브쿼리 활용 예시
- 지난달 첫구매 고객의 월별 주문빈도는?
- 지난달 첫구매 고객 중 이번달에도 구매를 (진행한 고객/이탈한 고객)은?
- 지난달 구매한 상품을 이번달 재주문한 상품은?
- 이번달 매출액이 높은 카테고리의 월별 성장률은?
# 서브쿼리 불필요 예시
- 여성 고객이 구매한 주요 상품은?
- A상품을 구매한 고객 수는?
- 한달동안 2회 이상 주문한 고객 수는?
3. 윈도우 함수(심화)
- SQL에서는 이렇게까지 분석을 하지 않기 때문에 굳이 윈도우 함수를 사용하지는 않는다.
# 윈도우 함수를 언제 사용할까?
- Group By만으로는 원하는 계산이 안될때 or (구매비중 / 성장률 / 랭킹)
ex) 카테고리별 매출액 비중은?
ex) 월별 성장률은?
ex) 매출액이 높은 카테고리를 Ranking을 매긴다면?
# 윈도우 함수 사용 사례
1) 구매비중
- 내가 원하는 차원으로 집계를 하기

2) 성장률
- 내가 원하는 값을 이전 행에서 가져오기

3) 랭킹
- 내가 원하는 차원으로 랭킹을 매겨보기

4. DDL의 정의 및 사용예시
Data Definition Language (데이터 정의 언어)
create | 테이블 생성 | 데이블 '조회'를 넘어서 테이블을 만지는 작업 |
drop | 테이블 삭제 | |
alter | 테이블 변경 ( 테이블명 변경, 컬럼명 변경, 컬럼 추가, 컬럼 삭제, 컬럼 데이터 유형 변경 ) |
|
truncate | 모든 행 삭제 |
※ DDL을 마지막에 배우는 이유 (실무)
- DDL을 일반 유저에게는 못하도록 권한을 막아놓은 회사들이 많다
- 데이터화가 잘되어있는 회사일수록 DDL을 사용할 일이 거의 없긴하다
※ DDL 활용 예시
1) 원하는 데이터가 DB화가 안되어 있을 때, 테이블생성을 해서 조인에 사용함
ex) "카테고리별 담당자"가 DB화가 안되어 있고, 엑셀파일로 관리 중임
→ create 구문을 통해 테이블화
→ 매출 테이블에 join해서 담당자별 매출액 확인
2) DB로부터 자주 쓰는 데이터가 있을 때, 아예 테이블로 생성해서 빠르게 조회/공유하고자 사용함**
ex) 주별, 상품별 매출액 데이터가 자주 필요함. 하지만 주문 테이블로부터 매번 주별, 상품별 데이터를 sum + group by하기 번거롭고, 신행하는 데도 시간이 오래걸림
→ 지난주까지의 주별, 상품별 데이터를 sum + group by하여 테이블로 생성
→ 해당 테이블로 자유롭게 분석 진행 및 유관 팀에 공유하여 좀더 쉽게 커뮤니케이션
(추가개념)
DML ( Data Manipulation Language : 데이터 조작 언어 )
select | 테이블 조회 | 테이블 형태를 만지지 않고, 데이터를 조회 및 수정하는 작업 |
insert | 테이블에 행 추가 | |
delete | 테이블에 행 삭제 | |
update | 테이블에 값 변경 |
→ DDL, DML, DCL 등 자격증을 준비할 때는 확실히 숙지하여야 한다.
'SQL' 카테고리의 다른 글
SQL 앞으로의 학습방법 (0) | 2023.03.07 |
---|---|
SQL 응용 문법 (0) | 2023.03.07 |
SQL 실습 ③ 데이터 가공하기 (0) | 2023.03.07 |
SQL Join의 유형 / 주의사항 (0) | 2023.03.02 |
SQL 실습 ② 주문 데이터 분석 (join 이용) (0) | 2023.03.02 |