2012-04-19 48 views
2

什麼關係代數這兩個SQL查詢:的極限算關係代數

Select * from film where film_rating = 'PG' limit 20; 

我們如何才能證明限制?

Select * from actor, country where first_name='BOB' and country='In'; 

其中FIRST_NAME是演員的列和國家是國家表的列...在這兩個表之間沒有關係......他們是獨立的表...

所以我們這裏使用的連接操作?

+0

難道你沒有與你的2張桌子有關係的第3張桌子嗎? – 2012-04-19 13:58:29

回答

5

關於關係代數中的limit。傳統的關係代數不支持SQL中的limit。這個問題已被Li,Chang,Ilyas和Song在中認識和研究過。RankSQL:查詢代數和關係top-k查詢優化(SIGMOD 2005)。他們提出了單調評分函數F,其通過排序運算符tauF對結果進行排序。

+0

1) 其實我知道這個操作,但問題是如何組合選擇,項目點tauf Πfilm_id,標題,評分(σ等級=「PG」(電影)) 這是選擇部分又如何能我們把它和tauF結合起來? 2) 此外,tauF是用於排序,所以LIMIT操作內置執行排序操作? – Sam 2012-04-30 10:08:00

0

我只回答有關加入這裏的問題。

演員與電影之間存在m:n關係。它必須通過一箇中間表來實現,比如film_actors。此外,國家表格可能有一個像「In」這樣的短名稱和一個像「India」這樣的長名字。

SELECT film.title, film_actors.role_type, actor.name, country.long_name 
FROM 
    film 
    LEFT JOIN film_actors ON film.film_id = film_actors.film_id 
    LEFT JOIN actor ON film_actors.actor_id = actor.actor_id 
    LEFT JOIN country ON actor.country = country.short_name 

如果國家表只有一個與此短名稱列,那麼它是沒有意義的把它列入到你的查詢在所有。只有在國家有一些你想包括的附加信息的時候才能這樣做。

我在這裏使用了LEFT OUTER JOINS。只有在右側的表格可能並不總是有相關記錄的情況下才會要求它們。卡通片可能沒有演員。否則使用INNER JOIN