SQL 포맷터

SQL 포맷터는 주요 절을 한 줄에 하나씩 둡니다. 예를 들어 "select a from t where x=1"은 "SELECT a", "FROM t", "WHERE x = 1" 이렇게 3줄이 됩니다.

문제가 해결됐나요?
Google 선호 출처로 추가

사용 방법

  1. 입력 칸에 SQL을 붙여 넣습니다. 결과를 볼 수 있게 예시 쿼리가 들어 있습니다.
  2. 키워드를 대문자, 소문자, 입력한 그대로 중 무엇으로 할지 고르고, 들여쓰기를 공백 2칸, 4칸, 탭 중에서 고릅니다.
  3. 결과 칸에서 정리된 쿼리를 복사합니다. 입력하는 대로 바뀌고, 세미콜론으로 나눈 여러 문장도 한꺼번에 정리됩니다.

계산 방법

SQL을 단어, 숫자, 문자열, 따옴표로 감싼 식별자, 주석, 연산자, 괄호 같은 토큰으로 나눕니다. 따옴표 안의 글자와 주석은 절대 바꾸지 않습니다.

SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, UNION, INSERT INTO, VALUES, UPDATE, SET과 모든 JOIN은 새 줄에서 시작합니다. SELECT나 SET 목록에 항목이 둘 이상이면 항목마다 들여 쓴 줄을 하나씩 줍니다. WHERE, HAVING, ON 안의 AND와 OR은 절 아래로 한 단계 들여 씁니다. 단, BETWEEN x AND y의 AND는 그대로 둡니다.

서브쿼리를 여는 괄호에서 들여쓰기 블록이 시작되고, 닫는 괄호에서 원래 깊이로 돌아갑니다. CASE 식은 WHEN과 ELSE를 한 줄씩 둡니다. 함수 호출은 괄호를 이름에 붙여 두므로 COUNT(*)는 그대로 유지됩니다.

키워드와 자주 쓰는 함수 이름은 고른 대소문자로 바꿉니다. 테이블과 컬럼 이름은 쓴 그대로 두지만, key나 index처럼 키워드와 이름이 같은 컬럼은 함께 바뀝니다. 문법이 맞는지는 검사하지 않고 특정 방언을 따르지도 않으므로, 흔치 않은 문법은 띄어쓰기가 조금 다를 수 있습니다.

줄이 바뀌는 곳

요소배치
SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT현재 들여쓰기에서 새 줄
JOIN, LEFT JOIN, INNER JOIN 등 조인새 줄, ON 뒤 조건은 같은 줄
WHERE, HAVING, ON 안의 AND, OR새 줄, 한 단계 더 들여쓰기
항목이 2개 이상인 SELECT 목록항목마다 한 줄
괄호 안 서브쿼리들여 쓴 블록
CASE ... WHEN ... ENDWHEN마다 한 줄
세미콜론다음 문장 앞에 빈 줄

자주 묻는 질문

정리하면 쿼리 동작이 바뀌나요?

아니요. 공백, 줄바꿈, 키워드 대소문자만 바뀝니다. 문자열, 주석, 따옴표로 감싼 식별자는 그대로입니다. 중요한 쿼리라면 정리한 뒤 한 번 실행해 확인하세요.

어떤 데이터베이스를 지원하나요?

특정 방언에 묶여 있지 않습니다. 표준 SQL, MySQL, PostgreSQL, SQLite 스타일 쿼리를 다루며 백틱, 큰따옴표 이름, ::캐스트, $1이나 :name 자리표시자도 처리합니다. 저장 프로시저 본문처럼 제품마다 다른 블록은 깔끔하게 정리되지 않을 수 있습니다.

SELECT 항목이 하나면 왜 한 줄에 있나요?

항목이 하나뿐이면 줄을 바꿔도 읽기 편해지지 않기 때문입니다. 두 개 이상이면 항목마다 한 줄씩 둡니다.

닫히지 않았다는 경고는 무슨 뜻인가요?

따옴표나 블록 주석을 열고 닫지 않았다는 뜻입니다. 그 뒤의 모든 글자가 문자열이나 주석의 일부로 처리되니 빠진 따옴표가 없는지 확인하세요.

SQL이 어딘가로 전송되나요?

아니요. 정리는 브라우저에서 이뤄지므로 테이블 이름이나 데이터가 담긴 쿼리도 기기 밖으로 나가지 않습니다.