개인 사담
SQL 공부 1탄
락_빠
2024. 8. 12. 14:32
- 개념 1: SQL의 의미
- Structured Query Language: 데이터에 구조화된(=사전에 지정된) 질문을 하는 언어
- 개념 2: 데이터 탐색 (Select)
- 모든 컬럼 추출하기
- SELECT * (Ctrl + Enter =결과보기)
-
- → 모든 컬럼
-
- FROM gmv_trend
- SELECT * (Ctrl + Enter =결과보기)
- 특정 컬럼 추출하기
- SELECT category (Ctrl + Enter =결과보기)
- FROM gmv_trend
- 중복값 없이 특정 컬럼 추출하기
- SELECT DISTINCT category (Ctrl + Enter =결과보기)
- DISTINCT → 중복값 없이 확인하겠다는 의미
- FROM (gmv_trend
- SELECT DISTINCT category (Ctrl + Enter =결과보기)
- 모든 컬럼 추출하기
- 개념 3: 특정 연도의 매출 탐색 (Where)
- 조건이 하나일 때 (숫자열: between, 대소비교)
- SELECT *
- FROM gmv_trend
- WHERE yyyy = 2021
- yyyy=2021 → 2021년 데이터만 추출
- WHERE yyyy BETWEEN 2018 AND 2021
- BETWEEN → yyyy 사이의 데이터만 추출
- WHERE yyyy >= 2019
- yyyy >= 2019 → 2019년 이후의 데이터만 추출
- = → 같거나 크다
- yyyy >= 2019 → 2019년 이후의 데이터만 추출
- 조건이 하나일 때 (문자열: =, !=, like, in, not in)
- SELECT *
- FROM gmv_trend
- WHERE category = ‘(원하는 값)’
- ‘(원하는 값)’ 의 데이터만 추출
- ‘ ‘ ← 작은 따옴표 입력 필수
- ‘(원하는 값)’ 의 데이터만 추출
- SELECT *
- FROM gmv_trend
- WHERE category != ‘(원하는 값)’
- ‘(원하는 값)’ 이 아닌 데이터만 추출
- != → NOT EQUAL
- ‘(원하는 값)’ 이 아닌 데이터만 추출
- WHERE category <> ‘(원하는 값)’
- ‘(원하는 값)’ 이 아닌 데이터만 추출
- <> → NOT EQUAL
- ‘(원하는 값)’ 이 아닌 데이터만 추출
- SELECT *
- FROM gmv_trend
- WHERE category like ‘%(원하는 값의 일부 단어)%’
- like ‘%(원하는 값의 일부 단어)%’ → 정확한 값을 알지 못해도 컬럼에서 데이터를 찾을 때 사용
- %(단어% → % 앞에 어떤 말이 있을 수도 있고 없을 수도 있음, % 뒤에 어떤 말이 있을 수도 있고 없을 수도 있음
- 실무에서는 앞뒤 전부 붙여서 사용
- SELECT *
- FROM gmv_trend
- WHERE category IN (‘값 1’, ‘값 2’)
- IN ( ) → 여러 개의 값 데이터를 추출할 때 사용
- SELECT *
- FROM gmv_trend
- WHERE category NOT IN (‘값 1’, ‘값 2’)
- NOT IN ( ) → 여러 개의 값이 포함되지 않은 데이터를 추출할 때 사용
- 조건이 하나일 때 (숫자열: between, 대소비교)
- 개념 4: 조건이 두개일 때 주의사항 (and, or)
- 조건이 여러개일 때 (and, or)
- SELECT *
- FROM gmv_trend
- WHERE category = ‘(원하는 값)’
WHERE yyyy = 2021→ and yyyy = 2021- WHERE은 SQL 문장에서 한번만 올 수 있음
- 원하는 값+년도에 해당하는 데이터 추출
- SELECT *
- FROM gmv_trend
- WHERE category = ‘(원하는 값)’
- or = ‘(원하는 값)’
- IN 쿼리문과 동일
- SELECT *
- FROM gmv_trend
- WHERE gmv >= 10000
- gmw → 거래액
- or unitsold > 100
- unitsold → 판매 수량
- SELECT *
- FROM gmv_trend
- WHERE gmv >= 10000
- gmw → 거래액
- or unitsold > 100
- unitsold → 판매 수량
- AND category = ‘(원하는 값)’
- 매출액이 100만원 이상이거나 판매수량이 50개 이상이면서, 식음료 카테고리여야 해.
- GOOD CASE
- (매출액>= 100만원 or 판매수량 >= 50) and 카테고리 = ‘식음료’
- BAD CASE
- 매출액> = 100만원 or (판매수량>= 50 and 카테고리 = ‘식음료’)
- GOOD CASE
- 외모가 준수하거나 성격이 좋으면서, 유머코드가 잘 통했으면 해
- (외모 준수 or 성격 좋음) and 유머코드 잘 맞음 </aside>
- 내가 생각하는 조건
- 조건이 여러개일 때 (and, or)
- 개념 5: 카테고리별 매출 분석 (group by, 집계함수)
- 카테고리별 매출 분석
- SELECT category, sum (gmv)
- FROM gmv_trend
- GROUP BY category
- 집계를 위해서는
- SELECT 절에서 sum과 같은 집계함수를 쓰고, 괄호 안에 컬럼명을 적기
- GROUP BY 에 집계해야 하는 컬럼명을 반드시 적어 주어야 한다
- sum 사용 시, 컬럼명이 sum으로 바뀌지 않기 위해서
- SELECT category, sum (gmv) AS gmv_sum
- AS 이후 입력하는 값으로 컬럼명을 변경할 수 있다.
- AS를 입력하지 않아도 컬럼명은 변경됨
- SELECT category, sum (gmv) AS gmv_sum = SELECT category, sum (gmv) gmv_sum
- FROM gmv_trend
- GROUP BY category
- = GROUP BY 1
- 컬럼명 대신 숫자로 표기 가능
- SELECT 절에 있는 (숫자) 번째 컬럼 이라는 의미
- = GROUP BY 1
- SELECT category, sum (gmv) AS gmv_sum
- 카테고리별 연도별 매출
- SELECT category, yyyy, sum (gmv) AS gmv
- SELECT 절에서 집계함수를 사용할 때에는 집계함수 외의 모든 컬럼을 GROUP BY에 한번 더 써준다
- FROM gmv_trend
- GROUP BY category, yyyy
- = GROUP BY 1, 2
- SELECT category, yyyy, sum (gmv) AS gmv
- 전체 총합
- SELECT sum (gmv) AS gmv
- 전체 총계를 위해 집계함수를 바로 사용하는 경우에는 GROUP BY 를 사용하지 않는다
- FROM gmv_trend
- SELECT sum (gmv) AS gmv
- 집계함수의 종류
- SELECT sum (gmv) AS gmv_sum,
- min(gmv) AS gmv_min,
- max(gmv) AS gmv_max,
- avg(gmv) AS gmv_avg
- FROM gmv_trend
- 카테고리별 매출 분석