본문으로 건너뛰기

SQL Formatter

SQL 쿼리를 읽기 쉽게 포맷팅하고 압축하는 도구입니다. 복잡한 쿼리를 정리하고 팀 내 SQL 코딩 스타일을 통일하세요!

Examples:
Formatted SQL will appear here...

💡 Tips

  • 복잡한 쿼리를 읽기 쉽게 포맷팅하세요
  • 팀 내 SQL 코딩 스타일을 통일하세요
  • Compress 기능으로 쿼리를 한 줄로 만들 수 있습니다
  • 여러 SQL 문을 한 번에 포맷팅할 수 있습니다

주요 기능​

1. SQL 포맷팅​

  • 키워드, 컬럼, 테이블 이름을 적절히 들여쓰기
  • 가독성 향상을 위한 줄바꿈
  • 일관된 코딩 스타일 적용

2. 다양한 SQL 방언 지원​

  • Standard SQL
  • MySQL
  • PostgreSQL
  • MariaDB
  • PL/SQL (Oracle)
  • T-SQL (SQL Server)
  • SQLite

3. 커스터마이징 옵션​

  • 들여쓰기 스타일 (2 spaces, 4 spaces, Tab)
  • 키워드 대문자화
  • 쿼리 간 줄 간격 조정

4. 압축 기능​

  • 불필요한 공백 제거
  • 한 줄로 압축

사용 예시​

포맷팅 전​

SELECT u.id,u.name,u.email,o.order_id,o.total FROM users u LEFT JOIN orders o ON u.id=o.user_id WHERE u.active=1 AND o.total>100 ORDER BY o.total DESC LIMIT 10;

포맷팅 후​

SELECT
u.id,
u.name,
u.email,
o.order_id,
o.total
FROM
users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE
u.active = 1
AND o.total > 100
ORDER BY
o.total DESC
LIMIT
10;

활용 사례​

1. 코드 리뷰​

-- 복잡한 쿼리를 포맷팅하여 리뷰하기 쉽게
WITH monthly_sales AS (
SELECT
DATE_TRUNC('month', order_date) AS month,
SUM(total) AS revenue
FROM
orders
GROUP BY
DATE_TRUNC('month', order_date)
)
SELECT
month,
revenue,
LAG(revenue) OVER (
ORDER BY
month
) AS prev_month_revenue
FROM
monthly_sales;

2. 문서화​

-- README나 문서에 포함할 SQL을 깔끔하게 정리
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_users_email ON users (email);

3. 디버깅​

-- 로그에서 복사한 한 줄 쿼리를 읽기 쉽게
SELECT
p.id,
p.name,
c.name AS category,
COUNT(o.id) AS order_count
FROM
products p
INNER JOIN categories c ON p.category_id = c.id
LEFT JOIN order_items o ON p.id = o.product_id
WHERE
p.active = TRUE
GROUP BY
p.id,
p.name,
c.name
HAVING
COUNT(o.id) > 10;

4. 복잡한 CTE (Common Table Expression)​

WITH RECURSIVE subordinates AS (
SELECT
employee_id,
manager_id,
full_name,
1 AS level
FROM
employees
WHERE
manager_id IS NULL
UNION ALL
SELECT
e.employee_id,
e.manager_id,
e.full_name,
s.level + 1
FROM
employees e
INNER JOIN subordinates s ON s.employee_id = e.manager_id
)
SELECT
employee_id,
full_name,
level
FROM
subordinates
ORDER BY
level,
full_name;

압축 기능 활용​

언제 사용하나요?​

  1. 로그 분석: 여러 줄 쿼리를 한 줄로 만들어 grep 검색
  2. URL 파라미터: 쿼리를 URL에 포함시킬 때
  3. 공간 절약: 코드에서 간단한 쿼리를 인라인으로 사용

예시​

-- 압축 전 (여러 줄)
SELECT
id,
name
FROM
users
WHERE
active = TRUE;

-- 압축 후 (한 줄)
SELECT id,name FROM users WHERE active=TRUE;

베스트 프랙티스​

1. 일관된 스타일​

팀 내에서 동일한 포맷 설정 사용:

  • 들여쓰기: 2 spaces
  • 키워드: UPPERCASE
  • 줄 간격: 1

2. 복잡한 쿼리는 CTE 사용​

-- Good: CTE로 분리
WITH active_users AS (
SELECT * FROM users WHERE active = TRUE
),
recent_orders AS (
SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT
u.*,
COUNT(o.id) AS order_count
FROM
active_users u
LEFT JOIN recent_orders o ON u.id = o.user_id
GROUP BY
u.id;

3. 서브쿼리 대신 JOIN​

-- Bad: 서브쿼리
SELECT
*
FROM
orders
WHERE
user_id IN (
SELECT
id
FROM
users
WHERE
active = TRUE
);

-- Good: JOIN 사용
SELECT
o.*
FROM
orders o
INNER JOIN users u ON o.user_id = u.id
WHERE
u.active = TRUE;

4. 명시적인 컬럼 나열​

-- Bad: SELECT *
SELECT * FROM users;

-- Good: 명시적 컬럼
SELECT
id,
name,
email,
created_at
FROM
users;

지원하는 SQL 문법​

DDL (Data Definition Language)​

CREATE TABLE, ALTER TABLE, DROP TABLE
CREATE INDEX, DROP INDEX
CREATE VIEW, DROP VIEW

DML (Data Manipulation Language)​

SELECT, INSERT, UPDATE, DELETE
MERGE (일부 방언)

고급 기능​

-- CTE (Common Table Expression)
WITH cte_name AS (...)

-- Window Functions
ROW_NUMBER(), RANK(), LAG(), LEAD()

-- Joins
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN

-- Subqueries
WHERE id IN (SELECT ...), FROM (SELECT ...) AS subquery

팁과 트릭​

1. 긴 쿼리는 단계적으로 작성​

-- 1단계: 기본 SELECT
SELECT * FROM users;

-- 2단계: JOIN 추가
SELECT * FROM users u
JOIN orders o ON u.id = o.user_id;

-- 3단계: WHERE 조건
SELECT * FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.active = TRUE;

-- 4단계: 포맷팅

2. 주석 활용​

-- 사용자별 주문 통계 조회
SELECT
u.id,
u.name,
COUNT(o.id) AS total_orders, -- 총 주문 수
SUM(o.total) AS total_revenue -- 총 매출
FROM
users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY
u.id,
u.name;

3. 테이블 별칭 일관성​

-- 첫 글자 사용
FROM users u, orders o

-- 의미있는 약어
FROM users usr, orders ord

주의사항​

  • 포맷터는 SQL 문법을 검증하지 않습니다
  • 방언별로 약간의 차이가 있을 수 있습니다
  • 압축 기능은 가독성을 희생합니다 (필요한 경우에만 사용)
  • 주석은 포맷팅 시 유지됩니다

관련 도구​

키보드 단축키​

많은 SQL 에디터들이 포맷팅 단축키를 제공합니다:

  • VS Code: Shift + Alt + F
  • JetBrains: Ctrl + Alt + L
  • DBeaver: Ctrl + Shift + F