본문으로 건너뛰기

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