FROM句

FROM句は、参照表から行を取得するために使用されます。

構文

from_clause ::= FROM (single_from_table | nested_tables | left_outer_join_tables | unnest_syntax)

single_from_table ::= aliased_table_name

aliased_table_name ::= 
   (table_name | SYSTEM_TABLE_NAME) [[AS] table_alias]

table_alias ::= [$] id

セマンティクス

構文に示すように、FROM句は単一表を参照するか、ネストされた表句または左外部結合句を含めることができます。また、ネスト解除構文を含めることもできます。ネストされた表については、「NESTED TABLES句を使用した同じ階層内の複数表の問合せ」の項を参照してください。左外部結合の詳細は、左外部結合(LOJ)を参照してください。

unnest_syntax

unnest_syntaxを使用すると、配列またはマップを行のセットに変換する1つ以上の配列またはマップをネスト解除できます。問合せでのunnest_syntaxの使用方法を理解するには、配列およびマップのネスト解除を参照してください。

single_from_table

単純なFROM句の場合、表は名前で指定されます。子表の場合は、コンポジット(ドット区切り)名になります。単純なFROM句の結果は、参照表の行を含む順序です。

aliased_table_name

表名の後に表の別名を付けることができます。表の別名は、基本的に、指定された表の行全体にわたる変数です。別名が指定されていない場合は、問合せのスペルと同じ表名を使用して内部的に作成されますが、子表の場合はドット文字が「_」で置換されます。表階層を参照してください。

ノート:

表の別名では、変数名と同様に大/小文字が区別されます。

SELECT式の他の句はFROM句によって生成された行を操作し、一度に1行ずつ処理します。現在処理中の行はコンテキスト行と呼ばれます。コンテキスト行の列は、式で名前によって直接参照することも、後ろにドット文字と列名が続く表の別名で参照することもできます。列の参照の項を参照してください。表の別名がドル記号($)で始まる場合、実際には、名前が別名である変数の変数宣言として機能します。この変数はコンテキスト行全体にバインドされ、SELECT式の副次式内で参照できます。たとえば、引数としてexpiration_time関数に渡して、コンテキスト行の有効期限を取得できます。「expiration_time関数」関数を参照してください。つまり、$fooなどの表の別名はそれ自体が式ですが、fooは式ではありません。この変数の名前が外部変数と同じ場合は、外部変数が非表示になることに注意してください。これは、FROM句によってネストされたスコープが作成され、SELECT式の残りの部分に存在するためです。

例6-5 航空会社アプリケーション内のすべての乗客レコードのすべての情報の選択

SELECT * FROM BaggageInfo

説明: 前述の問合せでは、FROM句を使用して、BaggageInfo表からすべての乗客データを取得します。

出力: 1つのサンプル行:
"ticketNo" : 1762344493810,
"fullName" : "Adam Phillips",
"gender" : "M",
"contactPhone" : "893-324-1064",
"confNo" : "LE6J4Z",
 [ {
    "id" : "79039899165297",
    "tagNum" : "17657806255240",
    "routing" : "MIA/LAX/MEL",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "MEL",
    "flightLegs" : [ {
      "flightNo" : "BM604",
      "flightDate" : "2019-02-01T01:00:00",
      "fltRouteSrc" : "MIA",
      "fltRouteDest" : "LAX",
      "estimatedArrival" : "2019-02-01T03:00:00",
      "actions" : [ {
        "actionAt" : "MIA",
        "actionCode" : "ONLOAD to LAX",
        "actionTime" : "2019-02-01T01:13:00"
      }, {
        "actionAt" : "MIA",
        "actionCode" : "BagTag Scan at MIA",
        "actionTime" : "2019-02-01T00:47:00"
      }, {
        "actionAt" : "MIA",
        "actionCode" : "Checkin at MIA",
        "actionTime" : "2019-02-01T23:38:00"
      } ]
    }, {
      "flightNo" : "BM667",
      "flightDate" : "2019-01-31T22:13:00",
      "fltRouteSrc" : "LAX",
      "fltRouteDest" : "MEL",
      "estimatedArrival" : "2019-02-02T03:15:00",
      "actions" : [ {
        "actionAt" : "MEL",
        "actionCode" : "Offload to Carousel at MEL",
        "actionTime" : "2019-02-02T03:15:00"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "ONLOAD to MEL",
        "actionTime" : "2019-02-01T07:35:00"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "OFFLOAD from LAX",
        "actionTime" : "2019-02-01T07:18:00"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-02-02T03:13:00",
    "bagArrivalDate" : "2019.02.02T03:13:00"
  } ]

例6-6 航空会社アプリケーションからのすべての乗客の初期搭乗ステーションのフェッチ

SELECT DISTINCT
$bag.fullname,
$bag.contactPhone,
$flt_src as SOURCE
FROM BaggageInfo $bag, 
$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src 
ORDER BY $bag.fullName

説明: BaggageInfo表のbagInfo配列のfltRouteSrcフィールドには、乗客がフライトを搭乗するソース・ステーションの詳細が含まれています。flightLegs配列の最初の要素は、最初の移動行程の詳細を保持します。

この問合せでは、flightLegs配列から最初の要素($bag.bagInfo[].flightLegs[0].fltRouteSrc値)を取得し、初期ステーションの詳細をフェッチします。$bagBaggageInfo表の別名で、$flt_src$bag.bagInfo.flightLegs[0].fltRouteSrcフィールドの別名であることに注意してください。FROM句でフィールド名を別名設定し、これらを残りのSELECT式に使用できます。

乗客名の昇順で行の順序を変更するには、ORDER BY句を使用します。

ノート:

この問合せでは、荷物の合計数と同じ数のエントリを取得します。乗客が2つの荷物を持って移動する場合、出力には2つのエントリが表示されます。これを回避するには、SELECT文でDISTINCTキーワードを使用します。これにより、選択した重複行の各セットの1つのコピーのみが返されます。
出力:
{"fullname":"Adam Phillips","contactPhone":"893-324-1064","SOURCE":"MIA"}
{"fullname":"Adelaide Willard","contactPhone":"421-272-8082","SOURCE":"GRU"}
{"fullname":"Dierdre Amador","contactPhone":"165-742-5715","SOURCE":"JFK"}
{"fullname":"Doris Martin","contactPhone":"289-564-3497","SOURCE":"BZN"}
{"fullname":"Elane Lemons","contactPhone":"600-918-8404","SOURCE":"MXP"}
{"fullname":"Fallon Clements","contactPhone":"849-731-1334","SOURCE":"MXP"}
{"fullname":"Gerard Greene","contactPhone":"395-837-3772","SOURCE":"SFO"}
{"fullname":"Henry Jenkins","contactPhone":"960-428-3843","SOURCE":"SFO"}
{"fullname":"Joanne Diaz","contactPhone":"334-679-5105","SOURCE":"MIA"}
{"fullname":"Kendal Biddle","contactPhone":"619-956-8760","SOURCE":"JFK"}
{"fullname":"Lisbeth Wampler","contactPhone":"796-709-9501","SOURCE":"LAX"}
{"fullname":"Lorenzo Phil","contactPhone":"364-610-4444","SOURCE":"SFO"}
{"fullname":"Lucinda Beckman","contactPhone":"364-610-4444","SOURCE":"SFO"}
{"fullname":"Mary Watson","contactPhone":"131-183-0560","SOURCE":"YYZ"}
{"fullname":"Michelle Payne","contactPhone":"575-781-6240","SOURCE":"SFO"}
{"fullname":"Omar Harvey","contactPhone":"978-191-8550","SOURCE":"MEL"}
{"fullname":"Raymond Griffin","contactPhone":"567-710-9972","SOURCE":"MSQ"}
{"fullname":"Rosalia Triplett","contactPhone":"368-769-5636","SOURCE":"JFK"}
{"fullname":"Teena Colley","contactPhone":"539-097-5220","SOURCE":"MSQ"}
{"fullname":"Zina Christenson","contactPhone":"987-210-3029","SOURCE":"MIA"}
{"fullname":"Zulema Martindale","contactPhone":"666-302-0028","SOURCE":"MIA"}