Menu

SQL 포매터

구문을 인식한 들여쓰기로 SQL 쿼리를 정리.

마지막 업데이트

키워드
들여쓰기
입력시작하려면 SQL을 붙여넣으세요
출력
포맷된 SQL이 여기에 표시됩니다 — 들여쓰기, 정렬, 복사를 한 번에.

SQL 포매터란?

SQL 포매터는 한 줄로 길게 늘어선 쿼리나 ORM이 자동 생성한 SQL을 일관된 들여쓰기와 줄바꿈으로 다시 써줍니다. 조인을 검토할 때, 필터 조건을 디버깅할 때, ORM 출력 결과를 정리할 때, 티켓이나 문서에 쿼리를 공유할 때, 또는 실행 계획을 한 줄씩 따라가며 분석할 때 자주 쓰입니다.

포매팅은 쿼리가 *하는 일*을 바꾸지 않습니다. 사람이 읽기 편한 형태로 모양만 다듬을 뿐이죠. 레이아웃이 일정해지면 SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY가 어떻게 엮여 있는지 훨씬 쉽게 파악할 수 있습니다. 특히 서브쿼리와 CTE가 섞인 복잡한 쿼리에서 효과가 큽니다.

SQL은 *방언(dialect)*이 많습니다. PostgreSQL, MySQL, SQLite, T-SQL(Microsoft SQL Server), Oracle, BigQuery 모두 표준 위에 자기들만의 문법을 얹어 놓았죠. 좋은 포매터는 선택한 방언을 이해해서 벤더 고유 문법을 망가뜨리지 않습니다.

SQL을 정리하면서 자연스럽게 익히는 것들

  • 각 절의 역할: SELECT은 컬럼을 고르고, FROM은 테이블을 지정하며, WHERE는 행을 걸러내고, GROUP BY는 묶고, ORDER BY는 정렬합니다.
  • 들여쓰기가 잘 되어 있으면, 한 줄짜리 쿼리에선 보이지 않던 중첩 쿼리·조인·조건들이 그대로 드러납니다.
  • 방언은 중요합니다. RETURNING, LIMIT, TOP, 그리고 식별자 인용 방식([col] vs "col")은 DB마다 호환되지 않습니다.

SQL 쿼리 포매팅, 단계별로 따라하기

  1. 쿼리 붙여넣기

    입력창에 SQL을 그대로 붙여 넣으세요. 한 줄짜리, ORM이 만든 것, 일부만 정리된 SQL 모두 잘 처리됩니다.

  2. 방언 선택

    PostgreSQL, MySQL, SQLite, T-SQL 중에 골라야 LIMIT, TOP, RETURNING 같은 벤더별 키워드를 망가뜨리지 않고 정리할 수 있습니다.

  3. 스타일 설정

    키워드 대소문자(대문자가 표준)와 들여쓰기 폭(2칸 또는 4칸)을 선택하세요. 대부분의 팀은 키워드 대문자 + 2칸 들여쓰기를 씁니다.

  4. 정리된 결과 확인

    각 절은 자기 줄에 자리 잡고, 조인은 정렬되며, 서브쿼리는 들여쓰기됩니다. 주석도 그대로 남아 있습니다.

  5. 다시 프로젝트로 복사

    정리된 쿼리를 마이그레이션, ORM의 raw 쿼리, BI 도구 등에 붙여 넣으면 됩니다. 모든 처리는 브라우저 안에서만 이루어집니다.

SQL 절 빠른 참고서

SELECT 쿼리의 95%에서 만나는 절들을, 개념적으로 처리되는 순서대로 정리했습니다. 공식 문서: PostgreSQL SELECT, MySQL SELECT.

역할예시
SELECT반환할 컬럼/표현식을 지정SELECT id, name
FROM원본 테이블을 지정FROM users
JOIN ... ON다른 테이블의 행과 결합JOIN orders ON orders.user_id = users.id
WHERE그룹화 전에 행을 필터링WHERE active = true
GROUP BY값이 같은 행끼리 묶어서 집계GROUP BY country
HAVING집계된 그룹에 대한 필터HAVING COUNT(*) > 10
ORDER BY결과 정렬ORDER BY created_at DESC
LIMIT / OFFSET결과 페이지네이션LIMIT 20 OFFSET 40
WITH ... ASCTE — 서브쿼리에 이름 붙이기WITH active AS (...)

직접 따라해 볼 SQL 예제

간단한 쿼리 정리

입력
select id,name from users where active=true order by created_at desc limit 10
정리 결과
SELECT  id,  nameFROM usersWHERE active = trueORDER BY created_at DESCLIMIT 10;

각 절이 자기 줄로 떨어지고 컬럼 목록이 들여쓰기되어 있습니다. 코드 리뷰에서 이 쿼리를 검토하기가 10배는 쉬워졌죠.

조인 들여다보기

입력
select u.name,o.total from users u join orders o on o.user_id=u.id where o.total>100
정리 결과
SELECT  u.name,  o.totalFROM users uJOIN orders o ON o.user_id = u.idWHERE o.total > 100;

테이블에 별칭(users u, orders o)을 붙이면 컬럼 목록이 짧아집니다. JOIN ... ON 줄을 따로 띄우면 두 테이블의 관계가 한눈에 보입니다.

중첩된 서브쿼리 읽기

입력
select * from users where id in (select user_id from enrollments where course_id=5)
정리 결과
SELECT *FROM usersWHERE id IN (  SELECT user_id  FROM enrollments  WHERE course_id = 5);

안쪽 쿼리를 들여쓰기하면 의존 관계가 분명해집니다. 구조가 눈에 보이고 나면, 많은 서브쿼리는 JOIN이나 CTE로 다시 쓸 수 있다는 사실도 함께 보이게 되죠.

SQL 포매팅에서 자주 하는 실수

  • 정리된 SQL이 *맞는* SQL이라고 착각하는 것. 포매팅은 모양만 바꿀 뿐 의미를 검증해주지 않습니다. 깔끔해 보여도 결과가 틀릴 수 있습니다.
  • 정리하는 김에 쿼리를 살짝 고쳐놓고 결과를 다시 테스트하지 않는 것.
  • 방언을 무시하는 것. PostgreSQL의 LIMIT 10, T-SQL의 TOP 10, 표준 SQL의 FETCH FIRST 10 ROWS ONLY는 같은 일을 하지만 서로 호환되지 않습니다.

SQL 포매터 자주 묻는 질문

포매팅을 하면 쿼리 결과가 달라지나요?
아니요. 공백과 대소문자만 바뀝니다. 데이터베이스는 둘 중 어느 버전을 받든 같은 실행 계획으로 파싱하기 때문에, 결과 행은 완전히 동일합니다.
왜 굳이 SQL을 정리해야 하나요?
읽기 좋은 SQL은 디버깅, 코드 리뷰, 학습, 유지보수가 모두 쉬워집니다. 조인이 여러 개거나 서브쿼리, CTE, 윈도우 함수가 섞인 쿼리에서 차이가 특히 큽니다.
SQL 방언이 뭔가요?
SQL 방언은 표준 SQL을 데이터베이스마다 자기들 식으로 확장한 버전입니다. PostgreSQL, MySQL, SQLite, T-SQL(SQL Server), Oracle, BigQuery 모두 표준 너머에 고유 문법을 가지고 있습니다.
포매터가 망가진 쿼리도 고쳐주나요?
포매터는 쿼리를 구조화된 형태로 다시 출력하면서 문법 문제를 드러내 보여줄 수는 있습니다. 하지만 여러분의 스키마를 이해하지는 못하기 때문에, 쿼리가 논리적으로 맞는지까지 보장해주지는 못합니다.
SQL 키워드는 대문자로 써야 하나요?
대부분의 스타일 가이드는 키워드(SELECT, FROM, WHERE)는 대문자, 식별자는 소문자를 권장합니다. 시각적인 대비 덕분에 쿼리 구조가 더 잘 보이거든요. 어떤 스타일을 쓰든 일관성만 유지하면 됩니다.

자세히 알아보기

다른 개발자 도구

Coddy로 코딩 배우기

시작하기