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句を使用してコーパス以外のソースを参照する必要があります。
  • SELECT *は、グルーピング文の中で使用できません。
たとえば、次のような単純な問合せがあるとします。
DEFINE ResellerInfo as
SELECT DimReseller_ResellerName, DimGeography_StateProvinceName, DimReseller_Phone;

RETURN Resellers as
SELECT *
FROM ResellerInfo

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

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

DEFINE Orders AS
SELECT FactSales_ResellerKey, FactSales_SalesAmount;

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 Amt AS Z, *
   or
SELECT *, Amt AS Z
*に含まれる属性の中に、Zという名前のものがある場合は、いずれか先に出現した属性が結果に含められます。
次のような結合でも同様です。
SELECT * FROM a JOIN b ON (...)

aとbの両方に同じ名前の属性がある場合は、JOIN句の最初の文からの属性が返されます。