SQL 포매터

다양한 스타일과 규칙으로 SQL 쿼리를 정리하고 보기 좋게 만드세요

원본 SQL

줄 수: 1 | 문자 수: 0

포맷된 SQL

줄 수: 0 | 문자 수: 0

포맷 스타일

고급 설정

SQL 예제

기록

SQL 포매터 소개

한 줄에 400자가 넘게 이어진 SQL 쿼리를 읽어 본 적이 있다면 이 도구가 왜 필요한지 바로 아실 겁니다. 저장 프로시저에서 뽑아낸 쿼리, 메신저 대화에서 복사한 쿼리, 애플리케이션 로그에 찍힌 압축된 쿼리는 줄 바꿈이 없고 대소문자가 뒤섞인 채 절이 다닥다닥 붙어 옵니다. 그런 상태에서는 빠진 JOIN 조건이나 잘못 닫힌 괄호를 찾기가 거의 불가능하죠. SQL 포매터는 그 텍스트를 받아 들여쓰기가 정리된 읽기 쉬운 쿼리로 다시 세웁니다. SELECT 목록, FROM, WHERE, GROUP BY, 중첩된 서브쿼리가 각각 눈에 띄는 덩어리로 나뉘어 구조가 한눈에 들어옵니다.

쿼리를 붙여 넣거나 입력하면 결과가 자동으로 갱신됩니다. '표준' 스타일에서는 SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING이 각각 새 줄에서 시작하고, JOIN도 줄을 바꾸며, SELECT 목록의 컬럼은 하나씩 한 줄을 차지하고, 괄호가 열릴 때마다 안쪽이 한 단계 들여쓰기되어 서브쿼리가 도드라집니다. '확장'은 쉼표마다 줄을 바꾸고, '컴팩트'는 최대 줄 길이를 넘을 때만 줄을 바꿉니다. 키워드 대소문자('대문자', '소문자', '첫 글자 대문자'), 공백과 탭, 들여쓰기 폭, 주석 제거 여부도 고를 수 있습니다. 다만 완전한 SQL 파서가 아니라 가벼운 토크나이저라서, 표준 SELECT·INSERT·UPDATE·CTE 쿼리는 잘 정리하지만 데이터베이스별 문법은 모릅니다. 'Oracle 스타일', 'MySQL 스타일', 'PostgreSQL 스타일', 'SQL Server 스타일'은 현재 '컴팩트'와 같은 결과를 냅니다.

포맷팅은 브라우저 안에서 처리되어 쿼리 텍스트가 어디로도 전송되지 않습니다. 내부 테이블 이름이나 업무 로직이 담긴 SQL이라면 중요한 부분입니다. 설정값과 최근 복사한 쿼리 20개는 로컬 저장소에 남고, '기록 지우기'로 지울 수 있습니다. 코드 리뷰에 올리기 전이나 마이그레이션 파일에 넣기 전에 한 번 정리해 두면, 한 줄로 뭉친 쿼리보다 버전 관리 diff를 읽기가 훨씬 수월해집니다.

SQL 쿼리 정리하는 방법

빽빽하게 뭉친 SQL 쿼리를 들여쓰기가 정리된 읽기 쉬운 문장으로 바꿉니다.

  1. 1

    SQL 붙여 넣기

    데이터베이스 클라이언트나 로그, 코드에서 쿼리를 복사해 '원본 SQL' 칸에 붙여 넣습니다.

  2. 2

    포맷 스타일 고르기

    절마다 한 줄씩 나누려면 '표준', 쉼표마다 줄을 바꾸려면 '확장', 절을 한 줄에 모으고 최대 줄 길이에서만 줄을 바꾸려면 '컴팩트'를 고릅니다.

  3. 3

    세부 설정 조정하기

    '고급 설정'에서 '키워드 대소문자', '들여쓰기'(공백/탭과 폭), '최대 줄 길이'를 정합니다. 설정을 바꾸면 0.5초쯤 뒤에 결과가 자동으로 다시 만들어집니다.

  4. 4

    구조 확인하기

    쓰기 전에 결과를 훑어봅니다. 서브쿼리가 기대한 대로 들여쓰기됐는지, 백슬래시 이스케이프나 달러 인용 본문처럼 데이터베이스 고유 문법이 흐트러지지 않았는지 봅니다.

  5. 5

    결과 복사하기

    '클립보드에 복사'로 정리된 쿼리를 복사해 SQL 파일, 마이그레이션 스크립트, 코드 리뷰에 붙여 넣습니다.

예시로 보는 사용법

한 줄짜리 집계 쿼리, '표준' 스타일

입력
SELECT customer_id, SUM(total) AS spent FROM orders WHERE status = 'paid' GROUP BY customer_id ORDER BY spent DESC;
결과
SELECT customer_id, SUM(total) AS spent FROM orders WHERE status = 'paid' GROUP BY customer_id ORDER BY spent DESC;

SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING이 각각 새 줄에서 시작하고, '컬럼 정렬'이 켜져 있으면 SELECT 목록의 쉼표마다 줄이 바뀝니다.

서브쿼리, 소문자 키워드, 공백 4칸 들여쓰기

입력
select name from products where price > (select avg(price) from products where category_id = 1) and stock_quantity > 0; '키워드 대소문자': 소문자, '들여쓰기': 공백, 4
결과
select name from products where price >( select avg(price) from products where category_id = 1) and stock_quantity > 0;

괄호가 열릴 때마다 한 단계씩 들여쓰기되어 안쪽 쿼리가 바깥 쿼리보다 한 칸 들어가 보입니다.

'컴팩트'는 절을 한 줄에 둡니다

입력
첫 번째 쿼리를 '컴팩트' 스타일로 다시 정리합니다.
결과
SELECT customer_id, SUM(total) AS spent FROM orders WHERE status = 'paid' GROUP BY customer_id ORDER BY spent DESC;

'컴팩트'는 줄이 '최대 줄 길이'(기본 80자)를 넘을 때만 바꿉니다. 'Oracle 스타일', 'MySQL 스타일', 'PostgreSQL 스타일', 'SQL Server 스타일'도 현재는 이와 같은 결과를 냅니다.

팁과 자주 하는 실수

  • 포맷 버튼은 따로 없습니다. 입력을 멈추고 0.5초쯤 지나면 결과가 갱신되고, 설정을 바꿀 때도 다시 만들어집니다.
  • 완전한 SQL 파서가 아니라 가벼운 토크나이저이므로 실행 전에 결과를 읽어 보세요. 두 글자 연산자(>=, <=, <>, !=, ||, ::)는 그대로 두고, 한정된 이름과 함수 호출(u.id, COUNT(o.id))에 불필요한 공백을 넣지 않으며, LEFT JOIN·INNER JOIN·CROSS JOIN은 한 줄에 유지하지만, 데이터베이스별 고유 문법은 전혀 모릅니다.
  • 문자열은 작은따옴표와 큰따옴표 모두 알아보고, 작은따옴표 문자열 안에서 따옴표를 겹쳐 쓴 경우('O''Brien')도 문자열의 일부로 남깁니다. 백슬래시 이스케이프와 PostgreSQL의 달러 인용 본문은 이해하지 못하니 저장 프로시저나 함수 본문은 넣지 마세요.
  • 주석을 지울 생각이 아니라면 '주석 제거'는 꺼 두세요. 켜면 줄에 있는 모든 "--" 이후가 지워지는데, 문자열 리터럴 안에 우연히 들어 있는 "--"도 예외가 아닙니다.
  • 설정은 브라우저 로컬 저장소에 남고, 결과를 복사할 때마다 '기록'에 쌓입니다(최근 20개). 공용 컴퓨터에서 민감한 쿼리를 붙여 넣었다면 '기록 지우기'로 지우세요.
  • '출력을 입력으로 사용'을 누르면 정리된 결과가 '원본 SQL' 칸으로 다시 들어갑니다. 이미 정리한 쿼리에 다른 스타일을 시험해 볼 때 편합니다.

자주 묻는 질문

어떤 데이터베이스의 SQL을 지원하나요?

주요 데이터베이스가 공통으로 쓰는 표준 SQL, 즉 SELECT, INSERT, UPDATE, DELETE, JOIN, 서브쿼리, WITH(CTE) 쿼리를 다룹니다. 'Oracle 스타일', 'MySQL 스타일', 'PostgreSQL 스타일', 'SQL Server 스타일' 버튼은 데이터베이스별 규칙을 더하지 않으며, 현재는 '컴팩트'와 같은 결과를 냅니다. PostgreSQL의 달러 인용 함수 본문 같은 고유 문법은 이해하지 못합니다.

쿼리의 논리가 바뀌지는 않나요?

공백, 줄 바꿈, 키워드 대소문자만 바꾸도록 만들었습니다. >=, <>, :: 같은 연산자, u.id 같은 한정된 이름, 따옴표를 겹쳐 쓴 문자열('O''Brien')은 그대로 둡니다. 그래도 파서가 아닌 단순 토크나이저이므로 실행 전에 결과를 확인하세요. 특히 '주석 제거'를 켜면 문자열 안에 있는 --까지 포함해 줄의 -- 이후가 전부 지워집니다.

SQL을 한 줄로 압축할 수도 있나요?

완전히는 안 됩니다. '컴팩트'는 절을 같은 줄에 두고 '최대 줄 길이'에서만 줄을 바꾸지만, SELECT 목록의 쉼표 뒤에서는 여전히 줄을 바꿉니다. 한 줄에 가깝게 만들려면 '컴팩트'를 고르고 '컬럼 정렬'을 끈 뒤 '최대 줄 길이'를 올리세요(최대 200자). 그보다 긴 쿼리는 어쩔 수 없이 줄이 바뀝니다.

SQL 문법이 맞는지도 검사해 주나요?

아니요. 공백과 키워드 대소문자만 다시 배치하므로 오타가 있는 쿼리도 그대로 정리합니다. 'SQL 분석' 패널은 쿼리 유형, 키워드 수, FROM 테이블 수를 보여 줄 뿐 문법을 검증하지 않습니다. MySQL 쿼리라면 이 사이트의 MySQL 문법 검사 도구가 따옴표·괄호 짝이 안 맞거나 FROM 앞에 쉼표가 남은 경우 같은 흔한 구조 실수를 찾아 줍니다.

어떤 키워드의 대소문자가 바뀌나요?

정해진 70개 남짓의 단어입니다. 절 키워드(SELECT, FROM, WHERE, JOIN, GROUP, ORDER, HAVING, UNION, WITH), 연산자(AND, OR, NOT, IN, LIKE, BETWEEN, IS, NULL), DML·DDL(INSERT, UPDATE, DELETE, CREATE, ALTER, DROP), 집계 함수 COUNT, SUM, AVG, MIN, MAX가 여기 들어갑니다. DESC, LIMIT, COALESCE처럼 목록 밖의 단어는 입력한 그대로 남습니다.