列定義の先頭または末尾に列エイリアスを配置することに違いはありますか?


12

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

SELECT 1 as ColumnName

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

SELECT ColumnName = 1

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

個人的に私は、第二は、読み取り/(良い例を長い列定義に維持することが容易になるだろうと思いますここからこの記事私はすべきではない、いくつかの理由がある場合)、しかし、私は今日はとても疑問に思って前に使用第二構文を見たことがありませんそれを使用します。


2
コメントエイリアシングの割り当て形式は移植性がないため、派生列の作業を大量に行う場合は非常に読みやすくなりますが、後で別のDBMSに変換する必要があるのは面倒です。
ケードルー

@Cade Celkoは、常に特定のことについて議論しています。SQL ServerコードベースをOracle、PG、またはMySQLに変換する必要がある場合、エイリアスの構成は心配する必要がありません。Celkoとは異なり、アーキテクチャ全体を別のRDBMSに移行した場合に備えて、すべての独自機能を回避することに興味はありません。教室の外でそれが実際にどのくらいの頻度で起こるのだろうか…
アーロンバートランド

@AaronBertrand質量変換について同意します。たくさんのものをTeradataに変換しましたが、これが問題の最小です。頻繁に起こることは、生のテーブルデータ全体を自分のSQL Serverにインポートし、それに対してビューまたはクエリを作成するか、それを分析するために行うことです。その後、ソースのクエリまたはプロシージャを作成しますSSISから呼び出されるシステム方言、または必要なデータを正確に取得するために必要なもの。そのような場合、私は意識的に非常に一般的なANSIスタイルのSQLを書いています。それから、日付関数のようなものを変更する必要があります。
ケイドRouxの

回答:


17

2種類のエイリアシングの基本的な機能に違いはありません(asに対して=)。要約すると、まさにあなたが述べたとおりです:読みやすさと保守性。

私の意見では、前者(<Expression> as <Alias>)は自明であるため、はるかに読みやすくなっています。あなたが持っているとき、私はSELECT ColumnName = 1それらの長い疲れた夜に変数を設定することと誤解することはかなり簡単だと思います。あなたはそれをSELECT @ColumnName = 1完全に異なる機能と誤解するかもしれません。したがって、クエリ「double look」、またはさらに悪いことに...理解/コーディングのエラーの可能性を回避するために、私はSELECT 1 as ColumnName100%の時間を費やしています。

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

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

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

use AdventureWorks2012;
go

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

私がレビューしたいコードではありません。


5
「as」キーワードを除外している最後の1つを見るのはいつもイライラさせられます。必須ではありませんが、大量のコードを見るときに読むのは苦痛です。

10

個人的には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のコードを書く場合は、書き直される準備をしてください。:-)

これについてブログに書いた

私がさらに強く感じるのは、エイリアス名を単一引用符で囲むことです。たとえば、

column AS 'alias'
'alias' = column

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


2
引用の側面に完全に同意します。長い式に関しては、私は個人的にキャリッジリターンと改行タブを使用as <Alias>してから、列定義の最後の行に配置します。しかし、間違いなく同意しました、それはあなたがあなたのコーヒーを好む方法と同じくらい個人的です。
トーマスストリンガー

@ThomasStringerは、式をキャリッジリターンしたいです。ラインがオフに開始した場合にAS Alias、それはAS私が特定のテーブル名に対して垂直方向にスキャンしていたときに非常に便利ではありません。コンマをどこに置くかについても意見が分かれるに違いない。:-)
アーロンバートランド

SSMSで際立っていたので、列エイリアスの周りに一重引用符を使用してみましたが、引用キーを入力することの煩わしさはすぐに私にとって面倒になり、怠zyな方法に戻りました。また、クエリに文字列が含まれていると、意図した目的にはうまくいきませんでした。私はおそらくASそれを使用しているので、おそらく固執するでしょう(私は通常、前に改行を追加しAS ColumnNameておおまかに整列します)が=、長い列定義でははるかに読みやすいことに同意します。
レイチェル

2
@AaronBertrandコンマを最初に置くことについての私の議論は、特に複数行の列定義の場合に、列定義がどこから始まるかを簡単に伝えることができるということです。
レイチェル

1
@AaronBertrand私は通常、賢明にインデントされたコードでは動作しません>。<
レイチェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.