사용 방법
- SQL 문을 하나 이상 붙여넣거나 “예시 사용해 보기”를 누르세요.
- 키워드, 인용 방식, 연산자를 올바르게 인식할 수 있도록 데이터베이스 방언을 선택하세요.
- 키워드 대소문자와 들여쓰기를 설정하세요. 입력하는 동안 오른쪽에 서식이 지정된 쿼리가 표시됩니다.
- 한 줄로 된 버전을 만들려면 압축을 누른 다음 결과를 복사하거나 .sql 파일로 다운로드하세요.
작동 방식
SQL 서식 지정에는 오픈소스 sql-formatter 라이브러리를 사용합니다. 선택한 방언의 규칙에 따라 쿼리를 토큰으로 나누고, 주요 절(SELECT, FROM, JOIN, WHERE, GROUP BY, ORDER BY…)을 각각 별도 줄에 배치한 뒤 열 목록과 조건에 들여쓰기를 적용하고 키워드의 대소문자를 설정에 맞춥니다. 공백과 요청한 경우 키워드의 대소문자만 변경하며, 식별자와 문자열 리터럴, 주석은 그대로 유지합니다. 올바른 방언을 선택하는 것이 중요합니다. 예를 들어 MySQL에서는 백틱, SQL Server에서는 대괄호로 이름을 묶고, PostgreSQL에서는 $$로 함수 본문을 시작합니다.
이 서식 지정 도구는 레이아웃을 정리할 뿐 데이터베이스 기능을 제공하지 않습니다. 테이블이나 열의 존재 여부를 확인하거나 전체 문법을 검증하지 않으므로, 잘못된 SQL도 오류 없이 서식이 지정될 수 있습니다. 입력 내용을 해석할 수 없는 경우(예: 닫히지 않은 괄호)에는 처리가 멈춘 줄과 열을 표시합니다.
압축은 다른 방식으로 작동합니다. 모든 토큰을 유지하면서 연속된 공백을 각각 공백 하나로 줄이고 주석을 제거합니다(동작을 바꿀 수 있는 /*+ INDEX(t) */ 같은 최적화 힌트와 MySQL /*! … */ 주석은 유지됩니다). 문자열, 따옴표로 묶인 식별자, 달러 인용 본문은 변경 없이 복사합니다. 따옴표나 주석이 닫히지 않으면 추측해 처리하지 않고 오류와 함께 압축을 중단합니다.
예시
로그에 있는 쿼리 읽기
느린 쿼리 로그에 400자짜리 한 줄이 있습니다. MySQL 방언과 대문자 키워드를 선택하면 JOIN과 WHERE 조건이 각각 별도 줄에 표시되는 읽기 쉬운 블록으로 바뀌어, 누락된 인덱스를 쉽게 찾을 수 있습니다.
코드 리뷰를 위한 일관된 스타일
팀에서 커밋하기 전에 모든 마이그레이션에 PostgreSQL 방언, 소문자 키워드, 4칸 들여쓰기를 적용합니다. 따라서 diff에는 실제 변경 사항만 표시됩니다.
코드에 SQL 삽입하기
압축 기능은 주석이 포함된 여러 줄짜리 보고서 쿼리를 SELECT id, name FROM users WHERE active = 1 ORDER BY name 같은 한 줄로 바꿔 스크립트의 문자열에 바로 붙여넣을 수 있게 합니다.
자주 묻는 질문
어떤 데이터베이스를 지원하나요?
Standard SQL, MySQL, MariaDB, PostgreSQL, SQLite, SQL Server (T-SQL), Oracle PL/SQL, BigQuery, Snowflake, Redshift, Spark SQL, Hive, Trino/Presto, DuckDB, IBM Db2, SingleStoreDB, TiDB, Couchbase N1QL을 지원합니다.
서식을 지정하면 쿼리의 동작이 바뀌나요?
그렇지 않습니다. 공백과 선택한 경우 키워드의 대소문자만 변경됩니다. SQL에서는 키워드의 대소문자가 동작에 영향을 주지 않습니다. 그래도 특히 해당 방언의 특수 기능을 사용하는 경우에는 운영 데이터에 쿼리를 실행하기 전에 결과를 검토하세요.
“서식을 지정할 수 없습니다”라는 메시지가 표시된 이유는 무엇인가요?
토크나이저가 배치할 수 없는 부분을 만났습니다. 닫히지 않은 괄호나 따옴표, 또는 다른 방언의 문법인 경우가 많습니다. 메시지에 표시된 줄과 열을 확인하고 선택한 방언이 데이터베이스와 일치하는지 확인하세요.
SQL을 검증하나요?
아니요. 데이터베이스에 연결되지 않으며 스키마 정보도 알지 못합니다. 쿼리 서식이 지정되어도 실행 시 실패할 수 있습니다.
개인정보 보호
SQL은 브라우저에서 JavaScript로 서식이 지정됩니다. 업로드되거나 저장되거나 분석 데이터에 포함되지 않으며, 도구는 데이터베이스에 연결하지 않습니다.