데이터 분석 - 한주 정리(SQL, python)

hyun-jin·2025년 2월 23일

데이터 분석

목록 보기
7/100
post-thumbnail

1주차 내용 정리 - SQL, python

1. SQL 기초

1) SQL 기본 구조

  • 작성 순서
    select -> from -> where -> group by -> having -> order by

  • 작동 순서
    from -> on -> join -> where -> group by -> having -> select -> distinct -> order by

SQL 1일차

2) 범위, 집합, 패턴 연산자

  • between A and B
  • in (A, B, C)
  • like '%A%'

3) 논리 연산자

  • A and B
  • A or B
  • not A = 'a'

4) 집계 함수

  • sum(컬럼)
  • avg(컬럼)
  • count(컬럼)
  • min(컬럼)
  • max(컬럼)

🎯 최종 정리

연산자 종류연산자SELECTWHEREHAVING
비교 연산자=, !=, >, <, >=, <=✅ 사용 가능✅ 사용 가능✅ 사용 가능
범위 연산자BETWEEN ... AND ...❌ 사용 불가✅ 사용 가능✅ 사용 가능
집합 연산자IN (...), NOT IN (...)❌ 사용 불가✅ 사용 가능✅ 사용 가능
패턴 매칭 연산자LIKE, ILIKE❌ 사용 불가✅ 사용 가능❌ 사용 불가
논리 연산자AND, OR, NOT✅ 사용 가능✅ 사용 가능✅ 사용 가능
산술 연산자+, -, *, /, %✅ 사용 가능✅ 사용 가능❌ 사용 불가
집계 함수SUM, AVG, COUNT, MIN, MAX✅ 사용 가능❌ 사용 불가✅ 사용 가능

5) 범주별 연산, 정렬

  • group by
  • order by
    • order by (컬럼): 오름차순 기본값
    • order by (컬럼) desc: 내림차순

6) Having 절

  • HAVING 절은 집계 함수를 포함한 조건을 필터링하는 역할

🚀 HAVING 절과 WHERE 절의 차이점

구분WHEREHAVING
사용 대상개별 행(row)그룹(group) 결과
집계 함수 사용❌ 불가능✅ 가능
조건 적용 시점데이터를 가져오기 전에 개별 행을 필터링GROUP BY로 그룹화한 후 필터링
사용 예시WHERE salary > 50000HAVING AVG(salary) > 50000

7) limit 절

  • SQL에서 결과 집합의 개수를 제한하는 역할을 하는 절

✔️ LIMIT은 기본적으로 맨 위에서부터 지정한 개수만큼 행을 가져옴.
✔️ 중간 데이터를 가져오려면 OFFSET과 조합해서 사용.
✔️ 보다 정교한 행 선택이 필요하면 ROW_NUMBER() 같은 함수 사용 가능!


SQL 2일차

8) 문자열 관련 함수

  • REPLACE() - 문자열 변경
  • SUBSTR() - 문자열 일부 추출
  • CONCAT() - 문자열 연결

🚀 REPLACE, SUBSTR, CONCAT 비교

함수설명주요 사용 사례
REPLACE(str, old, new)특정 문자열 변경날짜 포맷 변경, 특정 단어 수정
SUBSTR(str, start, length)문자열 일부 추출아이디 일부 가져오기, 특정 패턴 추출
CONCAT(str1, str2, ...)문자열 합치기이름 조합, 문장 생성

9) 조건문

  • if 문 - 특정 조건이 참인지 확인하여 값 반환
  • case 문 - 여러 조건을 평가하고 그에 따라 다른 값을 반환
구분IFCASE
사용 가능 위치SELECT, WHERE, HAVINGSELECT, WHERE, HAVING, ORDER BY
기본 문법IF(조건, 참일 때 값, 거짓일 때 값)CASE WHEN 조건 THEN 값 ELSE 값 END

10) 변환 함수

  • cast() - 데이터 타입을 변환


SQL 3일차

11) Subquery문

  • SQL에서 쿼리(Query) 안에 또 다른 쿼리가 포함된 형태
  • "하위 쿼리", "내부 쿼리"라고도 부름
  • 메인 쿼리의 일부 데이터를 구하기 위해 사용됨
SELECT 컬럼명 FROM 테이블명 
WHERE 컬럼명 = (서브쿼리);

💡 먼저 실행된 후, 메인 쿼리에 결과 전달

12) join - left join, inner join

  • 두 개 이상의 테이블을 연결하여 데이터를 조회
    ✔️ INNER JOIN → 교집합 (일치하는 데이터만 가져옴)
    ✔️ LEFT JOIN → 왼쪽 테이블의 모든 데이터 + 오른쪽 테이블의 일치하는 데이터
SELECT A.컬럼명, B.컬럼명
FROM 테이블A AS A INNER JOIN 테이블B AS B ON A.공통컬럼 = B.공통컬럼
구분INNER JOINLEFT JOIN
설명공통된 값이 있는 데이터만 가져옴 (교집합)왼쪽 테이블의 모든 행 + 오른쪽 테이블과 일치하는 데이터
일치하지 않는 데이터결과에서 제외됨NULL로 표시됨



SQL 4일차

13) pivot table(피벗 테이블)

  • 행 데이터를 그룹화하여 열로 변환

14) 윈도우 함수(Window Function)

  • Rank
    partition by와 함께 사용하면 그룹별 순위 계산 가능
SELECT 컬럼명, RANK() OVER (PARTITION BY 그룹컬럼 ORDER BY 정렬컬럼 DESC) AS 순위
FROM 테이블명;

  • Sum
    - 숫자 값들의 합을 구하는 함수
    - GROUP BY와 함께 사용하면 그룹별 합계를 구할 수 있음
    - OVER()를 사용하면 윈도우 함수로도 활용 가능 (누적 합계 등)
-- 전체 합계
SELECT SUM(컬럼명) FROM 테이블명;

-- 그룹별 합계
SELECT 그룹컬럼, SUM(집계할컬럼) FROM 테이블명 GROUP BY 그룹컬럼;

-- 누적 합계
SELECT 컬럼명, SUM(집계할컬럼) OVER (PARTITION BY 그룹컬럼 ORDER BY 정렬컬럼) AS 누적합계
FROM 테이블명;

15) 날짜 및 시간 관련 연산을 수행하는 함수

  • date()
    - 날짜를 YYYY-MM-DD 형식으로 저장
    - 날짜 연산 가능 (+, - 사용 가능)
    SELECT DATE('2024-02-22 15:30:00') AS only_date
  • DATE_FORMAT()
    - 날짜 데이터를 원하는 형식으로 변환하는 함수
    - DATE 데이터에서 연, 월, 일, 요일, 시간, 분, 초를 조합하여 출력 가능
    DATE_FORMAT(날짜컬럼, '%Y')

🚀 날짜/시간 형식 코드 정리

단위코드설명예제 (2024-02-22 15:30:45)
연(Y)%Y4자리 연도2024
%y2자리 연도24
월(M)%M월의 풀네임 (영어)February
%m2자리 숫자 월02
일(D)%d2자리 숫자 일22
시간(H)%H24시간제 (00~23)15
%h12시간제 (01~12)03
분(M)%i분 (00~59)30
초(S)%s초 (00~59)45



SQL 5일차

16) 반올림 함수

  • round() - 소숫점, 정수 반올림(반올림 자릿수에 앞에 '-' 추가)
    ROUND('수치값', '반올림 자릿수')
  • ceiling() - 소수점 전체 올림


python 1일차

2. python 기초

1) 문자열 다루는 함수

  • 문자열을 처리하고 변환하는 함수들
함수설명예제 (text = "Hello World")결과
len()문자열 길이 반환len(text)11
upper()대문자로 변환text.upper()"HELLO WORLD"
lower()소문자로 변환text.lower()"hello world"
split()특정 구분자로 문자열 나누기text.split(" ")["Hello", "World"]
replace()특정 문자열 치환text.replace("World", "Python")"Hello Python"

2) 문자열 인덱싱(Indexing)과 슬라이싱(Slicing)

  • 인덱싱(Indexing) → 문자열에서 특정 위치의 문자 가져오기
  • 슬라이싱(Slicing) → 문자열에서 일부 범위를 추출
개념설명예제 (text = "Hello World")결과
인덱싱 ([])특정 위치의 문자 가져오기text[0]'H'
음수 인덱싱 (-1)뒤에서부터 문자 가져오기text[-1]'d'
슬라이싱 ([:])특정 범위 문자 가져오기text[0:5]'Hello'
시작부터 ([:n])처음부터 n번째까지text[:5]'Hello'
끝까지 ([n:])n번째부터 끝까지text[6:]'World'

3) 리스트(List)와 딕셔너리(Dictionary)

  • 리스트(List) → "시퀀스(Sequence) 자료형" (순서를 가지는 데이터)

🚀 리스트(List) 주요 기능

기능설명예제 fruits = ["apple", "banana", "cherry"]
리스트 길이 (len())리스트 요소 개수 반환len(fruits)3
인덱싱 ([])특정 요소 접근fruits[1]"banana"
슬라이싱 ([:])특정 범위 요소 가져오기fruits[1:3]["banana", "cherry"]
리스트 추가 (append())리스트 끝에 요소 추가fruits.append("grape")
리스트 정렬 (sort())리스트 요소 정렬 (오름차순)numbers.sort()[1, 2, 3]
내림차순 정렬 (reverse=True)내림차순 정렬numbers.sort(reverse=True)
리스트 내 요소 확인 (in)특정 값 존재 여부 확인"apple" in fruitsTrue

  • 딕셔너리(Dictionary) → "매핑(Mapping) 자료형" (키-값 쌍으로 저장)
    ✔️ 키(Key)와 값(Value) 쌍(Pair)으로 데이터를 저장하는 자료구조
    ✔️ 순서가 없으며, 키를 사용하여 데이터를 빠르게 검색 가능
개념설명예제
키-값 저장{key: value} 형태로 저장person = {"name": "Alice", "age": 25}
순서 없음Python 3.7부터 삽입 순서 유지{1: "one", 2: "two"}
키(Key) 중복 불가동일한 키 사용 시 마지막 값 유지{"a": 1, "a": 2} → {"a": 2}
값(Value) 중복 가능여러 개의 동일 값 가능{"x": 100, "y": 100}

💡 딕셔너리의 값으로 리스트(List)를 저장할 수 있으며, 이를 활용하면 여러 개의 데이터를 그룹화하여 관리할 수 있다.

📌 딕셔너리에서 리스트를 사용하는 주요 기능

기능설명예제
리스트 값 저장딕셔너리 값에 리스트 저장 가능scores = {"math": [90, 85, 80]}
리스트 요소 접근인덱스를 사용하여 값 가져오기scores["math"][0] # 90
리스트 값 수정리스트 내부 값 변경 가능scores["math"][1] = 88
리스트 값 추가.append()로 리스트에 요소 추가scores["math"].append(95)
전체 값 조회.values()로 리스트 값 확인list(scores.values())

0개의 댓글