1

私のクエリには、持っていることと数えること、またはすべてが含まれています。これらはRA / DRC / TRCでどのように表されますか?SQLクエリをさらに単純化する必要がありますか?簡単な例を次に示します。

empl(employee (primary key), city)
managers(employee (primary key), manager (foreign key of employee))

X市のすべての従業員の(任意の都市の)マネージャーであるすべての従業員を見つけるとしたら、having/countを使用する必要があります。これがRA/DRC/TRCでどのように行われるかわからない。

このようなクエリの必要性は意味をなさないかもしれませんが、この質問の目的には理にかなっていると思います。

ありがとう

4

4 に答える 4

4

あなたの質問は少し曖昧に述べられました。X市にいるすべての従業員のマネージャーであるすべてのマネージャーを見つけることは確かに意図されていますか?

dportasが示したように、それはRAで完全に実行可能です。

方法は次のとおりです。

X市のすべての従業員のコレクションを取得します。そのEMPXを呼び出します。

すべてのマネージャーのコレクションを取得します。そのMGRSを呼び出します。

2つのデカルト積を作成します。そのMGRS_EMPXを呼び出します。

それから、どのマネージャーがどの従業員を管理しているかを示すテーブルの実際の値(必要な属性に適切に予測された値)を引きます。その違いは、Xにいる従業員と実際に存在するマネージャーのすべての組み合わせを保持しますが、そのマネージャーはその従業員を管理しません。

その違いをマネージャー属性に投影します。この関係は、X市にそのマネージャーによって管理されていない従業員が存在するように、どのマネージャーが存在するかを示します。

MGRSからこの関係を引きます。明らかに、この関係は、X市にそのマネージャーによって管理されていない従業員が存在しないように、どのマネージャーが存在するかを示します。

存在記号のこの否定を全称記号として書き直すと、これがまさにあなたが望む結果であることが明らかになります:存在しない(EMP:EMPはXにあり、EMPはMGRによって管理されます)=== FORALL EMP:NOT(EMPはXにありますAND EMPはMGRによって管理されます)=== FORALL EMP :( EMPはXにないか、EMPはMGRによって管理されます)=== FORALL EMP:(EMPがXにある場合、EMPはMGRによって管理されます)。

そして、これらはすべて完全に細かい代数演算です。

(サイドエクササイズ:X市に従業員がまったくいない場合にどうなるかを確認してください。)

于 2011-10-11T23:16:28.200 に答える
3

リレーショナル除算は、特定の例に対する答えです。集計は必要ありません。除算は代数の一部です。

より一般的な質問は、可能なSQL結果がリレーショナル結果と同じであるかどうかを判断する際の問題があるため、複雑な質問です。重複する行を返すSQLクエリは、そうでないリレーショナル式と同等ですか?SQLスタイルのnullを使用するSQLクエリは、任意のリレーショナル式と同等ですか?SQL構文のみを使用して、属性なしのリレーショナルプロジェクションをどのように表現しますか?

唯一の賢明な答えは、SQLモデルとリレーショナルモデルはまったく異なり、互換性のないものであると言うことだと思います。あなたはおそらくそれらの間の対応を一生懸命探しに行くべきではありません。

于 2011-10-11T21:00:05.080 に答える
1

集計クエリはRAでは表現できません

于 2011-10-11T20:31:56.660 に答える
-1

質問を単純化しすぎたかもしれませんが、X市で従業員のマネージャーを見つけることは、単純な参加であり、カウントや所有はありません。

編集:

select  * 
from managers m,
( select employee from empl where city = 'XXXXX' ) e
where m.employee = e.employee
于 2011-10-11T20:39:17.850 に答える