SQLクエリ(またはビュー定義)で「投影」という用語は何を指しますか


15

Oracleのドキュメントではザ・クエリオプティマイザ、下のビューのマージ、私は次のような情報を見つけました

ビューのマージの最適化は、選択、投影、および結合のみを含むビューに適用されます。つまり、マージ可能なビューには、集合演算子、集計関数、DISTINCT、GROUP BY、CONNECT BYなどが含まれていません。 (エンファシス鉱山)

しかし、私はそのような投影が実際に何を指しているのか推測することしかできません。

回答:


17

リレーショナル代数では、射影は操作で使用する列のサブセットを収集することを意味します。つまり、射影は選択された列のリストです。

クエリオプティマイザーのステップでは、投影は、基礎となるテーブルまたは演算子からの列のサブセットを含む記述のバッファーまたはスプール領域、または後続の操作で使用される列に基づく論理ビューとして現れます。

ビューでは、投影はビューの基になるクエリで選択された列のリストに相当します。


13

射影とは、テーブルで見つかったすべての列のセットのサブセットを指します。0 **から完全なセットまでの範囲で指定できます。

テーブルには、テーブルの2つの次元に対応する2つの「セット」があります。各テーブルには、のセットと行のセットがあります。テーブル内の個々の値は、これら2つの*セット**の特定の交差点で見つけることができます。ただし、Excelの場合のようにT60などのアドレスに「移動」しても、値は見つかりません。

リレーショナルテーブルに固有の順序はありません。覚えておくことが重要です。代わりに、単一の値を取得するには、列のサブセット(この場合は1つ)と行のサブセット(この場合は1つ)を選択します。使用可能なすべての列から1つの列のサブセットを選択するには、その名前とテーブル名のみを知っている必要があります。列名はテーブル内で一意です。

値が含まれる列を選択したら、その列の特定の行を選択する必要があります。ただし、行には列のような名前はありません。行を指定する方法はです。。。まあ、私たちは正確にはありません。。。探している価値について知っている何かを指定します。探している値に(文字通り)関連する何かを知る必要があります。十分な関連情報を指定できる場合、返される行のセットを探している行だけに減らすことができます。

大学生がバックパックを紛失したかのように考えてください。男がそれを失ったとしましょう。彼は遺失物取扱所に電話し、出席する女性は「​​うん、数十個のバックパックを持っている。それについて説明してくれないか」と言う。あなたは「まあ、青い?」と言います。彼女は「あなたは私に尋ねているのか、私に言っているのか」と答え、それから「私には青いものが8つあります。「見てみましょう、うーん、そうそう!それは私の数学1010本を持っていました。」「いいですね、今は4つになりました。」それから、あなたはあなたのガールフレンドであるルーシーに15分で会うことになっていたことを覚えています。ルーシーが大好き」。リッキー。」

投影あなたが失ったもの、つまりバックパックを言うことに例えるかもしれません。選択、その属性を説明することに例えることができます。青色で、内部に数学1010の本があり、下部に「I love Lucy」と書かれています。

SQLでも同じことを行います。まず、どのような情報を見たいか。第二に、あなたが見たいものを説明する基準。これらは、述語または真理の記述と呼ばれます。これらは、セットの1つ以上のメンバーに当てはまります。そうでない場合、値を返しません。

*一部のベンダーのSQL実装は、Oracleのネストされたテーブルなど、これらのルールを破る手段を提供します。ただし、標準の2次元テーブルは依然として優勢な形式です。

** CJ Dateは、「列のないテーブル」という非常に興味深い記事を書きました。私は彼の多くの「Writings」記事のほとんどを読んでいるので、読む価値があると感じました。私はそれらを強くお勧めします!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.