SQL 문장 들여쓰기

2023. 2. 17. 19:18프로그래밍

728x90

개발을 하다보면, 코드의 정렬이 처음에는 중요해 보이지 않다가도 소스 량이 많이 질수록 라인이 길어 질수록 이 들여쓰기가 안 되어 있으면 아주 큰 불편을 겪을 때가 많습니다.

특히나, 한 2~3 일만 코드를 보지 않으면 '이게 정말 내가 짠 코드가 맞을까?' 하고 스스로에게 반문하게 되는 안타까운 기억들로 오늘도 궁시렁 대는 내 모습을 만들고 있다는 것이죠.

 

개발 소스 코드 뿐만 아니라 이 SQL 언어를 다루면 오히려 더 이 들여쓰기가 중요 해 질수도 있습니다.

왜냐하면, 실행 과정이 바로 일어나니까 길게 들여쓰는 문장들이 눈을 마구 어지럽히게 될테니까요

언어로 소스코드를 작성 할 때, 소스 코드의 들여쓰기가 제일 중요한 요소 일 것 같네요...

물론 이건 개인적인 의견입니다.

 

파이썬이나 여타 다른 소위 스크립트 언어들을 좋아하시는 분들은 아시겠지만 바로 내가 어떤 중간과정을 보지 않고도 결과를 확인 할 수 있다는 것에 매료가 되는데요. 초창기 부터 이 SQL 언어를 거의 모든 개발자들이 좋아 하하는 커다란 이유가 아닐까 합니다.

 

그리고 잘 정된 된 문장만이 수증기가 올라오는 허기진 내 머리를 식혀 줄 수 있다는 생각도 듭니다.

다음은 스택오버플로우에 나온 들여쓰기 내용들을 좀 정리 해 보았습니다.

 

 

SQL Statement indentation good practice

What is the accepted practice for indenting SQL statements? For example, consider the following SQL statement: SELECT column1, column2 FROM table1 WHERE column3 IN ( SELECT TOP(1) column4 FROM ta...

stackoverflow.com

 

질문 내용:

다음 SQL 문장을 어떻게 하면 들여쓰기가 잘 된 문장으로 만들 수 있을까요?

SELECT column1, column2
FROM table1
WHERE column3 IN
(
SELECT TOP(1) column4
FROM table2
INNER JOIN table3
ON table2.column1 = table3.column1
)
 

채택 답변:

SELECT column1
     , column2
FROM table1
WHERE column3 IN
(
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3
    ON table2.column1 = table3.column1
)
 

모든 쉼표는 앞에다 쓸거예요, 이 방법은 SQL 에디터가 뱉는 라인 X에 오류 났어요를 보지 않을 테니까

아래 예는 SQL 문장을 위와 같이 쓰지 않는 사람들을 위한 것이며, 쉼표가 누락 된 문장 입니다.

SELECT sdcolumn123
 , dscolumn234
 , sdcolumn343
 , ffcolumn434
 , sdcolumn543
 , bvcolumn645
  vccolumn754
 , cccolumn834
 , vvcolumn954
 , cvcolumn104
FROM table1
WHERE column3 IN
(
    ...
)
 
SELECT sdcolumn123, dscolumn234, asdcolumn345, dscolumn456, ascolumn554, gfcolumn645 sdcolumn754, fdcolumn845, sdcolumn954, fdcolumn1054
FROM table1
WHERE column3 IN
(
    ...
)
 

 

다른 답변 1:

SELECT column1, column2
FROM table
WHERE column3 IN (
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3 ON table2.column1 = table3.column1
)
 

 

다른 답변 2:

SELECT 
    column1, 
    column2 
FROM 
    table1 
WHERE 
    column3 IN 
    ( 
     SELECT TOP(1) 
         column4 
     FROM 
         table2 
         INNER JOIN 
         table3 
             ON table2.column1 = table3.column1 
    )
 

다른 답변 3:

SELECT column1,
       column2
  FROM table1
 WHERE column3 IN (SELECT column4
                     FROM table2
                     JOIN table3
                       ON table2.column1 = table3.column1);
 

좀더 길어보이는 다른 답변 4:

SELECT 
    produtos_cesta.cod_produtos_cesta, 
    produtos.nome_pequeno,
    tab_contagem.cont,
    produtos_cesta.sku, 
    produtos_kits.sku_r AS sku_kit, 
    sku_final = CASE
        WHEN produtos_kits.sku_r IS NOT NULL THEN produtos_kits.sku_r
        ELSE produtos_cesta.sku
    END,
    estoque = CASE
        WHEN produtos2.estoque IS NOT NULL THEN produtos2.estoque
        ELSE produtos.estoque
    END,
    produtos_cesta.unidades as unidades1, 
    unidades_x_quantidade = CASE
        WHEN produtos.cod_produtos_kits_tipo = 1 THEN CAST(produtos_cesta.quantidade * (produtos_cesta.unidades / tab_contagem.cont) * produtos_kits.quantidade AS int)
        ELSE CAST(produtos_cesta.quantidade * produtos_cesta.unidades AS int)
    END,
    unidades = CASE
        WHEN produtos.cod_produtos_kits_tipo = 1 THEN produtos_cesta.unidades / tab_contagem.cont * produtos_kits.quantidade
        ELSE produtos_cesta.unidades
    END,
    unidades_parent = produtos_cesta.unidades,
    produtos_cesta.quantidade,
    produtos.controla_estoque, 
    produtos.status
FROM 
    produtos_cesta 
INNER JOIN produtos 
    ON (produtos_cesta.sku = produtos.sku) 
INNER JOIN produtos_pacotes 
    ON (produtos_cesta.sku = produtos_pacotes.sku) 
INNER JOIN (
    SELECT 
        produtos_cesta.cod_produtos_cesta,
        cont = SUM(
            CASE
                WHEN produtos_kits.quantidade IS NOT NULL THEN produtos_kits.quantidade
                ELSE 1
            END
        )
    FROM 
        produtos_cesta 
    LEFT JOIN produtos_kits 
        ON (produtos_cesta.sku = produtos_kits.sku) 
    LEFT JOIN produtos 
        ON (produtos_cesta.sku = produtos.sku) 
    WHERE 
        shopper_id = '" + mscsShopperId + @"' 
    GROUP BY 
        produtos_cesta.cod_produtos_cesta, 
        produtos_cesta.sku, 
        produtos_cesta.unidades 
) 
AS tab_contagem
    ON (produtos_cesta.cod_produtos_cesta = tab_contagem.cod_produtos_cesta)
LEFT JOIN produtos_kits 
    ON (produtos.sku = produtos_kits.sku) 
LEFT JOIN produtos as produtos2
    ON (produtos_kits.sku_r = produtos2.sku) 
WHERE 
    shopper_id = '" + mscsShopperId + @"' 
GROUP BY 
    produtos_cesta.cod_produtos_cesta, 
    tab_contagem.cont,
    produtos_cesta.sku, 
    produtos_kits.sku_r, 
    produtos.cod_produtos_kits_tipo, 
    produtos2.estoque,
    produtos.controla_estoque, 
    produtos.estoque, 
    produtos.status, 
    produtos.nome_pequeno, 
    produtos_cesta.unidades, 
    produtos_cesta.quantidade,
    produtos_kits.quantidade
ORDER BY 
    produtos_cesta.sku, 
    produtos_cesta.unidades DESC
 

이상.

 

728x90