74 votes

Bonne pratique pour l'indentation des instructions SQL

Quelle est la pratique acceptée pour l'indentation des instructions SQL ? Par exemple, considérons l'instruction SQL suivante :

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

Comment doit-on l'indenter ? Merci beaucoup.

0 votes

Il y a tellement de réponses qui, à mon avis, sont toutes aussi valables les unes que les autres et qui sont davantage une question de préférence ! C'est typique d'un langage qui permet d'écrire beaucoup de code dans une seule déclaration, ce qui peut être à la fois une bénédiction et une malédiction. Des instructions relativement simples occupent plusieurs lignes, et des instructions complexes une page ou plus. Alors que dans beaucoup d'autres langages, les instructions prennent généralement une seule ligne ou occasionnellement quelques lignes, et il y a donc moins de variations dans l'indentation ; la plupart des désaccords portent sur des petites choses comme le fait de savoir si une parenthèse doit se trouver à la fin de la ligne ou à la suivante.

1 votes

Bonne question, je m'attendais à voir plus d'indentations de mise à jour et d'insertion aussi .

0 votes

Au lieu de le faire manuellement, laissez un outil le faire pour vous. Il existe quelques outils gratuits (également en ligne) comme www.sqlinform.com

48voto

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

J'aime avoir tous les ", " à l'avant De cette façon, je ne les cherche jamais lorsqu'une erreur survient à la ligne X de l'éditeur SQL.


Il s'agit d'un exemple pour ceux qui n'utilisent pas ce type d'instruction SQL. Les deux contiennent une erreur de virgule manquante.

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
(
    ...
)

J'ai trouvé plus facile et plus rapide le premier exemple. J'espère que cet exemple vous montrera davantage mon point de vue.

1 votes

Oui, le pré-comma a l'air ridicule, mais il est tellement plus facile à gérer à long terme.

0 votes

Qu'est-ce que cela signifie, "de cette façon, je ne les cherche jamais" ?

3 votes

Grâce à la virgule, vous savez toujours où ils se trouvent et vous n'avez pas besoin de les chercher.

26voto

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

Ce document est assez court et facile à lire. Je ferais des ajustements s'il y avait plus de colonnes sélectionnées ou plus de conditions de jointure.

0 votes

C'est le même schéma d'indentation que j'aime utiliser.

0 votes

De nombreux manuels scolaires utilisent cette méthode ou quelque chose de très similaire. Je préfère rester simple :)

0 votes

Personnellement, j'aurais tendance à opter pour ce style, sauf que je laisserais tomber le début ( sur une nouvelle ligne).

21voto

Codewerks Points 3284

Je ne suis pas sûr qu'il existe une pratique reconnue, mais voici comment je procéderais :

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

0 votes

C'est la pratique qui me plaît le plus. Malheureusement, aucun des bétificateurs SQL que j'ai utilisés ne permet une telle identification. La seule différence, c'est que j'utilise des mots-clés en minuscules, car je déteste les SELECT criards :)

19voto

jalbert Points 1657

J'aime avoir des "rivières" d'espace blanc dans le code. Cela le rend un peu plus facile à lire.

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

1 votes

Existe-t-il un IDE qui supporte ce style d'indentation/alignement ?

0 votes

J'irais même plus loin en plaçant la virgule (,) après "column1" à la ligne suivante, pour que la rivière continue de couler.

18voto

Slapout Points 1769

J'aime la formule de jalbert qui consiste à aligner les mots-clés sur leur droite. J'ajouterais également que j'aime que les ET et les OU soient placés à gauche (certains les placent à droite.) En outre, j'aime aligner mes signes égaux lorsque cela est possible.

SELECT column1, 
       column2  
  FROM table1, table2 
 WHERE table1.column1 = table2.column4 
   AND table1.col5    = "hi" 
    OR table2.myfield = 678

1 votes

C'est aussi ma préférence personnelle : je trouve que le fait que les mots-clés soient alignés exactement là où l'on s'attend à ce qu'ils le soient aide énormément à la lecture rapide du code.

1 votes

Je l'aime bien aussi, mais comment diable fais-tu ? Es-tu en train d'espacer à la main le début de chaque ligne ? Cela semble encombrant. s'il y avait un moyen facile de formater comme ça, j'aimerais le savoir.

0 votes

Curieusement, tous les mots-clés select, insert, update, delete ont la même longueur :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X