SELECT句
SELECT句は、各入力行を問合せ結果に表示される新しいレコードに変換します。SELECT句は、select star形式と射影形式の2つの形式で指定されます。
構文
select_clause ::= SELECT [DISTINCT] select_list
select_list ::= [hints
]
(STAR | (expression
AS id
("," expression AS id)*))
セマンティクス
- フィールド式の結果が空の場合、作成したレコードの対応するフィールドの値としてNULLが使用されます。
- コンパイラは、フィールド式が複数の項目を返すことができると判断した場合、条件付き配列コンストラクタを使用してフィールド式をラップします。配列とマップのコンストラクタの項を参照してください。実行時に、配列は、フィールド式が実際には複数の項目を返す場合にのみ作成されます。その場合、返された項目は作成された配列に挿入され、作成されたレコードの対応するフィールドの値として使用されます。
前述のセマンティクスは、SELECT句によって生成されるすべてのレコードのフィールド数とフィールド名が同じであることを意味しています。その結果、問合せの結果セットのすべてのレコードを含むコンパイル時に、レコード・タイプを作成できます。このレコード・タイプは、作成された各レコードに関連付けられているタイプであり、アプリケーションでプログラム的に使用できます。
SELECT句にはオプションのDISTINCTキーワードを含めることができます。SELECT句にDISTINCTキーワードが含まれる場合、選択した重複行のセットごとにコピーが1つのみ返されます。重複行とは、SELECTリストに一致する値がある行です。問合せでは、SELECTリストに指定されたすべての列の値の組合せを使用して一意性が評価されます。例6-40を参照してください。値間の等価性は、"="演算子のセマンティクスを使用してチェックされます。値比較演算子の項を参照してください。
SELECT式がグループ化式である場合、SELECTリストの式は、グループ化式(GROUP BY句内(ある場合))、集計関数、またはグループ化式や集計関数に加えて作成された式である必要があります。
ノート:
SELECT句には1つ以上のヒントが含まれることもあり、問合せプロセッサで問合せに使用する索引を選択するのに役立ちます。最適な適用可能索引の選択の項を参照してください。例6-35 SELECT句
SELECT * FROM users
例6-36 SELECT句
年齢が30歳を超えるユーザーのIDと姓を選択します。この問合せを作成する4つの異なる方法を示して、表の最上位レベルの列にアクセスできる異なる方法を示します。
SELECT id, lastName FROM users WHERE age > 30
SELECT users.id, lastName FROM users WHERE users.age > 30
SELECT $u.id, lastName FROM users $u WHERE $u.age > 30
SELECT u.id, lastName FROM users u WHERE users.age > 30
例6-37 SELECT句
年齢が30歳を超えるユーザーのIDと姓を選択し、IDでソートされた結果を返します。IDがユーザー表の主キーであるため、この場合はソートが可能です。
SELECT id, lastName FROM users WHERE age > 30 ORDER BY id
例6-38 SELECT句
ユーザーの個別の年齢のリストを選択します。
SELECT DISTINCT age FROM users
出力:{"age":25}
{"age":43}
{"age":22}
例6-39 SELECT句
ユーザーのothernamesのリストを選択します。SELECTコマンドの出力が比較され、重複が最終出力から削除されることに注意してください。
SELECT otherNames FROM Users
出力:{"otherNames":null}
{"otherNames":null}
{"otherNames":[{"first":"Johny","last":"BeGood"}]}
SELECT DISTINCT otherNames FROM Users
出力:{"otherNames":null}
{"otherNames":[{"first":"Johny","last":"BeGood"}]}
例6-40 SELECT句
ユーザーのfirstnameおよびothernamesのリストを選択します。問合せでは、SELECTリストに指定されたすべての列の値の組合せを使用して一意性が評価されることに注意してください。
SELECT firstName, otherNames FROM Users
出力:{"firstName":"Peter","otherNames":null}
{"firstName":"Mary","otherNames":null}
{"firstName":"John","otherNames":[{"first":"Johny","last":"BeGood"}]}
SELECT DISTINCT firstName, otherNames FROM Users
出力:{"firstName":"Peter","otherNames":null}
{"firstName":"Mary","otherNames":null}
{"firstName":"John","otherNames":[{"first":"Johny","last":"BeGood"}]}