SELECT句

SELECT句は、文によって生成されるレコードの属性のリストを定義します。

構文は次のとおりです。
SELECT <expression> AS <attributeKey>[, <expression> AS <key>]*
次に例を示します。
SELECT Sum(Amount) AS TotalSales
次の例に示すように、属性を定義するときに定義済の属性を参照できます。
SELECT Sum(Amount) AS TotalSales, TotalSales / 4 AS QuarterAvg
注意: SELECT句で定義されている属性がその文のGROUP句で使用されている場合は、式で参照できるのはソース属性と、そのGROUP句で使用されているその他の属性のみになります。集計は含めることができません。

SELECT *の使用

SELECT *を使用すると、指定したレコード・ソースからすべての属性を同時に選択できます。SELECT *を使用するときの規則は次のとおりです。
  • SELECT *はコレクションに対して使用できます。文のFROM句で指定した状態を指定(その結果、コレクション名を参照)します。非常に大規模なコレクションからすべてのレコードを取得する場合、時間がかかることに注意してください。
  • AS句はSELECT *文に使用できません。たとえば、次の文はエラーを返します。
    SELECT * AS allRecs
  • SELECT *は、グルーピング文の中で使用できません。
  • SELECT *拡張には、ソース文にLET句で定義されたグルーピング・キーが含まれます。
たとえば、次のような単純な問合せがあるとします。
DEFINE ResellerInfo AS
SELECT 
  DimReseller_ResellerName,
  DimGeography_StateProvinceName, 
  DimReseller_Phone
FROM SaleState;

RETURN Resellers as
SELECT *
FROM ResellerInfo

この問合せは初めに、3つの属性のデータから(ResellerInfoという名前の)中間結果を生成し、次にSELECT *を使用してResellerInfoのすべての属性を選択します。

問合せの例では、指定したコレクションからすべての属性を選択します。
RETURN Results as
SELECT *
FROM WineState

問合せで、WineState状態はWinesコレクションを参照します。つまり、そのコレクションのすべてのレコードが返されます。

次の例に示すように、SELECT *JOIN句とともに使用することもできます。
DEFINE Reseller AS
SELECT 
  DimReseller_ResellerKey,
  DimReseller_ResellerName,
  DimReseller_AnnualSales
FROM SaleState;

DEFINE Orders AS
SELECT 
  FactSales_ResellerKey,
  FactSales_SalesAmount
FROM SaleState;

RETURN TopResellers AS
SELECT
  R.*, O.FactSales_SalesAmount
FROM Reseller R JOIN Orders O on (R.DimReseller_ResellerKey = O.FactSales_ResellerKey)
WHERE O.FactSales_SalesAmount > 10000

この例では、式R.*(RETURN TopResellers文の中にある)が拡張されて、DEFINE Reseller文で選択されたすべての属性が含まれるようになります。

文の中の、同じ名前を持つ複数の属性に対するSELECT *句の動作に注意してください。次のSELECT句があるとします。
SELECT Amt, *
*Amtという名前の属性が含まれる場合、SELECTでEQLエラー「属性"Amt"は複数回定義されています」がトリガーされます。
次のような結合でも同様です。
SELECT * FROM a JOIN b ON (...)

abの両方に同じ名前の属性がある場合は、問合せによって前述と同じEQLエラーがトリガーされます。JOINの両側で共有される属性の1つがリストされます。エラー・メッセージに問題のある文の名前が示されることに注意してください。