web-dev-qa-db-ja.com

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

OracleのドキュメントThe Query OptimizerView Merging で、次の情報が見つかりました

ビューのマージの最適化は、選択、projections、および結合のみを含むビューに適用されます。つまり、マージ可能なビューには、セット演算子、集約関数、DISTINCT、GROUP BY、CONNECT BYなどは含まれません。 (強調鉱山)

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

15

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

クエリオプティマイザーステップでは、プロジェクションは、基になるテーブルまたは演算子からの列のサブセットを含むいくつかの説明のバッファーまたはスプール領域、または後続の操作で使用されるそれらの列に基づく論理ビューとして現れます。

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

Projectionは、テーブルで見つかったすべての列のセットのサブセットであり、そのサブセットを返します。 0 **から完全なセットまでの範囲をとることができます。

テーブルには、テーブルの2つのディメンションに対応する2つの「セット」があります。各テーブルにはcolumnsのセットとrows。テーブル内の個々の値は、これら2つの*セット**の特定の交差にあります。ただし、T6などのアドレスに "移動"しても、Excelと同じように値が見つかりません。

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

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

大学生がバックパックを紛失したかのように考えてください。男がそれを失ったとしましょう。彼は遺失物取扱所に電話し、出席した女性は「そうです、私たちは数十のバックパックを持っています。それを説明できますか?」あなたは「まあ、それは青いですか?」と言います。彼女はそれに「あなたは私に尋ねるか、私に言っていますか」と答え、そして「私は8つの青いものを持っています、それ以上にうまくやらなければならない、そしてあなたはそれについてあまり確信が持てなかった」と言います。あなたは「ええと、ええと、ええと、ええと、それは私の数学1010の本を含んでいた」と言います。 「よし、今は4歳になっている」その後、15分で恋人のルーシーに会うことになっていることを思い出してください。それにより、Math 1010に飽きて書いたときに、バックパックの底に実際の小さな文字で「私は別の思い出を引き起こしました。ルーシーが大好きです。」彼女はそれらをひっくり返し、確かに、「3番目は 'I love Lucy'と書いてあります。さあ、拾ってくださいRicky。」

Projectionは、whatあなたが失った-バックパックと言うことに似ているかもしれません。 選択は説明の属性に似ている場合があります:青色で、内部に数学の1010の本があり、「I love Lucy 」と書かれています。

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

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

** C.J.デートは「列のないテーブル」と呼ばれる非常に興味深い記事を書きました。彼の多くの「執筆」記事のほとんどをしているので、私はそれを読む価値があるとわかりました。私はそれらを強くお勧めします!

13
user6612