SQLのエイリアスに関して疑問と質問があります。同じクエリでエイリアスを使用したい場合は、それを使用できますか。例:列aとbを持つテーブル名xyzについて考えてみます。
select (a/b) as temp , temp/5 from xyz
これは何らかの方法で可能ですか?
クエリの式に識別子を付けて、クエリの他の部分でその識別子を再利用することについて話しているのですか?
私のSQL経験のほとんどすべてが限られているMicrosoft SQL Serverでは、それは不可能です。ただし、次のことはできます。
SELECT temp, temp / 5
FROM (
SELECT (a/b) AS temp
FROM xyz
) AS T1
明らかに、この例は特に有用ではありませんが、複数の場所で式を使用している場合は、より有用になる可能性があります。GROUP BY 句では式を再度記述する必要があるため、式が長く、それらもグループ化したい場合に便利です。
MSSQL では、クエリではなくテーブル スキーマで指定された計算列を作成するオプションもあります。
Oraclewith
ステートメントも使用できます。他のDBでも同様のステートメントを利用できます。これが私たちがOracleに使用しているものです。
with t
as (select a/b as temp
from xyz)
select temp, temp/5
from t
/
これには、特に複数のネストされたクエリを含む複雑なクエリがある場合にパフォーマンス上の利点があります。これは、WITH
ステートメントが1回だけ評価され、後続のステートメントで使用されるためです。
SELECT
SQL 製品がエントリ レベルの標準 SQL-92 に準拠していると仮定すると、同じ句では使用できません。
節内の式 (およびその相関名) は、SELECT
「一度に」存在します。あなたが望んでいるように見える左から右への評価はありません。
@Josh Einstein の回答 here に従って、派生テーブルを回避策として使用できます (できれば、「temp」よりもモートに意味のある名前を使用し、temp/5
式に名前を付けてください。コードを継承する人を念頭に置いてください)。
投稿したコードは MS Access データベース エンジンで動作します (そして、2 番目の式などに意味のない相関名を割り当てExpr1
ます) が、実際の SQL 製品ではないことに注意してください。
W3Schoolsの「SQLエイリアス」が役立つ場合があります。
これが彼らのチュートリアルからの例です:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p,
Product_Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola'
クエリでさらにエイリアスを使用することに関しては、使用しているデータベースによっては可能かもしれません。