SQL 포매터 (쿼리 정렬·압축)

SQL 쿼리를 보기 좋게 줄바꿈·들여쓰기하고 한 줄로 압축하며 키워드 대소문자를 정리합니다.

정리할 SQL을 붙여 넣어 주세요.

결과

사용 방법

  1. 왼쪽 칸에 SQL을 붙여 넣으면 버튼을 누르지 않아도 바로 정리됩니다.
  2. 정렬은 주요 절을 줄 맨 앞으로 보내고 열 목록과 조건을 한 단계 들여씁니다. 압축은 필요 없는 공백과 줄바꿈을 지워 한 줄로 만듭니다.
  3. 키워드를 대문자·소문자로 맞추거나 원문 그대로 둘 수 있고, 들여쓰기는 2칸·4칸·탭, 쉼표는 줄 끝과 줄 앞 가운데 고를 수 있습니다.
  4. 따옴표나 주석이 닫히지 않았으면 몇 번째 줄 몇 번째 칸이 문제인지 알려 주고, 그 자리로 이동해 바로 고칠 수 있습니다.

정렬 규칙

줄 맨 앞으로 내보내는 주요 절은 SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, INSERT INTO, VALUES, UPDATE, SET, DELETE FROM, WITH, RETURNING, UNION, UNION ALL, INTERSECT, EXCEPT와 모든 JOIN 계열(JOIN, INNER JOIN, LEFT JOIN, LEFT OUTER JOIN, RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN, NATURAL JOIN)입니다. 조인 조건 ON과 USING, 조건을 잇는 AND와 OR은 한 단계 안으로 들여써서 어디에 딸린 조건인지 눈에 보이게 합니다. 쉼표로 나뉜 열·값은 한 줄에 하나씩 두고, 괄호 안이 서브쿼리이면 한 단계 더 들여쓰며 닫는 괄호는 여는 줄의 위치에 맞춰 놓습니다. 함수 호출 괄호와 IN 목록처럼 짧은 괄호, CASE에서 END까지는 줄을 나누지 않아 한눈에 읽힙니다. BETWEEN 다음의 AND는 조건을 잇는 AND가 아니므로 줄을 바꾸지 않습니다.

입력정렬 결과
select a, b from t where x = 1 and y = 2
SELECT a,
  b
FROM t
WHERE x = 1
  AND y = 2
select a from t left join u on t.id = u.id
SELECT a
FROM t
LEFT JOIN u
  ON t.id = u.id
select a from t where id in (select id from u where flag = 1)
SELECT a
FROM t
WHERE id IN (
  SELECT id
  FROM u
  WHERE flag = 1
)
insert into t (a, b) values (1, 2), (3, 4)
INSERT INTO t (a, b)
VALUES (1, 2),
  (3, 4)
update t set a = 1, b = 2 where id = 3
UPDATE t
SET a = 1,
  b = 2
WHERE id = 3
select a from t union all select b from u
SELECT a
FROM t
UNION ALL
SELECT b
FROM u

문자열과 주석은 건드리지 않습니다

SQL을 줄 단위로 자르거나 정규식으로 키워드를 찾아 바꾸는 방식은 문자열 안의 낱말까지 건드려 쿼리의 뜻을 바꿔 버립니다. 이 도구는 먼저 글자를 하나씩 읽어 따옴표와 주석의 경계를 정하고, 그 안의 내용은 덩어리째 옮기기만 합니다. 작은따옴표 문자열과 안에서 두 번 겹쳐 쓴 따옴표, 큰따옴표·백틱·대괄호로 감싼 이름과 그 안에서 겹쳐 쓴 닫는 글자, 한 줄 주석과 여러 줄 주석, 그리고 PostgreSQL의 달러 인용까지 모두 원문 그대로 남습니다. 아래 표는 이 페이지를 만들 때 실제 포매터가 내놓은 결과입니다.

입력결과지키는 것
select 'select from where' as s
SELECT 'select from where' AS s
문자열 안의 키워드
select 'It''s' as s
SELECT 'It''s' AS s
이스케이프한 따옴표 ''
select "from", `group`, [order] from t
SELECT "from",
  `group`,
  [order]
FROM t
인용한 이름 세 가지
select a -- where b = 1
from t
SELECT a -- where b = 1
FROM t
한 줄 주석
select /* from t */ a from t
SELECT /* from t */ a
FROM t
여러 줄 주석
select $$ select 1; $$ as d
SELECT $$ select 1; $$ AS d
달러 인용 (PostgreSQL)

한 줄 주석은 그 줄 끝까지가 주석이라, 주석으로 끝난 줄 뒤에는 쉼표 하나도 붙이지 않습니다. 쉼표를 줄 끝에 두는 설정이어도 이때만은 다음 줄 앞에 씁니다. 압축할 때도 한 줄 주석 뒤의 줄바꿈 하나는 남깁니다. 그 줄바꿈을 지우면 뒤의 쿼리가 모두 주석 속으로 들어가 버리기 때문입니다.

옵션 비교

설정결과
2칸 · 쉼표 줄 끝
SELECT id,
  name,
  email
FROM members
WHERE active = 1
4칸 · 쉼표 줄 앞
SELECT id
    , name
    , email
FROM members
WHERE active = 1
2칸 · 키워드 소문자
select id,
  name,
  email
from members
where active = 1

정렬과 압축 예시

입력정렬압축
select u.id, u.name, count(o.id) as cnt from users u left join orders o on o.user_id = u.id where u.status = 'active' -- 활성 사용자만
and u.created_at >= '2026-01-01' group by u.id, u.name having count(o.id) > 0 order by cnt desc limit 20;
SELECT u.id,
  u.name,
  COUNT(o.id) AS cnt
FROM users u
LEFT JOIN orders o
  ON o.user_id = u.id
WHERE u.status = 'active' -- 활성 사용자만
  AND u.created_at >= '2026-01-01'
GROUP BY u.id,
  u.name
HAVING COUNT(o.id) > 0
ORDER BY cnt DESC
LIMIT 20;
SELECT u.id,u.name,COUNT(o.id) AS cnt FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.status='active' -- 활성 사용자만
AND u.created_at>='2026-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>0 ORDER BY cnt DESC LIMIT 20;

압축은 붙여 쓰면 뜻이 달라지는 자리에는 공백을 남깁니다. 뺄셈 기호 두 개가 이어 붙어 주석이 되거나, 낱말 두 개가 하나로 붙는 일이 없도록 하고 키워드 양옆은 한 칸씩 띄웁니다. 그래서 압축한 결과를 그대로 다시 실행할 수 있습니다.

알려 주는 오류

입력이 도구가 알려 주는 내용
select 'abc1줄 8칸 — 작은따옴표(')로 시작한 문자열이 닫히지 않았습니다. 값 안의 따옴표는 '' 처럼 두 번 써야 합니다.
select "abc1줄 8칸 — 큰따옴표(")로 감싼 식별자가 닫히지 않았습니다. " 로 닫아 주세요.
select `abc1줄 8칸 — 백틱(`)으로 감싼 식별자가 닫히지 않았습니다. ` 로 닫아 주세요.
select [abc1줄 8칸 — 대괄호([)로 감싼 식별자가 닫히지 않았습니다. ] 로 닫아 주세요.
select /* abc1줄 8칸 — 여러 줄 주석이 닫히지 않았습니다. 시작한 /* 를 */ 로 닫아 주세요.
select $$abc1줄 8칸 — 달러 인용($$)이 닫히지 않았습니다. 같은 표시로 닫아 주세요.

알아 둘 점

붙여 넣은 쿼리는 서버로 전송되지 않습니다. 모든 처리는 브라우저 안에서만 일어나고, 파일로 저장하기도 브라우저가 직접 만든 파일을 내려받는 방식입니다. 오류 메시지에는 줄·칸 번호와 무엇이 잘못됐는지만 담고 입력한 쿼리는 담지 않습니다. 운영 데이터베이스의 쿼리도 그대로 붙여 넣어 정리할 수 있습니다.

자주 묻는 질문

문자열이나 주석 안에 SELECT 같은 키워드가 들어 있으면 어떻게 되나요?

글자 하나 바뀌지 않고 그대로 남습니다. 이 도구는 줄을 나누기 전에 먼저 글자 단위로 읽어 작은따옴표 문자열, 큰따옴표·백틱·대괄호로 감싼 이름, 한 줄 주석, 여러 줄 주석, 달러 인용을 각각 한 덩어리로 떼어 놓습니다. 그래서 SELECT 'select from where' 의 문자열은 줄이 나뉘지도, 대문자로 바뀌지도 않습니다. 키워드 대소문자 설정도 따옴표 밖의 낱말에만 적용됩니다.

MySQL 백틱이나 SQL Server 대괄호로 감싼 이름도 안전한가요?

안전합니다. 백틱으로 감싼 이름 안의 겹친 백틱, 큰따옴표 이름 안의 겹친 큰따옴표, 대괄호 이름 안의 겹친 닫는 대괄호를 모두 이름의 일부로 읽습니다. 예약어와 같은 이름을 쓰려고 감싼 경우(group, order 같은)에도 감싼 글자를 벗기거나 대소문자를 바꾸지 않습니다. 감싸는 표시를 닫지 않았을 때만 오류로 알려 줍니다.

정렬한 쿼리를 다시 정렬하면 모양이 또 바뀌나요?

바뀌지 않습니다. 정렬 결과를 다시 넣어도 같은 결과가 나오도록(멱등) 만들었고, 압축한 것을 정렬하고 다시 압축해도 처음 압축과 같습니다. 정렬은 공백과 줄바꿈만 새로 만들고 토큰의 순서와 글자는 손대지 않기 때문입니다. 덕분에 팀에서 같은 설정을 쓰면 형상 관리 도구에 쓸데없는 변경이 쌓이지 않습니다.

PostgreSQL 달러 인용이나 세미콜론으로 이어 붙인 여러 문장도 다루나요?

둘 다 다룹니다. 달러 두 개로 감싼 덩어리와 이름표를 붙인 달러 인용은 같은 표시를 만날 때까지 한 덩어리로 보고 안의 내용을 그대로 둡니다. 세미콜론으로 나뉜 여러 문장은 문장마다 따로 정렬하고 사이에 빈 줄을 하나 넣어 구분합니다. 문장 끝의 세미콜론을 없애거나 없던 세미콜론을 붙이는 일은 하지 않습니다.

운영 데이터베이스에서 쓰는 쿼리를 붙여 넣어도 괜찮을까요?

괜찮습니다. 정렬과 압축은 모두 사용자의 브라우저 안에서만 일어나고 입력한 쿼리는 어디로도 전송되지 않습니다. 오류 메시지에도 몇 번째 줄 몇 번째 칸이 잘못됐는지만 담고 쿼리 내용은 담지 않습니다. 테이블 이름이나 조건에 들어간 실제 값이 밖으로 나갈 걱정 없이 운영 쿼리를 그대로 붙여 넣어 정리할 수 있습니다.

이 도구가 도움이 되었다면 공유해 주세요

계산 결과가 이상한가요? 알려 주세요.

계산 결과는 참고용이며 법적 효력이 없습니다.

다른 도구