极限算子的关系代数

时间:2012-04-19 13:50:28

标签: sql relational-algebra

这两个SQL查询的关系代数是什么:

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

我们如何显示限制?

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

其中first_name是actor的列,country是country table的列......这两个表之间没有关系......它们是独立的表...

我们可以在这里使用join运算符吗?

2 个答案:

答案 0 :(得分:5)

关于关系代数中的limit。传统的关系代数不支持SQL中的limit之类的东西。 Li,Chang,Ilyas和Song在 RankSQL:查询代数和关系top-k查询的优化(SIGMOD 2005)中已经认识并研究了这个问题。他们提出了单调评分函数 F ,它通过排序运算符 tauF 对结果进行排名。

答案 1 :(得分: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