SQL 포맷터 & 검증기 - 온라인에서 SQL 쿼리 무료 포맷
SQL 포맷터 및 검증기는 SQL 쿼리의 키워드를 대문자로 바꾸고 줄바꿈을 추가해 가독성을 높이는 무료 도구다. 닫히지 않은 따옴표나 ON 조건이 빠진 JOIN 같은 구문 오류도 찾아내며, MySQL, PostgreSQL, SQL Server, Oracle 문법에서 작동한다.
SQL 포맷터 및 검증기
자동 들여쓰기, 키워드 대문자화 및 구문 오류 감지로 SQL 쿼리를 포맷하고 검증합니다.
문서화
SQL 포매터와 검증기란?
SQL 포매터는 일관된 간격, 줄 바꿈, 대문자 키워드를 사용하도록 SQL 쿼리를 다시 작성해 읽기 쉽게 만드는 도구입니다. SQL 검증기는 데이터베이스에 연결하지 않고 닫히지 않은 따옴표나 누락된 괄호 같은 구조적 오류가 있는지 같은 쿼리를 확인합니다. 이 도구는 두 기능을 모두 수행합니다. 모든 작업이 브라우저에서 실행되므로 쿼리 텍스트가 서버로 전송되지 않습니다.
SQL 쿼리를 포맷하는 방법
- 입력 상자에 SQL 쿼리를 붙여 넣거나 입력합니다.
- 포맷된 버전이 누를 버튼 없이 오른쪽에 자동으로 표시됩니다.
- 검증 오류가 있으면 출력 아래 목록에 표시됩니다.
- 복사 버튼을 누르면 포맷된 쿼리가 클립보드로 전송됩니다.
SQL 포맷 규칙
키워드 대문자화
포매터는 문자열이나 따옴표로 묶인 식별자 바깥에 나타나는 고정된 SQL 키워드 목록을 대문자로 바꿉니다. 이 목록에는 주요 절(SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), 조인 관련 단어(JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), 집합 연산자(UNION, INTERSECT, EXCEPT), 문 유형(INSERT, UPDATE, DELETE, CREATE, ALTER, DROP), 일반 연산자와 연결어(AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET 및 몇 가지가 포함됩니다.
키워드처럼 보이지만 입력한 그대로 두는 단어도 있습니다. COUNT, SUM, AVG 같은 집계 함수는 목록에 없으므로, 소문자로 입력한 count(*)는 소문자로 유지됩니다. 정렬 방향을 나타내는 ASC와 DESC, 그리고 단독으로 사용된 리터럴 TRUE, FALSE, NULL도 변경하지 않습니다. 문자열 리터럴('...'), 따옴표로 묶인 식별자("...", `...` 또는 [...]), 주석 내부의 텍스트는 어떤 내용이 들어 있어도 절대 변경하지 않습니다.
줄 바꿈과 들여쓰기
각 주요 절은 왼쪽 여백에서 새 줄로 시작합니다. 대상은 SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET입니다. 조인은 하나의 단위로 새 줄에서 시작하므로 LEFT JOIN, FULL OUTER JOIN, CROSS JOIN은 두 줄로 나뉘지 않고 함께 유지됩니다. UNION과 UNION ALL의 위아래에는 빈 줄이 생겨 결합되는 쿼리를 구분합니다. CASE와 END은 새 줄에서 시작하고, WHEN, THEN, ELSE는 들여쓴 줄에서 시작합니다. 모든 쉼표도 새 줄을 시작하므로 SELECT 또는 GROUP BY의 열 목록은 열마다 한 줄씩 배치됩니다.
들여쓰기는 괄호 안에서만 나타납니다. 하위 쿼리나 그룹화된 표현식 내부의 내용은 중첩 수준마다 공백 두 칸씩 들여씁니다. 일상적으로 사용하는 쿼리의 대부분처럼 괄호가 없는 쿼리는 모든 절이 왼쪽 여백에 맞춰지고 들여쓰기가 전혀 없는 형태로 포맷됩니다.
예시: 포맷 전과 후
이전:
1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2이후:
1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9모든 키워드는 대문자로 바뀌고 모든 절과 열은 각자의 줄에 놓입니다. 쿼리에 괄호가 없으므로 들여쓴 줄도 없습니다.
괄호가 있으면 달라집니다. 더 큰 쿼리의 일부인 (select count(*) from employees e where e.department_id = d.id)를 포맷하면 내부의 SELECT, FROM, WHERE가 공백 두 칸만큼 들여써지고, count는 목록에 있는 키워드가 아니라 함수 이름이므로 소문자로 유지됩니다.
SQL 검증기가 확인하는 항목
검증기는 데이터베이스에 연결하지 않고 다음과 같은 구조적 문제를 찾습니다.
- 닫히지 않은 따옴표, 대괄호 및 주석. 열렸지만 닫히지 않은 작은따옴표(
'), 큰따옴표("), 백틱(`), 대괄호([) 또는 블록 주석(/*)입니다. - 짝이 맞지 않는 괄호. 문자열과 주석 바깥에 있는
(와)의 개수가 일치해야 합니다. - 괄호가 없는 하위 쿼리.
SELECT * FROM SELECT id FROM t처럼 어떤 괄호 바깥에 있는 두 번째SELECT입니다. 집합 연산자(UNION,UNION ALL,INTERSECT,EXCEPT)로 연결된 두 쿼리는 피연산자에 괄호가 필요하지 않으므로 오류로 표시하지 않습니다. 세미콜론으로 구분된 두 문장도 마찬가지입니다. WHERE가AND또는OR로 시작하는 경우. 앞에 아무것도 없는 연결어가 오는 경우입니다.- 일치하는 조건이 없는
JOIN.JOIN에는ON또는USING절이 필요합니다.CROSS JOIN과NATURAL JOIN은 해당 절을 사용하지 않으므로 제외됩니다. - 비어 있는
GROUP BY또는ORDER BY. 쿼리 끝에서 뒤에 열이 없는 절 키워드입니다. - 완전하지 않은
WHERE조건. 값 없이 끝나는WHERE status =같은 미완성 비교식이나, 쿼리 끝에서 뒤에 아무것도 없는 단독WHERE입니다. SELECT에FROM이 없는 경우. 선택 목록이 일반 열 이름으로만 이루어진 경우에만 오류로 표시됩니다. 표현식, 함수 호출, 리터럴 또는 괄호 없이 작성한 값 함수인CURRENT_DATE는 단독으로 유효하므로SELECT 1 + 1과SELECT CURRENT_DATE는 오류로 표시되지 않습니다.- 절 순서. 두 가지를 확인합니다.
GROUP BY가WHERE보다 앞에 오면 안 되고,ORDER BY가GROUP BY보다 앞에 오면 안 됩니다. 하위 쿼리 내부는 무시하고 쿼리 최상위 수준에서 확인합니다.
확인하지 않는 항목
검증기는 테이블이나 열이 실제로 존재하는지, 조인된 열의 자료형이 호환되는지, 쿼리 성능이 어떠한지는 알 수 없습니다. 실제 데이터베이스가 적용하는 모든 규칙도 오류로 표시하지 않습니다. 두 가지 예를 들면, GROUP BY 없이 사용한 HAVING은 전체 결과를 암묵적인 하나의 그룹으로 묶는 것이 유효한 SQL이므로 허용되며, 검증기는 오류를 발생시키지 않습니다. 마찬가지로 SELECT 목록의 모든 비집계 열이 GROUP BY에도 포함되는지는 확인하지 않습니다. 이 규칙은 대부분의 데이터베이스에 존재하지만 이 도구는 검사하지 않습니다. 마지막 세미콜론이 없어도 오류로 표시하지 않는데, 세미콜론은 단일 쿼리의 일부가 아니라 문 구분자이기 때문입니다.
예시: 검증기가 발견하는 오류
1SELECT id FROM orders
2JOIN users
3WHERE status =
4이 쿼리에서는 두 가지 오류가 발생합니다.
- "하나 이상의 JOIN 문에 ON 조건이 없습니다." —
JOIN users에ON또는USING절이 없습니다. - "WHERE 조건이 완전하지 않습니다." —
status =뒤에 등호 오른쪽 값이 없습니다.
자주 묻는 질문
이 도구는 MySQL, PostgreSQL, SQL Server, Oracle에서 작동하나요?
이러한 데이터베이스에서 공통으로 사용하는 핵심 SQL 구문인 SELECT, JOIN, WHERE, GROUP BY 및 이와 유사한 절을 처리합니다. PostgreSQL 배열 리터럴이나 T-SQL 프로시저 블록 같은 데이터베이스별 구문도 포매터를 중단시키지는 않지만, 별도로 처리되지 않을 수 있습니다.
SQL 쿼리가 서버로 전송되나요?
아니요. 포맷과 검증은 모두 브라우저에서 실행됩니다. 쿼리 텍스트는 어디에도 전송되지 않습니다.
COUNT, SUM, AVG 같은 함수 이름도 대문자로 바꾸나요?
아니요. 절 키워드, 조인 관련 단어, 고정된 연산자 목록만 대문자로 바뀝니다. count, sum, avg 같은 함수 이름과 asc, desc, true, false, null이라는 단어는 입력한 그대로 유지됩니다.
검증기는 GROUP BY 없이 사용한 HAVING을 오류로 표시하나요?
아니요. GROUP BY가 없는 HAVING 절은 전체 결과를 하나의 그룹으로 묶으며, ISO/IEC 9075 표준에 따른 유효한 SQL입니다. 따라서 검증기는 이를 오류로 처리하지 않습니다.
검증기가 모든 SQL 오류를 찾을 수 있나요?
아니요. 괄호와 따옴표, 일부 절 순서 규칙, 조건이 없는 JOIN 같은 몇 가지 일반적인 논리적 누락 등 구조를 확인합니다. 테이블이나 열 이름, 자료형, 쿼리 성능은 확인하지 않습니다. 쿼리가 올바르게 실행되는지 확인하려면 실제 데이터베이스 연결이 여전히 필요합니다.
포맷이 쿼리 실행 방식도 바꾸나요?
아니요. 포맷은 공백과 따옴표로 묶이지 않은 키워드의 대소문자만 변경합니다. 문자열, 따옴표로 묶인 식별자 또는 주석 내부의 내용은 변경하지 않고 그대로 복사하므로 쿼리의 의미는 이전과 정확히 같습니다.