260103 - SQL 총정리

TaeHyun·2026년 1월 3일

TIL

목록 보기
127/182

시작하며

오늘은 SQL 내용 중 강사님께서 중요하고 많이 사용된다고 짚어주셨던 내용들을 정리해보았다.

SQL 기초

SQL

  • 구조화된 질의 언어(Structured Query Language, SQL)는 DBMS에서 데이터를 정의하고, 관리하며, 활용하기 위해 사용하는 특수 목적의 프로그래밍 언어
    • 소프트웨어를 개발한 회사에 따라 작은 차이가 있지만, 표준 SQL을 준수함

SQL 기본 문법(순서)

  • SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
SELECT 필드명 or 표현식(함수)
FROM 테이블
WHERE 행 필터링 
	-- SELECT 절에 사용한 별칭(AS) 사용 불가(MySQL, SQLite는 사용 가능)
GROUP BY 필드명, 필드명
	-- 행 -> 그룹으로 묶기
HAVING 그룹 필터링
	-- 별칭(AS) 사용 불가 / 집계함수 가능
ORDER BY 
	-- 별칭(AS) 사용 가능
LIMIT n;

SQL 함수

수학 함수

  • ROUND(필드명, 소수점 자리수) : 필드 원소를 반올림 하여 지정한 소수점 자리수까지를 반환
  • POWER(필드명, 거듭제곱) : 거듭제곱한 값 반환
  • SQRT(필드명) : 양의 제곱근을 반환

집계 함수

데이터를 요약 → 데이터의 특징을 알 수 있음 (EDA)

  • COUNT(필드명) : 결측이 아닌 개수 반환
  • SUM(필드명) : 결측이 아닌 값의 합계 반환
  • AVG(필드명) : 결측이 아닌 값의 평균 반환

제어 함수

  • IFNULL(필드명, 대체값) : 결측이 아니면 원본, 결측이면 대체값 반환
  • CASE WHEN : IIF() 를 확장한 구문
SELECT sepal_width
	, CASE WHEN sepal_width > 3.5 THEN 'L' ELSE 'S' END AS grade
FROM IRIS;

SELECT sepal_width
	, CASE WHEN sepal_width > 3.5 THEN 'L'
    	   WHEN sepal_width > 3.0 THEN 'M'
         ELSE 'S' END AS grade
FROM IRIS;

병합

  • 병합할 때 기준 열을 외래키(Foreign Key)라고 함
  • 병합 하기전 확인 사항
    • 두 외래키에 서로 일치하는 원소가 있는지
    • 오른쪽 외래키에 중복된 원소가 있는지
  • M:N 관계라면 둘 중 하나에서 중복을 제거하거나 그룹으로 요약하는 등의 전처리 필요

병합의 종류

  • 내부 병합(Inner Join) : 감소 가능
    • 결측값 처리 필요없음
    • 행이 크게 줄어들면 문제가 생길 가능성 높음
  • 전체 외부 병합(Full Outer Join) : 증가 가능
  • 왼쪽 외부 병합(Left Outer Join) : 행 고정

왼쪽 외부 병합

SELECT A.*, B.내선, B.부서
FROM HR_MEMBER AS A
LEFT OUTER JOIN HR_OFFICE AS B
ON A.직원명 = B.직원명;

-- 오른쪽 외부 병합
SELECT A.*, B.내선, B.부서
FROM HR_MEMBER AS A
RIGHT OUTER JOIN HR_OFFICE AS B
ON A.직원명 = B.직원명;
  • 왼쪽 외부 병합에서 교집합 제외
SELECT A.*, B.내선, B.부서
FROM HR_MEMBER AS A
LEFT OUTER JOIN HR_OFFICE AS B
ON A.직원명 = B.직원명
WHERE B.직원명 ISNULL;
  • 외래키 2개 이상 지정(현업에서 많이 사용되는 패턴)
SELECT A.*, C.혈액형, C.동아리
FROM HR_MEMBER AS A
LEFT OUTER JOIN HR_PERSON AS C
ON A.직원명 = C.이름 AND A.나이 = C.나이;

마치며

SQL에서 가장 어려운 내용은 GROUP BY와 JOIN인 것 같다. 하지만 문제를 계속 풀다 보면 금방 익숙해질 것 같아서 큰 무리는 없을 것 같다. 하루 루틴에 SQL 코딩 테스트 문제 풀기를 추가했는데, 꾸준히 풀어보면서 SQL 자격증을 준비해보려고 한다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글