Skip to content

SQL Style Guide

westhyena edited this page Aug 12, 2021 · 20 revisions

version

v0.0.1

Released 2021.08.05

Basic

  • 들여쓰기는 4칸으로 한다.
  • SQL 구문, 내장 함수, 예약어 등은 대문자로 작성한다.
    • SELECT, FROM, WHERE, AS, COUNT, SUM 등
  • 테이블, 컬럼, 변수 이름은 snake_case로 작성한다.
    • 외부 제공 테이블의 경우는 예외가 있을 수 있음
  • Subquery는 지양한다.
    • 되도록이면 Common Table Expression(CTE) 사용

Format

  • SELECT, FROM, JOIN 등은 한 줄에 단독으로 존재한다.
  • JOIN과 ON은 FROM절 안으로 들여쓴다.
    • SELECT 구문이 실행되는 대상 테이블이 FROM + JOIN 전체 대상임.
  • 한 줄에는 하나의 컬럼, 하나의 조건만 들어가게 작성한다.
    • 쉼표(,)는 줄의 마지막에 쓴다.
    • AND, OR, +, - 등의 연산자는 줄의 앞에 쓴다.
-- Do
SELECT
    a.subject_id,
    a.hadm_id
FROM
    mimiciii.admissions a
    LEFT JOIN
        mimiciii.patients p
    ON
        a.subject_id = p.subject_id
    LEFT JOIN
        mimiciii.prescriptions d
    ON
        a.subject_id = d.subject_id
        AND a.hadm_id = d.hadm_id
WHERE
    a.admittime + INTERVAL '1 day' > d.startdate
    AND gender = 'F'
    AND dob > '2100-01-01'

-- Don't (줄이 쉼표로 시작)
SELECT
    subject_id
    , a.hadm_id
FROM
    mimiciii.patients p
WHERE
    gender = 'F'
    AND dob > '2100-01-01'

-- Don't (줄이 AND로 끝남)
SELECT
    subject_id,
    a.hadm_id
FROM
    mimiciii.patients p
WHERE
    gender = 'F' AND
    dob > '2100-01-01'

Case문 예시

SELECT
    CASE 
        WHEN a = 1 THEN 1
        WHEN a = 2 THEN 2
        ELSE 123
    END AS some_col
FROM
    some_table

Join

  • Join 타입을 명시한다.
    • Default Join은 DBMS에 따라 달라질 수 있기 때문
  • Implicit Join(암시적 조인을 사용하지 않는다)
-- Do
SELECT
    *
FROM
    table_a
    INNER JOIN --join 타입 명시
        table_b
    ON
        table_a.id = table_b.id

-- Don't (Implicit Join 사용 'from a, b')
SELECT
    *
FROM
    table_a,
    table_b
WHERE
    table_a.id = table_b.id

-- Don't (JOIN 타입 명시x)
SELECT
    *
FROM
    table_a
    JOIN
        table_b
    ON
        table_a.id = table_b.id

괄호

  • 괄호 안의 내용이 여러 줄일 때
    • 여는 괄호 후엔 줄 바꿈
    • 닫히는 괄호 전에 줄 바꿈
    • 괄호 안의 내용은 한 단계 들여씀
-- Do
WITH sample AS (
    SELECT
        client_id
    FROM
        main_summary
    WHERE
        sample_id =42
),
sample2 AS (
    SELECT
        client_id
    FROM
        main_summary
    WHERE
        sample_id = 43
)

-- Don't (닫히는 괄호 위치)
WITH sample AS (
    SELECT
        client_id
    FROM
        main_summary
    WHERE
        sample_id = 42)

-- Don't (들여쓰기 안함)
WITH sample AS (
SELECT
    client_id,
FROM
    main_summary
WHERE
    sample_id = 42
)
Clone this wiki locally