SQL 가독성 좋게 작성하는 방법

SQL

문제점 😅

쿼리 수정을 하다 보면 앞서 지나간 수많은 개발자들이 자기 입맛대로 쿼리를 작성 및 수정했기 때문에 가독성이 정말 천차만별이다. 간단한 쿼리의 경우는 양이 적어서 그냥 쓱 보고 넘어가지만 핵심 기능과 연관된 쿼리의 경우 그 양이 상당히 방대하므로, 이걸 업무차 분석하고 있자니 열받지 않을 수가 없다. 나또한 열받게 하는 사람이 되진 말자는 뜻에서 가독성 좋게 작성하는 방법을 적어두기로 한다.

해결책 😏

여러 글들을 보고 내 입맛에 맞게 정리 좀 해보았다. 들여쓰기는 SQL 작성 기본 덕목 중 첫 번째다!

1. 예약어는 대문자로 작성

SELECT, FROM, WHERE, GROUP BY 등의 SQL 예약어는 소문자가 아닌 대문자로 작성한다.

-- GOOD
SELECT * FROM FRUIT_BASKET WHERE FRUIT_NAME = 'APPLE';

-- BAD
select * from FRUIT_BASKET where FRUIT_NAME = 'APPLE';

2. 예약어 첫 단어는 왼쪽 정렬

예약어 첫 단어는 왼쪽 정렬을 한다. 사실 이 부분은 BAD 유형처럼 했었는데… 바꿔야겠다.

-- GOOD
SELECT * 
FROM FRUIT_BASKET 
WHERE FRUIT_NAME = 'APPLE';

-- BAD
SELECT * 
  FROM FRUIT_BASKET 
 WHERE FRUIT_NAME = 'APPLE';

3. 별칭 AS(Alias)는 생략하지 말 것

별칭은 명시적으로 확실하게 표시해주는게 좋고, ‘a’,’xx’ 등 의미를 알 수 없는 변수명을 사용하지 말자.

-- GOOD
SELECT CONCAT(FRUIT_NAME, AMOUNT) AS INFO 
FROM FRUIT_BASKET;

-- BAD
SELECT CONCAT(FRUIT_NAME, AMOUNT) INFO
FROM FRUIT_BASKET;

또한 테이블에 사용되는 별칭은 동등한 위치에서 작성한다.

-- GOOD
SELECT *
FROM TB_BOOK        AS B
INNER JOIN TB_PRICE AS P

-- BAD
SELECT *
FROM TB_BOOK AS B
INNER JOIN TB_PRICE AS P

4. 콤마(,)는 컬럼명 앞으로, 세미콜론(;)은 마지막 줄에

콤마(,)를 컬럼명 앞에 두면 주석 용이 및 컬럼 누락 방지에 좋으며, 세미콜론(;)이 마지막 줄에 위치하면 쿼리 수정에 용이하다.

-- GOOD
SELECT FRUIT_NAME
     , AMOUNT -- 콤마를 컬럼명 앞에 두는 방식(Leading Comma)
     , PRICE
FROM FRUIT_BASKET
;

-- BAD
SELECT FRUIT_NAME,
       AMOUNT, -- 콤마를 컬럼명 뒤에 두는 방식(Trailing Comma)
       PRICE
FROM FRUIT_BASKET;

5. 주석을 잘 쓰자

SELECT 옆에 해당 쿼리가 어디서 호출 받고, 어떤 작업을 하는지 부가적인 정보와 함께 주석을 작성해 놓으면 좋다.

-- GOOD
SELECT /* [CommonDao.selectInfo][byeoom][과일명+갯수 Info 조회] */
       CONCAT(FRUIT_NAME, AMOUNT) AS INFO 
FROM FRUIT_BASKET;

-- BAD
SELECT CONCAT(FRUIT_NAME, AMOUNT) INFO
FROM FRUIT_BASKET;

가독성 좋게 정리한 쿼리

상기 내용들을 적용해보면 다음과 같다.

SELECT /* [CommonDao.selectAllInfo][byeoom][모든 Info 조회] */
       FRUIT_NAME
     , CONCAT(FRUIT_NAME, AMOUNT) AS INFO
     , AMOUNT
     , PRICE
FROM FRUIT_BASKET
WHERE FRUIT_NAME = 'APPLE'
AND AMOUNT > 5
;

마무리 😎

상기 내용을 작성하면서 든 가장 중요한 점은,

  1. 내가 속한 프로젝트의 SQL 작성 규칙을 우선으로 따를 것.
  2. 별도 규칙이 없다면, 특히 들여쓰기주석 작성을 잘할 것.
  3. 열받게 휘갈기며 작성하지 말 것.

SQL 작성에 있어서 특별한 규칙이 있는건 아니다. 가독성 좋게 작성하는게 어렵다면 DB툴이나 SQL 구문 정렬 사이트도 있으니 이용해보자. 유지보수에 용이하게 작성하는게 제일 중요한 것 같다.

참고문헌 📝

https://velog.io/@datarian/good-sql-code
https://www.goodsource.co.kr/71
https://hing9u.tistory.com/83