18

次のように、AS を使用してテーブルをエイリアスする SQL ステートメントに出くわしました。

SELECT all, my, stuff
FROM someTableName AS a
INNER JOIN someOtherTableName AS b
    ON a.id = b.id

私が見慣れているのは:

SELECT all, my, stuff
FROM someTableName a
INNER JOIN someOtherTableName b
    ON a.id = b.id

違いはなく、単なる構文糖衣だと思いますが、どちらがより一般的/広く普及しているのでしょうか? どちらかを優先する理由はありますか?

明確にするために編集:

すべての回答とすべてのポイントに感謝しますが、問題はテーブルエイリアスを使用する理由または使用しない理由ではありませんでした。問題は、テーブルのエイリアシングに「AS」キーワードを使用するか、それを除外するかについてのみでした。

4

8 に答える 8

25

これはシンタックス シュガーであり、入力に少し時間がかかりますが、より読みやすく明確であると感じる人もいます。私がそれを使用する理由は、大きなクエリを読み取るときに、を探すことでエイリアスを簡単に選択できるためASです。

もう 1 つの理由は、完全なテーブル名が長くて入力が面倒な場合があることです。短いエイリアスを使用すると、オートコンプリートなどの高度な機能がない場合や、怠惰な場合に簡単に処理できる場合があります。;)

...そして、他の人が私の前に指摘したように、自己結合を行うときに役立ちます。

于 2010-03-16T14:09:29.470 に答える
7

一般的に好まれます。結合に古い「コンマ表記」を使用していて、コンマを見逃した場合にどうなるかを考えてみてください。

それ以外の:

select *
from Orders, Customers;

最終的には:

select *
from Orders Customers; --Customers is now the alias for Orders.

これは「as」を導入することで修正されませんが、意図されているかどうかをより簡単に判断できます(クエリ中に他に何をしていたかによっては、実際にOrdersをCustomersとしてエイリアスしたかった可能性があるため)。

于 2010-03-16T14:12:37.117 に答える
3

私の知る限り、すべてのデータベースが AS ステートメントをサポートしているわけではありません。(オラクル?)しかし、何らかの理由でより読みやすく見えます。

編集: Oracle はここで「AS」キーワードをサポートしていません。

ORA-00933: SQL command not properly ended
于 2010-03-16T14:09:16.067 に答える
3

まず第一に、「a」によるエイリアシングは、実際には悪いこととみなされることがよくあります (私たちのコーディング標準では公式に禁止しています)。その理由は、長く複雑な複数テーブルのクエリでは、どのエイリアスがどのテーブルを表しているかを見失ってしまうからです。

タイピングを 2 秒短縮することは、特にこのインテリジェントな IDE の時代においては、可読性/保守性と比較するとばかげています。

エイリアシングの主な正当な用途は、自己結合を行うことです

于 2010-03-16T14:13:11.000 に答える
1

フィールドエイリアスは、出力を読みやすくするためのものです。テーブルエイリアスは、クエリ構造を読みやすくするためのものです。特に、長いテーブル名や、場合によってはデータベース間の参照を処理している場合はなおさらです。

クエリに重複するテーブル参照がある場合は、常にテーブルエイリアスを使用して1つのテーブルを他のテーブルと区別する必要があります。たとえば、親子の結合は次のようになります。

SELECT parent.Name AS ParentName,
child.Name AS ChildName
FROM MyTable AS parent
INNER JOIN MyTable as child
ON parent.ID = child.ParentID
于 2010-03-16T14:59:08.380 に答える
0

おそらくASを使用することで、エイリアスとして使用されているテーブルをすばやく確認できます。

于 2010-03-16T14:13:00.677 に答える
0

さまざまな結合を含む巨大な SQL ステートメントがある場合、エイリアスを使用すると、列がどこから来ているかを読みやすく/理解しやすくなります

私たちのアプリケーションの 1 つは列名のハイフンを処理できません (理由は聞かないでください) COLUMN-NAMECOLUMN_NAME

于 2010-03-16T15:46:25.253 に答える
0

いつAS明示的に指定する必要があるかについては、特定のエンジンでサポートされている構文と個人的な好み(またはポリシー) に依存します。

SQL Server (私が扱っているのはこれだけです) ではAS、FROM または JOIN のリレーション名の後にある場合はオプションです。そのような場合、私の好みによりキーワードをスキップしますが、一貫した行指向の結合フォームで使用しても「読みやすさが低下」しないことがわかりました。

ただし、派生クエリを使用する場合、SQL Serverはキーワードを必要ASとするため、そのような場合には念入りに含めます。

繰り返しますが、好みによる出力句には、 を含めますAS。ここでキーワードを選択したのは、結合の書式設定とは異なり、同じ行に複数の識別子が表示されることが多いという事実によるものだと思います。

したがって、SQL Server の場合:

SELECT a.all AS my, a.stuff  -- AS    (preference)
FROM someTableName a         -- no AS (preference)
INNER JOIN (
    SELECT ..
    ) AS b                   -- AS (required)
  ON a.id = b.id
于 2014-05-23T18:48:45.710 に答える