Relational-Theory

關於 SQL 和關係代數的初學者問題

  • August 21, 2014

我正在做一些練習等待考試。我有些懷疑。

關係代數

  • >

這些是表格:

> > 報紙(Cod_n,Name_n,出版商) > > > 文章(Cod_a、標題、主題、Cod_N) > > >

要求:至少找出發表過有關摩托車主題的報紙的名稱

我的解決方案:π_name (σ_topic = “motorcycle” (newspaper naturaljoin article))

書的解:π_name(報紙naturaljoin σ_topic = “motorcycle” (article))

解決方案是否等效?它們之間的唯一區別是“運營成本”嗎?

  • >

該表與之前的練習相同。

請求:找出從未發表過摩托車主題的報紙的名稱

我的解決方案:π_name_n (newspaper naturaljoin (σ_topic noteegual “motorcycle” (article)

書的解決方案: π_name_n(newspaper naturaljoin (π_cod_n(newspaper) - π_cod_n (σ_topic = “motorcycle” (Article))

解決方案是否等效?

SQL

這些是表格:

> > 學生(matriculation_number,姓,名) > > > 考試(學生科目、成績、日期) > > >

要求:找出至少在 2000 年 1 月 1 日之後通過兩次考試的學生(顯示入學編號)

我的解決方案

> > 選擇不同的預科數 > > > 從學生參加預科考試號碼 = 學生 > > > 其中數據 > ‘2000-01-01’ > > > 除了 > > > 選擇不同的預科數 > > > 從學生參加預科考試人數 = 學生 > > > 其中數據 =< ‘2000-01-01’ > > >

本書的解決方案

> > 選擇不同的 e1.student > > > 從考試 e1 加入 e2 在 e1.student = e2.student > > > 其中 e1.subject < > e2.subject > > > 和 e1.date > ‘2000-01-01’ > > > 和 e2.date > ‘2000-01-01’ > > >

解決方案是否等效?

感謝您抽出寶貴的時間。對不起,我不知道如何插入關係代數的符號。

您的 sql 查詢錯誤:

- Assume there is a student s1 who has passed one exam 
 after '2000-01-01' and none before. 
 Your query results in {s1} - {} = {s1}. This will be a false positive.

- Assume there is a student s1 that passed three exams 
 after '2000-01-01' and one exam before. 
 Your query results in {s1} - {s1} = {}. This will be a false negative.

我在閱讀您的代數表達式時遇到了一些麻煩,但第一個看起來不錯。在加入之後進行選擇(主題 =“摩托車”)而不是在選擇中加入應該沒關係。

第二個不可能是對的。假設有一家報紙既發表了一篇關於摩托車的文章,也發表了一篇關於其他事物的文章。您的表情將選擇其他內容的文章,因此返回該報紙(錯誤地)。

引用自:https://dba.stackexchange.com/questions/74465