3

私が読んでいる本 (Querying SQL Server 2012) で、著者はデータベースがどのように機能するかの理論について語っています。彼は関係、属性、タプルなどについて言及しています。

彼は、T-SQL の一部の側面がリレーショナルではないという事実を頻繁に強調しています。次の抜粋のように:

結果がリレーショナルだった前のフェーズとは異なり、このフェーズの出力は順序が保証されているため、リレーショナルではありません。このフェーズの結果は、標準 SQL がカーソルと呼ぶものです。ここでのカーソルという用語の使用は概念的なものであることに注意してください。T-SQL は、クエリの結果に基づいて定義され、指定された順序で一度に 1 行ずつフェッチできる、カーソルと呼ばれるオブジェクトもサポートします。プレゼンテーションの目的で特定の順序でクエリの結果を返すことに関心がある場合や、呼び出し元が行を一度に 1 つずつフェッチするカーソル メカニズムを介してその方法で結果を消費する必要がある場合があります。ただし、そのような処理はリレーショナルではないことに注意してください. クエリの結果をリレーショナルな方法で処理する必要がある場合 (たとえば、クエリに基づいてビューのようなテーブル式を定義する (詳細は第 4 章で後述))、結果はリレーショナルである必要があります。また、データを並べ替えると、クエリ処理にコストがかかる可能性があります。結果行が返される順序を気にしない場合は、ORDER BY 句を追加しないことで、この不要なコストを回避できます。

のすべての実装には非リレーショナルにSQLする句があるため、(セットの後のセットが使用されている) もはやリレーショナルではないことが問題になるのはなぜですか?ORDER BYORDER BY

!=たとえば、移植性などに影響するため、不等式の代わりに使用するなど、非標準であると彼が言った場合は理解できますが<>、何かがリレーショナルである方が良い理由がわかりません。

啓発してください。

4

2 に答える 2

4

著者は、集合論(彼の用語では「リレーショナル」)の使用と、カーソルまたは同様の方法で行ごとに処理することについて言及しているようです。リレーショナルな方法でデータにアクセスすると、データベース エンジンは選択/結合/並べ替え/注文などを実行できます。カーソルとして一度に 1 つの行のみを処理するデータのセット全体。私の知る限り、ORDER BY句を追加してもクエリが「非リレーショナル」になるわけではありません。著者は、結果セットの順序を気にしない場合は、その句をクエリとデータベースから除外できることに注意してください。エンジンは、最終的に処理した順序でデータを返します。

また、句はデータベース エンジンによって最後に実行されることにも注意してください。ORDER BYつまり、クエリは「リレーショナル」な方法で処理され、最終的に順序付けられます。カーソルは最初のレコードから開始し、1 つずつ移動するため、操作全体がカーソル/クエリの定義に基づいて事前に決定された順序で実行されます。

于 2013-11-08T15:28:28.557 に答える