SELECT fieldlist FROM table \ WHERE condition \ GROUP BY groupfield \ ORDER BY orderfield \ LIMIT limitcount OFFSET offsetcount
もとの文の様々な要素が次のような方法を使ってどのようにビューを書くかということに影響します:
SELECT fieldlist
SQLステートメントでのフィールドのリストはmap()
関数内の対応するキーもしくは値のどちらかに影響し、データを選択もしくはreduceするかどうかにも依存します。次を参照してください。「Map/ReduceへのSQL フィールド選択(SELECT
)の翻訳」
FROM table
Couchbase Serverにはテーブルによる区切りがなく、ひとつ以上のバケットの境界を越えてビューの実行をすることはできません。しかし、様々なレコードタイプを識別するためにドキュメント内のtype
フィールドを使用する場合、選択するためにmap()
関数を使用すべきです。
実例については、「選択されたレコードの出力」を参照してください。
WHERE condition
map()
関数と、ビューキーに作成されたデータはどのような問い合わせができるか、したがってどのようなレコードの選択が行われるかに直接影響します。実例については、「Map/ReduceへのSQL WHERE
の翻訳」を参照してください。
ORDER BY orderfield
ビュー内のレコード出力の順序は、ビュー生成のmap()
関数フェーズの間、指定されたキーによって直接制御されます。
さらなる議論については、「Map/ReduceへのSQL ORDER BY
の翻訳」を参照してください。
LIMIT limitcount OFFSET offsetcount
map/reduceとビューのメカニズムでは様々なページング戦略が利用可能です。直接的なパラメータに関する議論は、「SQL LIMIT
と OFFSET
の翻訳」で見ることができます。代替ページングソリューションは、「ページネーション」を参照してください。
GROUP BY groupfield
SQLでのグループ化は、reduce()
関数を使用してビュー内で処理されます。比較例については、「Map/ReduceへのSQL GROUP BY
の翻訳」を参照してください。
ビュー、map()
関数とreduce()
関数、選択パラメータ、その他様々なパラメータの間の相互作用は、以下のテーブルによります:
SQLステートメントの部位 | ビューのキー | ビューの値 | map() 関数 | reduce() 関数 | 選択パラメータ | その他パラメータ | |
SELECT fields | あり | あり | あり | なし[a] | なし:GROUP BY とSUM() もしくはCOUNT() 関数のみ | なし | なし |
FROM table | なし | なし | あり | なし | なし | なし | |
WHERE clause | あり | なし | あり | なし | あり | なし | |
ORDER BY field | あり | なし | あり | なし | なし |
descending
| |
LIMIT x OFFSET y | なし | なし | なし | なし | なし | limit , skip | |
GROUP BY field | あり | あり | あり | あり | なし | なし | |
[a] |
SQLでは、基本的な問い合わせの構造が様々な問い合わせを組みあわせるために使用されます。たとえば、'SELECT fieldlist FROM table WHERE xxxx
と同じようなものは様々な句を使って利用できます。
map/reduceとCouchbase Serverでは、様々なクエリタイプを処理するために複数のビューを作成する必要があります。たとえば、すべてのブログ投稿で特定の日付の問い合わせを実行するためには、投稿者による選択で必要となるものとは非常に異なるビュー定義を必要とします。