6

はい、これは宿題の質問ですが、無実の人々を保護するために名前が変更されました。つまり、私は宿題自体を質問するのではなく、全体を理解できるようにその一部を質問しています。

次のようなSQLクエリがあるとします。

-クエリは、複数回発生する車の価格を一覧表示します。

select car_price from cars
group by car_price
having count (car_price) > 1;

関係代数におけるこれの一般的な形式はY(gl、al)Rです。ここで、Yはギリシャ語の記号、GLはグループへの属性のリスト、ALは集計のリストです。

したがって、関係代数は次のようになります。

 Y (count(car_price)) cars

では、そのステートメントに「having」句はどのように記述されているのでしょうか。速記はありますか?そうでない場合は、その関係から選択する必要がありますか?多分このような何か?

SELECT (count(car_price) > 1) [Y (count(car_price)) cars]

私はこれで何時間もインターネットを検索しましたが、HAVINGを関係代数に変換する例は見つかりませんでした。助けてくれてありがとう!

4

2 に答える 2

3

select count(*) from (select * from cars where price > 1) as cars;

リレーショナル クロージャとも呼ばれます。

于 2010-01-16T01:04:48.420 に答える
0

「関係代数 - 'having' 節を表現する適切な方法は?」という実際の質問に対する多かれ少なかれ正確な回答については、質問自体が次のことを示唆または推測しているように見えることを最初に述べる必要があります。 「THE」関係代数のようなものは存在しますが、その推定はまったく正しくありません。

代数は演算子の集合であり、誰でも好きな演算子の集合を定義できます。つまり、誰でも好きな代数を定義できます! Hugh Darwen は、彼の最新の出版物で、RESTRICT は代数の基本的な演算子ではないと述べていますが、他の多くの人はそのように考えています。

特に集計と要約に関しては、それらをリレーショナル代数にどのように組み込むべきかについてのコンセンサスはほとんどありません。代数の一部として COUNT() (引数値としてリレーションを取り、整数を返す) などの演算子を定義すると、代数のクロージャ プロパティに関して問題が生じる可能性があります。そのような演算子はリレーションを返さないためです ...

したがって、申し訳ありませんが、最も適切な回答は、この質問に対する決定的な回答を与えることはほとんど不可能であるように思われます...

于 2010-03-14T22:26:19.380 に答える