Data analysis, Game, Diary

[데블챌 10일] SQL 쿼리 가독성, 나는 어떻게 쓰더라?


[데블챌 10일] SQL 쿼리 가독성, 나는 어떻게 쓰더라?


들어가며,

  • 데이터 블로그 챌린지(데블챌 2기) 10일차입니다.

  • 14일 간 블로그 게시글을 올리면서 글 쓰는 습관을 들여보려 합니다.



목차

  • SQL 쿼리 가독성

    • 1. 예약어는 대문자로

    • 2. 행갈이를 자주 하자

    • 3. 행갈이를 더 자주 하자

    • 4. 주석을 쓰자

    • 5. Alias를 잘 쓰자




  • 윤선미, SQL 가독성을 높이는 다섯 가지 사소한 습관, 데이터리안, 2022
    원문 링크


  • SQL 쿼리 가독성

데이터리안 윤선미 님의 게시글 ‘SQL 가독성을 높이는 다섯 가지 사소한 습관’을 읽었습니다.

마침 최근 고민하던 사항이기도 했습니다. 원문 글처럼 문법으로 강제하지 않지만 가독성을 높이는 습관은 있기 마련이거든요.

게시글의 SQL 가독성을 높이는 다섯가지 습관을 제 습관과 비교하고 되돌아보며 정리해보려 합니다.


  • SQL 쿼리 가독성

    • 1. 예약어는 대문자로


SELECT, FROM, GROUP BY, HAVING, AS, AND

SQL 예약어들을 대문자로 써주는 습관입니다.

원문의 예시를 보면 차이가 느껴집니다.

SELECT tip, total_bill
FROM tips
select tip, total_bill
from tips

저도 이러한 습관을 들이는 편입니다. SQL 쿼리가 길어질 수록 구분이 필요해지는 이유입니다. (특히 FROM…)


  • SQL 쿼리 가독성

    • 2. 행갈이를 자주 하자


다시 원문의 예시를 가져와봤습니다.

SELECT day
     , time
     , SUM(total_bill)
FROM tips
GROUP BY day, time

예시에서는 SELECT 행갈이를 콤마마다 해주고 있는 것과 각 절마다 행갈이를 해주고 있습니다.

SELECT day, time, SUM(total_bill) FROM tips GROUP BY day, time

그냥 나열하는 방식과 비교하면 쿼리의 목적이 좀 더 잘 드러납니다.


제 습관과 비교하자면 저는 콤마를 뒤에 쓰는 편입니다.

SELECT day,
    time,
    SUM(total_bill)
FROM tips
GROUP BY day,
    time

논쟁거리는 보통 주석처리를 하다가 아래와 같은 상황이 생기면 오류가 생긴다는 이야기도 있습니다.

SELECT day
    time,
FROM tips
GROUP BY day,
    time

다만 예를 들면 Bigquery 같은 경우에 위 쿼리에서 에러를 발생시키지 않습니다.

SQL 쿼리 작업자에 따라 습관이긴 하지만 각자의 논리가 있겠죠.

이에 대한 글로벌 논쟁이 궁금하시다면 구글에 ‘sql leading or trailing comma’을 검색하시면 됩니다.


  • SQL 쿼리 가독성

    • 3. 행갈이를 더 자주 하자

다시 원문 예시를 가져와 볼까요?

[1번]

SELECT day
     , time
     , SUM(total_bill)
FROM tips
WHERE sex = 'Female'
AND smoker = 'Yes'
GROUP BY day
       , time

[2번]

SELECT day, time, SUM(total_bill)
FROM tips
WHERE sex = 'Female' AND smoker = 'Yes'
GROUP BY day, time

어떤 쿼리가 더 가독성을 높일까요?

저는 가독성도 높이면서 쿼리 수정을 편하게 한다는 점에서 [1번]을 선호합니다.

SELECT day
    -- , time
     , SUM(total_bill)
FROM tips
WHERE sex = 'Female'
AND smoker = 'Yes'
GROUP BY day
      -- , time

예를 들면 위와 같이 SELECT와 GROUP BY 내 값을 주석처리할 때 자연스럽게 처리할 수 있습니다.

  • SQL 쿼리 가독성

    • 4. 주석을 쓰자

어려운 습관이기도 합니다.

의도를 짤막하게라도 적어놓는 습관을 들이는 게 좋다고 합니다.

저는 그 규칙을 설명하는 것도 좋지만 ‘다른 사람이 읽을 때 이해하기 어려워 하지 않을까?’ 하는 부분에 적는게 좋다고 생각합니다.


  • SQL 쿼리 가독성

    • 5. Alias를 잘 쓰자

정말 어려운 습관이라고 생각합니다.

FROM 절 서브쿼리 작명은 보는 사람으로 하여금 가독성을 높이는 데 큰 부분이라고 생각합니다.

다만 그 규칙은 일관성 있어야겠죠.


저는 변수짓기 어려울 때 변수명 지어주는 사이트도 이용했던 적도 있습니다.

아이디어를 얻기 좋습니다. 요즘에는 ChatGPT도 활용한다고 하죠.


[요약]

SQL 작성에 규칙은 없지만 가독성을 높이는 습관을 들인다면 타인이 쿼리를 이해하기 편해집니다.


[한줄 인사이트]

중요한건 일관된 규칙이라고 생각합니다. 조직 내 SQL 코드 작성 규칙일 수 있고, 스스로의 규칙일 수도 있습니다.

합리적인 선에서 규칙을 가진다면 작업하기 편해지겠죠?


Reference

  • 윤선미, SQL 가독성을 높이는 다섯 가지 사소한 습관, 데이터리안, 2022
    원문 링크