SQL 포맷터

SQL 포맷터

한 줄로 이어진 쿼리에서 조인 조건을 찾기 어려우신가요? 데이터베이스에 맞는 방언을 고르고 들여쓰기를 정리해 쿼리 구조를 확인하세요.

쿼리 편집기브라우저에서 포맷팅 · SQL 실행 없음
예제 불러오기
213 / 50,000자

02 정렬 결과

원본 쿼리는 그대로 유지됩니다

긴 쿼리를 읽기 쉽게 정렬하기

로그나 ORM에서 가져온 SQL은 줄바꿈이 없어 읽기 어려울 수 있습니다. SQL 포맷터는 필드 목록과 JOIN, WHERE 절을 나누고 중첩 쿼리에 들여쓰기를 적용합니다. 여기서 SQL 정렬은 코드 서식을 정리한다는 뜻이며, 조회 결과의 순서를 바꾸지는 않습니다.

쿼리를 붙여 넣고 방언을 선택하세요. 들여쓰기는 공백 2칸, 4칸 또는 탭으로 설정하고 키워드 표기를 고를 수 있습니다. 정렬 결과는 원본과 별도로 표시됩니다. 입력이나 옵션을 바꾸면 이전 결과가 지워지므로 다시 정렬한 뒤 복사하세요.

쿼리를 작성한 데이터베이스에 맞추기

표준 SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server(T-SQL), Oracle SQL, BigQuery, Snowflake를 선택할 수 있습니다. 백틱이나 대괄호로 감싼 식별자 등 문법 차이를 인식하려면 원본 쿼리의 방언을 지정해야 합니다.

방언 선택은 데이터베이스 마이그레이션 기능이 아닙니다. 다른 데이터베이스의 함수로 바꾸거나 스키마를 변환하지 않습니다. Oracle SQL 옵션도 저장 프로시저 전체를 지원한다는 의미는 아닙니다.

검토를 돕는 서식과 실제 검증의 차이

CTE와 서브쿼리의 깊이를 구분하면 조건을 따라가기 쉽습니다. WHEREHAVING을 별도 줄로 표시하면 행 필터와 집계 필터를 비교하는 데 도움이 됩니다. 다만 정렬이 완료되어도 테이블, 컬럼, 타입이나 실행 계획을 검사한 것은 아닙니다.

키워드 대소문자 옵션은 인식된 키워드에만 적용합니다. 식별자, 함수명, 데이터 타입의 대소문자는 유지하며 매개변수 값을 채우지 않습니다. 주석은 보존하지만 위치와 공백이 달라질 수 있으므로 실제 환경에서 사용할 결과를 검토하세요.

SQL 정렬 예제

가상 데이터로 만든 실제 정렬 결과입니다. 키워드는 대문자, 들여쓰기는 공백 2칸입니다. 도구에서 예제를 불러오면 해당 방언도 선택됩니다.

JOIN과 집계

결제된 주문을 고객별로 합산합니다. 조인 조건과 행 필터, 집계 필터의 위치를 비교해 보세요.

SELECT
  c.id,
  c.name,
  count(o.id) AS order_count,
  sum(o.total) AS revenue
FROM
  customers c
  JOIN orders o ON o.customer_id = c.id
WHERE
  o.status = 'paid'
GROUP BY
  c.id,
  c.name
HAVING
  sum(o.total) > 1000
ORDER BY
  revenue DESC;
포맷터로 돌아가기

CTE와 윈도 함수

PostgreSQL의 CTE와 ROW_NUMBER로 고객별 주문 순위를 매깁니다. 중첩된 SELECT 구조를 확인할 수 있습니다.

WITH
  ranked_orders AS (
    SELECT
      id,
      customer_id,
      total,
      row_number() OVER (
        PARTITION BY
          customer_id
        ORDER BY
          created_at DESC
      ) AS position
    FROM
      orders
    WHERE
      created_at >= date '2024-01-01'
  )
SELECT
  customer_id,
  id,
  total
FROM
  ranked_orders
WHERE
  position = 1
ORDER BY
  customer_id;
포맷터로 돌아가기

INSERT와 주석

MySQL 백틱 식별자와 주석, 세미콜론이 들어 있는 문자열을 사용합니다. 문자열 속 기호는 데이터로 남습니다.

-- Fictional seed data
INSERT INTO
  `products` (`sku`, `name`, `price`)
VALUES
  ('DEMO-01', 'Desk lamp; warm light', 29.95),
  ('DEMO-02', 'Reader''s notebook', 8.50);
포맷터로 돌아가기

자주 묻는 질문

정렬 결과는 어떻게 저장하나요?

복사 버튼을 누르거나 formatted.sql 파일로 내려받을 수 있습니다. Ctrl+Enter 또는 macOS의 Command+Enter로도 정렬을 실행할 수 있습니다.

SQL이 서버로 전송되나요?

포맷팅은 브라우저의 Web Worker에서 처리합니다. 쿼리를 포맷팅 API로 보내거나 데이터베이스에 연결하지 않으며, 입력을 영구 저장하거나 URL에 넣지 않습니다.

쿼리 오류를 고치거나 속도를 높여 주나요?

아니요. 줄바꿈과 들여쓰기, 키워드 표기를 정리합니다. 테이블 존재 여부, 권한, 실행 계획은 확인하지 않으므로 검증과 성능 분석에는 데이터베이스 도구를 사용하세요.

여러 SQL 문을 한 번에 넣어도 되나요?

일반 SQL 문은 세미콜론으로 구분해 입력할 수 있습니다. 인식된 문자열 안의 세미콜론은 데이터로 처리합니다. 사용자 지정 구분자와 저장 프로시저, 클라이언트 전용 스크립트는 지원 범위 밖입니다.

포맷팅 오류가 나면 어떻게 하나요?

선택한 방언과 닫히지 않은 따옴표·괄호부터 확인하세요. 템플릿 구문이나 애플리케이션 코드 보간은 인식하지 못할 수 있습니다. 입력 한도는 50,000자이며 10초가 지나면 작업이 중단됩니다. 긴 스크립트는 나누어 주세요.

주석이나 매개변수가 바뀌나요?

지원되는 방언의 플레이스홀더에 값을 대입하지 않으며 주석을 유지합니다. 다만 주석 서식은 달라질 수 있습니다. 포맷팅을 비활성화하는 주석이 있는 구간은 원래 서식으로 남을 수 있습니다.

SQL Formatter · GitHub

포맷터로 돌아가기