SQL 포매터 | DB 방언별 쿼리 정리

포맷팅브라우저에서 실행(업로드 없음)

Standard SQL, PostgreSQL, MySQL, SQLite, SQL Server, Oracle PL/SQL, BigQuery 문법을 명시적으로 선택해 SQL을 로컬 포맷합니다. 2·4·8칸 들여쓰기와 키워드 원형 유지·대문자·소문자를 선택할 수 있습니다. 쿼리를 실행하거나 업로드하거나 의미를 검증하지 않으며, 한도 안에서 공백을 정리하고 안전한 줄·열 진단만 제공합니다.

다음에 할 작업

관련 작업 흐름을 이어가거나 이 작업 다음에 자주 사용하는 도구를 열어보세요.

이 도구 사용 방법

쿼리를 실제로 소비할 DB 문법을 선택하고 vendor 전용 구문이 없을 때만 Standard SQL을 사용합니다.

비밀번호, token, 개인정보, 고객 값, 독점 literal을 제거한 뒤 문서화된 한도 안의 SQL을 붙여넣거나 파일로 추가합니다.

키워드 원형 유지·대문자·소문자와 2·4·8칸 들여쓰기 중 필요한 설정을 선택합니다.

기본 수동 모드에서 포매터를 실행하고, 이미 깨끗하게 parse되는 작은 비민감 조각에만 라이브 모드를 사용합니다.

parse가 실패하면 원본 token을 임의로 지우지 말고 방언 선택과 저장 routine·사용자 지정 delimiter 등 미지원 문법을 확인합니다.

원본과 출력을 비교한 뒤 복사하거나 다운로드하고 실제 DB 도구 체인에서 동작·schema·권한·plan·테스트를 검증합니다.

이 도구를 써야 할 때

코드 리뷰용 쿼리 준비

join, 중첩 filter, CTE, grouping, ordering을 나눠 긴 한 줄을 읽지 않고 논리 절을 비교하게 합니다.

DB 전용 SQL 검사

복사한 PostgreSQL, MySQL, SQLite, T-SQL, PL/SQL query statement, BigQuery를 해당 문법으로 정리한 뒤 vendor console에서 디버깅합니다.

읽기 좋은 SQL fixture 작성

비밀이 없는 쿼리 fixture의 주석, parameter, literal, semicolon을 유지하며 문서와 테스트에 읽기 좋은 형태로 정규화합니다.

포맷 차이 재현

방언, 대소문자, 들여쓰기, 입력 바이트, 정확한 다운로드 출력을 기록해 포매터 버전이나 팀 설정 차이를 재현합니다.

DB 디버깅 절차 준비

DB 자체 parser, EXPLAIN, schema, 권한, 애플리케이션 테스트를 실행하기 전에 쿼리 구조를 논의하기 쉽게 만듭니다.

흔한 실수

방언을 Standard SQL로 둔 채 오류 판단

Standard SQL은 모든 DB 전용 확장을 해석하지 못합니다. PostgreSQL cast와 dollar parameter, SQL Server 대괄호 식별자와 T-SQL 변수처럼 입력에 맞는 문법을 먼저 선택한 뒤 parse 오류를 판단하세요.

포맷 결과를 DB 검증으로 간주

읽기 좋은 출력은 선택한 공백 포매터가 토큰을 받아들였다는 뜻뿐입니다. table 확인, type 검사, 권한, 실행 계획, 불완전한 문장의 실행 가능성을 증명하지 않습니다.

저장 routine을 일반 쿼리 포매터에 강제 입력

저장 procedure·function·trigger와 사용자 지정 DELIMITER는 의도적으로 지원하지 않습니다. 일반 포매터가 받아들일 때까지 문법을 지우지 말고 DB 제조사의 parser나 IDE를 사용하세요.

diff 없이 운영 SQL 교체

포맷은 주석과 공백 위치를 바꿀 수 있습니다. 원본과 의미 diff를 유지하고 애플리케이션이나 migration SQL을 교체하기 전에 비운영 환경에서 테스트와 EXPLAIN을 실행하세요.

민감한 운영 값 붙여넣기

로컬 처리는 의도적인 쿼리 업로드를 막지만 브라우저 확장, 클립보드 기록, 화면 캡처, 기기는 붙여넣은 값을 노출할 수 있습니다. 자격 증명, 개인정보, tenant ID, 독점 literal을 먼저 제거하세요.

예시

그룹 집계 Standard SQL 검토

join, filter, aggregation, ordering을 검토 가능한 절로 분리하면서 문자열 literal은 그대로 유지합니다.

입력
select c.id, c.name, count(o.id) as order_count from customers c left join orders o on o.customer_id = c.id and o.status = 'paid' where c.active = true group by c.id, c.name having count(o.id) > 2 order by order_count desc;
출력
SELECT
  c.id,
  c.name,
  count(o.id) AS order_count
FROM
  customers c
  LEFT JOIN orders o ON o.customer_id = c.id
  AND o.status = 'paid'
WHERE
  c.active = TRUE
GROUP BY
  c.id,
  c.name
HAVING
  count(o.id) > 2
ORDER BY
  order_count DESC;

PostgreSQL CTE와 cast 포맷

PostgreSQL을 선택하면 일반 문법이 정확히 해석하지 못할 수 있는 위치 parameter, cast 연산자, CTE 구조를 인식합니다.

입력
with recent as (select user_id, created_at from events where created_at >= $1::timestamptz) select user_id, max(created_at) as last_seen from recent group by user_id;
출력
WITH
  recent AS (
    SELECT
      user_id,
      created_at
    FROM
      events
    WHERE
      created_at >= $1::TIMESTAMPTZ
  )
SELECT
  user_id,
  max(created_at) AS last_seen
FROM
  recent
GROUP BY
  user_id;

T-SQL 식별자와 parameter 유지

SQL Server 모드는 대괄호 이름과 @status parameter를 유지하면서 TOP, WHERE, ORDER BY를 정리합니다.

입력
select top (10) [Order ID], [Customer Name] from [Order Details] where [Status] = @status order by [Order ID] desc;
출력
SELECT
  TOP (10) [Order ID],
  [Customer Name]
FROM
  [Order Details]
WHERE
  [Status] = @status
ORDER BY
  [Order ID] DESC;

MySQL 주석과 literal 보존

MySQL을 선택하면 줄 주석, backtick 식별자, JSON 경로, 문자열 안의 SQL 단어가 유지됩니다.

입력
-- keep this review note
select `order`, json_extract(payload, '$.id') as event_id from `events` where message = 'select from';
출력
-- keep this review note
SELECT
  `order`,
  json_extract(payload, '$.id') AS event_id
FROM
  `events`
WHERE
  message = 'select from';

명시적 안전 경계를 둔 방언 인식 공백 포맷

구현은 sql-formatter 15.8.2를 사용하고 명시적으로 선택한 방언 객체 하나를 tokenizer와 layout engine에 전달합니다. 입력으로부터 방언을 추측하지 않습니다.

Standard SQL, PostgreSQL, MySQL, SQLite, SQL Server Transact-SQL, Oracle PL/SQL, BigQuery의 일곱 모드를 제공합니다. 방언은 인식할 식별자, parameter, 연산자, 함수, 키워드를 결정합니다.

공백을 바꾸고 인식된 키워드와 data type을 원형 유지·대문자·소문자로 처리합니다. 함수와 식별자 대소문자는 보존하고 문자열, 인용 식별자, 주석, placeholder, 문장 semicolon을 source token으로 유지합니다.

포매터 parse는 DB 검증보다 좁습니다. 미지원 token을 안전한 줄·열로 거절할 수 있지만 불완전하거나 의미상 틀린 문장을 정리할 수도 있습니다. schema에 연결하거나 쿼리를 실행하거나 실행 계획을 만들지 않습니다.

parse 전에 UTF-8 1,000,000바이트, 20,000줄, 한 줄당 UTF-8 100,000바이트로 제한합니다. NUL, 맨 앞의 사용자 지정 DELIMITER, 맨 앞의 저장 routine·trigger 정의는 실패로 처리합니다.

처리·복사·SQL 파일 생성은 브라우저 안에서 끝납니다. telemetry에는 거친 작업 metadata와 고정 오류만 포함하며 쿼리 본문과 포맷 출력은 analytics event에 넣지 않습니다.

자주 묻는 질문

어떤 SQL 방언을 선택할 수 있나요?

Standard SQL, PostgreSQL, MySQL, SQLite, SQL Server Transact-SQL, Oracle PL/SQL, Google BigQuery를 선택할 수 있습니다. 입력으로부터 방언을 자동 추측하지 않으므로 대상 DB를 직접 지정해야 합니다.

포맷되면 유효한 쿼리라는 뜻인가요?

아닙니다. sql-formatter 15.8.2 기반의 공백 포매터이며 DB parser·compiler·schema checker·linter·query executor가 아닙니다. 일부 token과 delimiter 오류는 찾지만 받아들인 출력도 불완전하거나 서버 버전에 맞지 않거나 의미가 틀릴 수 있습니다.

포맷이 쿼리 동작을 바꿀 수 있나요?

지원 문법에서는 layout과 선택한 키워드·data type 대소문자만 바꾸고 식별자, literal, 주석은 보존합니다. 그래도 vendor 문법, 주석, 생성 SQL, 애플리케이션 경계에서 공백이 관찰될 수 있으므로 의미 diff와 실제 테스트가 필요합니다.

저장 procedure나 사용자 지정 delimiter도 가능한가요?

지원하지 않습니다. 저장 procedure·function·trigger와 사용자 지정 DELIMITER script는 이 도구의 계약 밖입니다. DB 제조사의 포매터·parser·IDE를 사용하고 격리된 테스트 DB에서 실행하세요.

SQL 입력 한도는 얼마인가요?

정확한 한도는 UTF-8 1,000,000바이트, 20,000줄, 한 줄당 UTF-8 100,000바이트입니다. 작성 중인 쿼리를 입력마다 다시 parse하지 않도록 수동 모드가 기본입니다. 더 큰 파일은 나누거나 버전을 고정한 CLI를 사용하세요.

SQL이 서버로 업로드되나요?

포맷·복사·다운로드는 현재 브라우저에서 이루어집니다. 운영 analytics는 선택 모드·방언·바이트 수·시간·고정 오류 분류를 기록할 수 있지만 SQL 본문은 기록하지 않습니다. 그래도 브라우저에 붙여넣기 전 비밀과 규제 데이터를 제거하세요.

포맷 후 무엇을 검증해야 하나요?

원본과 포매터 설정을 남기고 의미 diff를 비교하세요. 올바른 DB 버전·schema와 안전한 데이터에서 실행하고 성능이 중요하면 EXPLAIN을 검토하며 배포 전 애플리케이션·migration·권한·rollback 테스트를 수행해야 합니다.

이 도구를 검증한 방법

관리 및 검수 검토일

검증 방법: 이번 검증은 “그룹 query를 포맷한 뒤 검토 schema에서 검증”의 정확한 입력과 SQL 포매터를 짝지어 수행했습니다. “대상 DB, 버전, 실행 문맥을 확인합니다” 단계를 거쳐 “명시적이고 재현 가능한 설정으로 수동 포맷합니다” 이후 결과를 캡처해 예시와 비교했습니다. 명시적인 경계 질문은 “vendor 문법에 일반 방언 사용”, “포매터 통과를 위해 문법 제거”였습니다.

기대 결과: 포맷 결과는 JOIN 조건, active 필터, GROUP BY와 alias 내림차순을 각각 검토 가능한 절로 드러내면서 문자열 literal과 query 구조는 바꾸지 않았습니다.

검증한 작업 가이드 열기

관련 작업 가이드

도구를 열기 전에 자주 쓰는 작업 흐름과 예시를 확인하세요.

관련 도구

관리 중인 다른 작업 흐름을 이어서 사용해 보세요

모든 도구 둘러보기