レコードの操作
フィールド・ステップを使用して、レコードからフィールドの値を選択できます。たとえば、フロリダに居住する個人のID、姓および都市を戻すには、次のようにします。
sql-> SELECT id, lastname, p.address.city
FROM Persons p WHERE p.address.state = "FL";
+----+----------+------------+
| id | lastname | city |
+----+----------+------------+
| 3 | Morgan | Middleburg |
+----+----------+------------+
1 row returned
前述の問合せでは、パス式p.address.state
は2つのフィールド・ステップで構成されています。.address
は現在の行のaddressフィールドを選択し(行は、フィールドが行の列であるレコードとして表示できます)、.state
は現在の住所のstateフィールドを選択します。
サンプル・レコードには、電話番号の配列が含まれています。パス・ステップとシーケンス比較演算子の組合せを使用して、この配列に対する問合せを作成できます。たとえば、市外局番が423である電話番号を持つ個人の姓を戻すには、次のようにします。
sql-> SELECT lastname FROM Persons
p WHERE p.address.phones.areacode =any 423;
+----------+
| lastname |
+----------+
| Morrison |
+----------+
1 row returned
前述の問合せでは、パス式p.address.phones.areacode
によって、個人のすべての市外局番が戻されます。次に、この市外局番のシーケンスに数値423が含まれる場合、=any演算子はtrueを戻します。フィールド・ステップ.areacode
が配列フィールド(phones)に適用されることにも注意してください。これは、配列にレコードまたはマップが含まれている場合に許可されます。この場合、フィールド・ステップは配列の各要素に順番に適用されます。
次の例では、3つの関連付けを持つすべての個人が戻されます。connectionsの後に[]が使用されていることに注意してください。これは、connections配列のすべての要素をシーケンスとして戻す配列フィルタ・ステップです(これにより、配列のネストが解除されます)。
sql-> SELECT id, firstName, lastName, connections from Persons where
connections[] =any 3 ORDER BY id;
+----+-----------+----------+-------------+
| id | firstName | lastName | connections |
+----+-----------+----------+-------------+
| 1 | David | Morrison | 2 |
| | | | 3 |
+----+-----------+----------+-------------+
| 2 | John | Anderson | 1 |
| | | | 3 |
+----+-----------+----------+-------------+
| 4 | Peter | Smith | 3 |
| | | | 5 |
| | | | 1 |
| | | | 2 |
+----+-----------+----------+-------------+
| 5 | Dana | Scully | 2 |
| | | | 4 |
| | | | 1 |
| | | | 3 |
+----+-----------+----------+-------------+
4 rows returned
この問合せでは、表の主キーに対してソートが実行されているため、ORDER BYを使用して結果をソートできます。次の項では、索引を使用した主キー以外のフィールドのソートを示します。
配列に含まれるデータに対する問合せの例をさらに見るには、配列の操作を参照してください。