web-dev-qa-db-ja.com

列のエイリアスを列定義の最初と最後のどちらに配置しても違いはありますか?

私はいつも自分の列のエイリアスを見て、次のように書きました

SELECT 1 as ColumnName

しかし、今日使用されたクエリに出くわしました

SELECT ColumnName = 1

これら2つのクエリの実行方法に違いはありますか?または、DBAの間で使用する標準についての標準はありますか?

個人的には、2番目の列の方が長い列の定義の方が読みやすく、維持しやすいと思います(良い例 here from this article ))。今日はそれを使用してはいけない理由があるのだろうかと思っています。

12
Rachel

2種類のエイリアス(=ではなくas)の基本的な機能に違いはありません。要約すると、まさにあなたが言及したもの、つまり可読性と保守性です。

私の意見では前者(<Expression> as <Alias>)は自明ですので、はるかに読みやすくなっています。あなたがSELECT ColumnName = 1を持っていると、長い疲れた夜に変数を設定するのと間違えやすいと思います。これをSELECT @ColumnName = 1と間違えると、完全に異なる機能になります。したがって、クエリ「ダブルルック」、またはさらに悪いことに、理解/コーディングのエラーの可能性を回避するために、SELECT 1 as ColumnNameを100%使用します。

個人的な好みですが、一貫性があります(自分自身とチーム内で)is king。あなたが最も簡単だと思うものは何でも、いつも一緒に行ってください。誰かがコードのトラブルシューティング/レビュー/メンテナンスを行ったり来たりすることほど苛立たしいことはありません。

3番目の言及されていない方法は、<Expression> <Alias>を使用することです。つまり、asキーワードを使用しない2番目の方法です。これは=記号と同じくらい悪いと思います。何を手に入れても読みやすさに欠ける? 3つの余分な文字(asとスペース)を入力しない。それだけの価値はありません。

誇張するために、次のようなクエリを見てください。

use AdventureWorks2012;
go

select
    [New Name] = Name,
    NewDepId = DepartmentID,
    GroupName as GName,
    ModifiedDate MyModDate
from HumanResources.Department;

確認したいコードではありません。

17
Thomas Stringer

個人的にはalias = expressionが読みやすく、理解しやすいと思います。その理由は、長い式を含むSELECTステートメントをトラブルシューティングする場合、おそらく逆ではなく、列名を介して式を検索したいからです。アプリケーションがalias2と見なす式をすばやく見つけます。

SELECT
  alias1 = (long expression with aggregates and multiple column references),
  (long expression with aggregates and multiple column references AS alias2
FROM ...

それが私の好みです。あなたのものは異なる場合があります。主観的/味覚の理由を除いて、どちらか一方を使用することには真の利点はありません。重要なことは、1つの方法を選び、それを一貫して行うことです(そして、コインを投げない限り、他の方法が好きな人に出くわしたときに、あなたの選択を守ることができます)。しかし、DBAのコードを私と同じくらいうるさい場合は、コードを書き直す準備をしてください。 :-)

これについてブログを書いています

私がさらに強く感じることの1つは、エイリアス名の周りに単一引用符を使用することです。

column AS 'alias'
'alias' = column

1つの形式は非推奨ですが、どちらも読むのは非常に困難です。また、多くの初心者はエイリアスを文字列リテラルと誤解しています。同じ理由で、二重引用符("alias")の使用を絶対に嫌います。予約済みのWordであるか、選択やフォーマットが不十分なためにエイリアスをエスケープする必要がある場合は、[square brackets]を使用します。

10
Aaron Bertrand