SQL이란?
데이터 분석을 공부하다 보면 가장 먼저 배우는 언어가 SQL이다.
나도 한동안 Python만 하다가 SQL을 다시 보려고 하니 생각보다 많이 까먹어서, 데이터 분석 취업 준비 기준으로 자주 사용하는 문법만 다시 정리해봤다.
SQL 기본 작성 순서
SQL을 처음 배우면 SELECT부터 작성하는 경우가 많지만, 실제로는 SQL이 처리되는 순서는 다르다.
우선 가장 많이 사용하는 SQL 작성 형태부터 보면 아래와 같다.
SELECT 컬럼명
FROM 테이블명
WHERE 조건
GROUP BY 컬럼명
HAVING 조건
ORDER BY 컬럼명
LIMIT 개수;
예를 들어 성인 회원을 나이순으로 10명 조회한다면 다음과 같이 작성한다.
SELECT name, age
FROM users
WHERE age >= 20
ORDER BY age DESC
LIMIT 10;
처음에는 SELECT → FROM → WHERE 순서로 작성하는 것이 익숙하지만, SQL은 내부적으로 아래 순서대로 실행된다.
FROM
→ JOIN
→ WHERE
→ GROUP BY
→ HAVING
→ SELECT
→ ORDER BY
→ LIMIT
작성 순서와 실행 순서가 다르기 때문에 GROUP BY, HAVING, JOIN 등을 공부할수록 이 실행 순서를 이해하는 것이 중요하다.
그럼 이제 SQL에서 가장 많이 사용하는 기본 문법들을 하나씩 정리해보자.
1. SELECT - 데이터 조회
가장 기본이 되는 문법이다.
SELECT *
FROM users;
특정 컬럼만 조회할 수도 있다.
SELECT name, age
FROM users;
컬럼 이름을 변경해서 출력하고 싶다면 AS를 사용한다.
SELECT
name AS 이름,
age AS 나이
FROM users;
2. WHERE - 조건 검색
원하는 데이터만 조회할 때 사용하는 조건문이다.
비교 연산자
WHERE age >= 20
AND / OR
WHERE age >= 20
AND gender = 'M'
BETWEEN
WHERE age BETWEEN 20 AND 30
IN
WHERE city IN ('서울', '부산')
LIKE
WHERE name LIKE '김%'
| '김%' | 김으로 시작 |
| '%수' | 수로 끝 |
| '%민%' | 민 포함 |
NULL을 조회할 때는 = 대신 IS를 사용해야 한다.
WHERE phone IS NULL
WHERE phone IS NOT NULL
3. ORDER BY - 정렬
오름차순은 ASC, 내림차순은 DESC를 사용한다.
ORDER BY age ASC
ORDER BY age DESC
여러 개의 컬럼으로도 정렬할 수 있다.
ORDER BY age DESC, name ASC
4. LIMIT - 원하는 개수만 조회
상위 데이터 몇 개만 확인할 때 자주 사용한다.
SELECT *
FROM users
LIMIT 5;
점수가 높은 상위 10명을 조회한다면
SELECT *
FROM users
ORDER BY score DESC
LIMIT 10;
5. DISTINCT - 중복 제거
중복된 값을 제거하고 조회한다.
SELECT DISTINCT city
FROM users;
6. 집계 함수
데이터 분석에서 정말 많이 사용하는 함수들이다.
COUNT()
SUM()
AVG()
MAX()
MIN()
예시
SELECT
COUNT(*) AS 회원수,
AVG(age) AS 평균나이
FROM users;
7. GROUP BY
같은 값을 하나로 묶어서 집계할 때 사용한다.
지역별 회원 수
SELECT
city,
COUNT(*) AS 회원수
FROM users
GROUP BY city;
지역별 평균 나이
SELECT
city,
AVG(age)
FROM users
GROUP BY city;
8. HAVING
WHERE와 가장 많이 헷갈리는 문법이다.
- WHERE : 그룹화 이전 조건
- HAVING : 그룹화 이후 조건
예를 들어 회원이 5명 이상인 지역만 조회한다면
SELECT
city,
COUNT(*) AS 회원수
FROM users
GROUP BY city
HAVING COUNT(*) >= 5;
9. JOIN
여러 개의 테이블을 연결할 때 사용하는 문법이다.
INNER JOIN
공통 데이터만 조회한다.
SELECT *
FROM orders o
JOIN users u
ON o.user_id = u.user_id;
LEFT JOIN
왼쪽 테이블을 모두 조회한다.
SELECT *
FROM users u
LEFT JOIN orders o
ON u.user_id = o.user_id;
주문을 하지 않은 회원도 함께 조회된다.
10. CASE WHEN
조건에 따라 다른 값을 출력할 수 있다.
SELECT
name,
CASE
WHEN age >= 20 THEN '성인'
ELSE '미성년자'
END AS 구분
FROM users;
11. 자주 사용하는 문자열 함수
CONCAT()
SUBSTRING()
LENGTH()
LOWER()
UPPER()
REPLACE()
예시
SELECT CONCAT(name, '님');
12. 날짜 함수
현재 날짜
NOW()
오늘 날짜만 조회
CURDATE()
하루 더하기
DATE_ADD(date, INTERVAL 1 DAY)
13. 서브쿼리
쿼리 안에 또 다른 쿼리를 작성하는 방법이다.
평균보다 높은 점수를 가진 회원 조회
SELECT *
FROM users
WHERE score >
(
SELECT AVG(score)
FROM users
);
FROM 절에도 사용할 수 있으며 이 경우에는 별칭(AS)이 반드시 필요하다.
SELECT AVG(total)
FROM
(
SELECT
order_id,
SUM(price) AS total
FROM orders
GROUP BY order_id
) t;
14. EXISTS
조건을 만족하는 데이터가 존재하는지 확인할 때 사용한다.
SELECT *
FROM users u
WHERE EXISTS
(
SELECT 1
FROM orders o
WHERE u.id = o.user_id
);
NOT EXISTS는 반대로 존재하지 않는 데이터를 조회할 때 사용한다.
15. 윈도우 함수
데이터 분석 코딩테스트에서 자주 등장하는 문법이다.
순위 구하기
SELECT
name,
score,
RANK() OVER(ORDER BY score DESC)
FROM users;
행 번호
ROW_NUMBER() OVER(ORDER BY score DESC)
누적합
SUM(price)
OVER(ORDER BY date)
SQL 실행 순서
SQL은 작성 순서와 실행 순서가 다르다.
FROM
→ JOIN
→ WHERE
→ GROUP BY
→ HAVING
→ SELECT
→ ORDER BY
→ LIMIT
면접에서도 자주 물어보는 내용이라 한 번쯤은 외워두는 것이 좋다.
마무리
데이터 분석에서는 SQL을 단순히 조회하는 수준이 아니라 데이터를 가공하고 분석하는 용도로 가장 많이 사용한다.
특히 아래 문법들은 거의 모든 프로젝트에서 사용한다고 봐도 될 정도로 자주 등장한다.
- SELECT
- WHERE
- GROUP BY
- HAVING
- ORDER BY
- JOIN
- CASE WHEN
- 서브쿼리
- 윈도우 함수
나도 오랜만에 다시 정리하면서 잊고 있던 부분이 꽤 많았다. 앞으로는 SQL 문제를 꾸준히 풀면서 감을 다시 익혀볼 생각이다.
출처
- MySQL 공식 문서
- SQLBolt
- W3Schools SQL
- 개인 학습 내용 및 정리
- SQL 서브쿼리 및 EXISTS 개념 참고
'데이터분석 > SQL' 카테고리의 다른 글
| [SQL] NULL 처리하기 (IFNULL 사용법) | 프로그래머스 NULL 처리하기 (0) | 2026.07.03 |
|---|---|
| [SQL] 이름에 el이 들어가는 동물 찾기 (LIKE, AND, ORDER BY) (0) | 2026.07.03 |
| [SQL] 프로그래머스 GROUP BY - 동명 동물 수 찾기 (GROUP BY, HAVING, ORDER BY) (0) | 2026.07.03 |
| [SQL] 프로그래머스 최솟값 구하기 | ORDER BY와 LIMIT 사용하기 (0) | 2026.07.02 |
| [SQL] 역순 정렬하기 (ORDER BY DESC) | 프로그래머스 SQL 입문 (0) | 2026.07.02 |