2013-08-30 23 views
0
SELECT * FROM Schools JOIN Masts on Schools.City = Masts.City 

變爲:檢查我的SQL關係代數?

Schools ⋊ Masts = σSchools.city = masts.city SCHOOLS X MASTS 

am我有這正確嗎?希望有人在接下來的20分鐘左右快速回答。

回答

1

如果您沒有這本書的副本:Applied Mathematics for Database Professionals,那麼您確實應該查看它。它非常幫助我解決這些問題。 (精裝是一個真正的發現,但只有一個副本,它的方式太昂貴—但也有軟封面版本和可用的電子書格式,太。)

此外,檢查出這個非常好的Wikipedia文章關係代數論。

上面的維基百科文章顯示,您要完成的操作稱爲equijoin,它是θ -join的專用形式。使用你上面的例子,你應該有輸出如下:

令:

  • 學校→ S;
  • 桅杆→ M
  • θ→ =

然後:

S⨝ θ M→ σ θ(S × M)

在書中應用數學數據庫專業人士,作者用「下級」關係代數來定義SQL JOIN。定義如下:

令:

  • 學校→ S
  • Mast→中號

然後:

{S∪ m | s∧ S∧ ∈ M∧ s(城市)= m(城市)}

作者進一步使用操作符⊗ (也許是更容易爲他們發佈的符號,而不是使用傳統的⨝符號—是沒有意義的,雖然,因爲他們沒有使用乳膠—但我會與傳統的符號棒):

R⨝ θ T→ {r∪ t | r∧ R∧ t𢈈 T∧ 「- [R是相容的」}

兼容性爲 「用戶定義的」,因此&#x2a1d; θ。 θ可以是任何關係運算符,<,>等。當測試兩個屬性等於作爲成功連接條件的結果時,則θ&#x2192; =,如前所述,這是一個專門的θ -join被稱爲equijoin

所以,畢竟那個:

R&#x2a1d; θ T&#x2192; σ θ(R × T)&#x2192; {r&#x222a; t | r&#x2227; R&#x2227; t&#x22208; T&#x2227; 「[R兼容」}

我知道這是從您發佈的更晚20多分鐘,但希望有人發現了它有幫助。