SQL semble être la langue la plus négligée lorsqu'il s'agit de formater de manière jolie et de manière lagieusement ... et comme des déclarations SQL peuvent être incroyablement détaillées et complexes, il est extrêmement difficile de travailler avec. Mais je trouve que lorsque j'essaie de formater mon code SQL de la meilleure façon possible, je suis parfois incertain de la façon de le faire. Je connais les normes pour Java, C #, Python, etc. Mais quand il s'agit de SQL, je n'ai pas vu trop de directives ni de pratiques acceptées. Quels sont les conseils / règles de formatage SQL afin qu'il soit clair, lisible et logique? Pouvez-vous donner l'exemple de code pour illustrer? Qu'avez-vous trouvé comme la méthode la plus standard et acceptée de formater SQL? P>
4 Réponses :
Je suivez généralement ce type de syntaxe pour MSSQL Server
CREATE PROCEDURE Foo (
Bar INT,
Foo VARCHAR(20)
) AS
BEGIN
//Your Code Here
END
Je trouve que pour être incroyablement verbeux. La plupart des bases de données n'ont pas besoin de "intérieure" ou "extérieure" dans la syntaxe de jointure et une déclaration de ligne pour chaque critère de jointure est un gaspillage d'espace lorsqu'il y a ~ 80 caractères sur l'écran. L'utilisation de ce format est risquée pour SQL dynamique, sauf si vous concatéez chaque ligne avec des clauses d'ouverture et de terminaison - sur Oracle au moins - car l'espace peut être interprété comme des caractères intitifs.
Je suis heureux que vous ayez mentionné d'abord référencer le nom de champ de la table jointe. Sans parenthèses cependant, votre et / ou la logique est un peu ambigu.
@OMG Ponies. Oui, je sais que vous n'avez pas besoin de l'intérieur et de l'extérieur, vous pouvez simplement dire que vous pouvez rejoindre au lieu d'une jointure intérieure et de rejoindre la jointure à gauche. C'est juste un habit que j'ai formé.
@Tom H. Les Sans parenthèses est une faute de frappe. Je voulais ajouter des parenthèses. Merci d'avoir attrapé ça
J'aime beaucoup ce style. Bien qu'il gaspille de l'espace sur des lignes communes, il garantit que la structure est presque toujours cohérente même lorsque vous devez faire face à de longues clauses. Cela ne me dérange pas que le défilement vertical et la consistance facilite la lecture.
Vous pouvez essayer de vérifier le livre de Joe Celko Style de programmation SQL . Je suis sûr qu'il y a beaucoup de gens qui sont en désaccord avec son style, mais c'est un bon départ.
Certaines de mes propres "règles" p>
Par exemple: P>
SELECT column_1, column_2, CASE WHEN column_5 = 'Blah' THEN 1 WHEN column_6 = 'Blah' THEN 2 ELSE 3 END AS column_alias FROM My_Table MT INNER JOIN My_Other_Table MOT ON MOT.column_1 = MT.column_1 WHERE MT.column_2 = 'Some Value' AND ( MT.column_3 = 'Some other value' OR MT.column_4 = 'Some other value' )
Similaire à moi, mais j'aurais la jointure intérieure (sans intérieur!) Alignée sur des tables (ce n'est pas une clause majeure) et la condition en ligne. Quoi qu'il en soit, cette mise en page générale est l'un des plus propres que j'ai vus.
Vrai ... Peut-être que je vais essayer d'indenter les jointures et de voir comment j'aime ça. Je n'aime pas simplement inclure les critères sur la même ligne, car cela peut souvent être assez long - et je déteste le défilement gauche / droite. Je préfère un critère sur chaque ligne.
Je commencerais à indenter les critères si c'était long, mais gardez-le sur une ligne si c'est abrégé: en particulier, "Join Table1 sur table1.table1_id = Table2.table1_id" est le cas le plus courant de loin. Certains biais PostgreSQL ici depuis que cela peut être écrit "Rejoindre Table1 en utilisant (Table1_ID)" qui serait stupide à scinder.
J'utilise les règles suivantes:
p>
Sélectionner la hauteur, la largeur, l'âge de la personne où la largeur = 20 code>
Tandy:
Sélectionnez Hauteur, largeur, âge de la personne où (largeur = 20) code>
ul>
-
minuscule tous les noms de table. N'utilisez jamais Camelcase (Donkeywrench) dans les noms de table (vous vous tirez sur la tête si vous créez les requêtes à la main). P> LI>
-
Utilisez toujours des parenthèses à l'endroit où et ayant des clauses. Utilisez l'espace entre les opérateurs. P> LI>
ul>
p>
moche:
... Où la largeur = 20 et hauteur> 20 code>
Tandy:
où (largeur = 20) et (hauteur> 20) code>
ul>
- Utilisez des alias pour tableaux. LI>
ul>
`Sélectionnez * de Donkeywrench Dw ...`
ul>
- Utilisez des champs de clé primaire lisibles et des noms de table. Je démarre toujours les clés et les clés primaires avec 'id _'. Li>
ul>
Nom: Donkeywrench, clé primaire: id_donkeywench
ul>
- marque où la requête est originaire de. Tout en lisant des journaux, vous pouvez facilement suivre où le problème est survenu. LI>
ul>
/ * Appelé de donkeykong.php, ligne 22 * / Select * de Donkeywrench Dw ...
ul>
- Si la requête est loooong li>
ul>
- quittez toujours l'opérateur (et, ou ou) à la fin de la ligne
- Utilisez des parenthèses!
ul> Exemple: P>
/*Executed from xyz.php*/
SELECT
p.height, p.width, p.age,
pd.hastel, pd.hasmobile
FROM
person p
LEFT JOIN personaldata pd ON p.id_person = pd.id_person
LEFT JOIN relatives r ON pd.id_person = r.id_person
WHERE
( p.width = 20 ) AND
( (p.height > 20) AND (p.height < 15) ) AND
( pd.hastel)
ORDER BY
p.age, p.height
Je ne suis pas d'accord avec les parenthèses autour de l'endroit où les conditions. Lorsque la priorité de l'opérateur est claire, je le trouve distrayant. C'est comme écrire l'expression ((x * y) + (s * t)) / z au lieu de (x * y + s * t) / z. Quand il y a moins de parenthèses, il est plus facile de voir comment ils correspondent. Bien sûr, c'est une question de préférence.
Peut-être que c'est "tricherie"; mais je viens de trouver un site incroyable qui fait cela pour vous! P>
et les options sont entièrement personnalisables p>
Outil génial, et libre de démarrer!
Pas un nouveau sujet. Découvrez Stackoverflow.com/questions/118288/SQL-CODING-STYLE-Guide , et autres avec les balises de style de codage et de SQL.
Il existe des normes pour Java et C # Formatage? Passez le mot, cela pourrait enfin arrêter les guerres saintes sans fin sur le style de la corset et l'indençant de l'espace TAB-VS.
@Stephen P - True, mais au moins, il y a des styles connus. J'ai lu un chapitre dans Code complète récemment et il y a des controverses, mais il définit essentiellement tous les styles couramment utilisés, puis à vous de choisir. Votre lieu de travail choisit. Mais je n'ai même pas vu de discussion sur SQL, tout le monde semble juste suivre ses propres sentiments intestinaux