카테고리 없음

2025.10.31 TIL (본캠프, 10일차)

D:Connect 2025. 10. 31. 21:06

오늘은 지금까지 튜터님의 SQL 라이브 강의를 전체적으로 복습했다. "하나라도 잘해보자"라는 목표로 진행한 복습이 생각보다 효과이 있었던거 같다..

 

어제 UNION과 JOIN을 배우면서 "개념은 이해되지만 실제 문제에 적용할 수 있을까?"라는 불안감이 있었다. 오늘 전체 강의를 복습하면서 그 불안감이 조금씩 사라졌다.

처음 배웠을 때는 각 개념이 독립적으로 느껴졌지만, 전체를 다시 훑어보니 모든 것이 연결되어 있다는 걸 깨달았다. SQL의 작동 순서부터 시작해서, 조건문, 집계함수, 그룹화, 서브쿼리, UNION, JOIN까지 모두 하나의 체계를 이루고 있었다.

이해가 더욱 잘된다. 오늘의 가장 큰 수확이지 않을까 싶다.

 

SQL 핵심 내용 정리:

 

1. SQL의 두 가지 순서

SQL을 작성할 때는 반드시 이 두 가지 순서를 구분해야 한다.

 - 작동 순서(실제 DB가 처리하는 순서):

FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY

 

 - 작성 순서(우리가 코드를 쓰는 순서):

SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY

 

이 차이를 이해하면 쿼리 에러의 원인을 빠르게 찾을 수 있다.

 

2. CASE WHEN을 통한 조건부 처리

CASE WHEN 조건1 THEN 결과값1
     WHEN 조건2 THEN 결과값2
     ELSE 결과값3 END

CASE WHEN을 사용할 때는 다양한 연산자를 지원한다. WHERE 절과 동일한 연산자들을 사용할 수 있으며, 조건은 여러 개 추가할 수 있다.

 

3. 조건문 연산자 (WHERE, CASE WHEN에서 사용)

더보기
연산자 예시 의미
>, < N<10, N>10 N이 10 미만, N이 10 초과
>=, <= N<=10, N>=10 N이 10 이하, N이 10 이상
= N=10 N이 10인 값
!= N!=10 N이 10이 아닌 값
LIKE LIKE('%과자%') 문자열이 ~와 같을 때 (%, _를 앞뒤에 붙임)
AND A AND B A 그리고 B를 모두 만족하는 값
OR A OR B A 또는 B인 값
NOT, ! NOT A, !A A가 아닌 값
BETWEEN A BETWEEN 10 AND 20 A가 10과 20 사이(10 이상 20 이하)
IN A IN (B) B에 A가 포함된 값
NOT IN A NOT IN B B에 A가 포함되지 않은 값
IS NULL A IS NULL A가 비어있는 값
IS NOT NULL A IS NOT NULL A가 비어있지 않은 값

 

4. 집계함수: 데이터를 요약하는 함수들

함수 기능
COUNT 테이블의 행 수 반환
SUM 테이블의 열 합계 반환
AVG 테이블의 열 평균 반환
MIN 테이블의 열 최소값 반환
MAX 테이블의 열 최대값 반환

집계함수는 전체 데이터를 대상으로 사용하거나, 특정 컬럼을 기준으로 사용할 수 있다.

 

5. GROUP BY와 HAVING의 명확한 구분

GROUP BY절은 집계함수에 "그룹(기준)"이 더해진 개념이다. 특정 컬럼을 기준으로 데이터를 요약해서 비교하고 싶을 때 사용한다.

HAVING ≠ WHERE

필터링 구문 필터링 시점
WHERE GROUP BY 전 데이터 필터링
HAVING GROUP BY 후 결과값을 기준으로 필터링

이 차이점은 정말정말 중요하다. WHERE로 할 수 있는 일과 HAVING으로만 할 수 있는 일이 완전히 다르기 때문이다.

 

6. SUB QUERY: 복잡한 연산을 단계적으로

SUB QUERY를 통해 데이터를 구조화할 수 있다. 빅데이터에서 많은 컬럼에 여러 연산(사칙, 집계, 윈도우 함수, 포맷팅)을 할 때, SUB QUERY는 이를 순차적(구조적)으로 기록하는 역할을 한다.

실행 순서: 서브쿼리(안쪽) 실행 → 메인쿼리(바깥쪽) 실행

특징:

  • () 안에 SELECT, FROM을 반드시 명시해야 함
  • 쿼리 마지막에 ; 기호를 사용할 수 없음
  • ORDER BY절을 사용할 수 없음
인라인 뷰(가장 많이 사용):
  • FROM 절에서 사용
  • 하나의 테이블처럼 사용
  • AS 구문을 사용하여 명칭을 반드시 기재해야 함
  • 향후 JOIN 및 UNION 시 가장 유용

 

7. UNION: 테이블 수직결합

구분 UNION UNION ALL
공통점 두 테이블을 수직결합 두 테이블을 수직결합
차이점 중복된 행을 하나로 표기(중복제거) 모든 행을 표시(중복제거 안 함)

주의점:

  • 열의 개수와 순서가 모든 쿼리에서 동일해야 함
  • 데이터 형식도 같아야 함
  • 2개 이상의 테이블도 결합 가능

8. JOIN: 테이블 수평결합

JOIN의 첫 번째 단계는 공통컬럼 찾기다. 공통컬럼이 두 테이블의 연결 고리가 된다.

공통컬럼의 특징:

  • 컬럼의 이름이 다를 수도 있음
  • 컬럼의 순서가 달라도 상관없음
  • 각 테이블의 데이터 값 개수가 달라도 조인 가능
  • 2개 이상의 공통컬럼이 있을 수도 있음
  • 공통컬럼이 없으면 조인 불가능

JOIN의 종류:

  • INNER JOIN: 두 테이블에서 일치하는 값을 가진 행만 반환
  • LEFT JOIN: 왼쪽 테이블의 모든 행 + 오른쪽 테이블의 일치 행 (불일치는 NULL)
  • RIGHT JOIN: 오른쪽 테이블의 모든 행 + 왼쪽 테이블의 일치 행 (불일치는 NULL)
  • FULL OUTER JOIN: LEFT JOIN + RIGHT JOIN (모든 데이터, 불일치는 NULL)

JOIN 종류

9. ORDER BY: 결과값 정렬

ORDER BY 컬럼명 ASC   -- 오름차순 (기본값)
ORDER BY 컬럼명 DESC  -- 내림차순

 

ORDER BY는 SQL 구문의 가장 마지막에 수행되며, 필수는 아니지만 결과의 가독성을 크게 높일 수 있다.

 

 

복습을 진행하면서 느낀 가장 큰 깨달음은 암기해야 하는 연산자는 익숙해질 때까지 써봐야 한다는 것이다.

WHERE, CASE WHEN에서 사용하는 연산자들(LIKE, BETWEEN, IN, IS NULL 등)은 단순히 개념만 아니라 손에 익혀야 한다. 문제 풀 때 자동으로 떠오를 때까지 반복해서 사용해야겠다. 

 

 

2주가 거의 지났다. 사전캠프부터 본캠프까지 지난 시간을 돌아보면, 정말 많은 것을 배웠다. 하지만 여전히 배울 게 산더미다.

오늘의 종합 복습을 통해 깨달은 것은 "SQL은 각 개념이 독립적이지 않다"는 것이다. 모든 것이 서로 연결되어 있고, 전체 그림을 이해해야 각 부분이 명확해진다.

앞으로도 이런 식의 복습을 자주 해야겠다. 새로운 개념을 배우는 것도 중요하지만, 배운 내용을 깊이 있게 이해하는 것이 훨씬 더 중요하다는 걸 알게되었다.

다음 주는 SQL의 한 단계 더 심화된 개념들을 배울 것 같다. 이번처럼 꾸준히 복습하면서 하나라도 잘해보자는 다짐을 유지하겠다.

 

주말에 잠깐이라도 공부를 해야겠다. 크게 두가지를 나 자신과 약속해본다.....
첫째, SQL 문제 풀기

둘째, 다음 주 강의 내용 미리 학습