3

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

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

我们如何显示限制?

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

其中 first_name 是演员的列,国家是国家表的列...这两个表之间没有关系...它们是独立的表...

那么我们可以在这里使用连接运算符吗?

4

2 回答 2

5

关于limit关系代数。传统的关系代数不支持limitSQL 中的任何东西。Li、Chang、Ilyas 和 Song 在RankSQL: query algebra and optimization for relational top-k queries (SIGMOD 2005)中已经认识到并研究了这个问题。他们提出了一个单调评分函数F,它通过排序算子tauF对结果进行排序。

于 2012-04-28T19:44:11.217 回答
0

我只是在这里回答关于加入的问题。

演员和电影之间存在着 am : 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

如果国家/地区表只有一个具有此短名称的列,那么将其包含在您的查询中根本没有意义。仅当国家/地区有一些您想要包含的其他信息时才这样做。

我在这里使用了左外连接。仅当右侧的表可能并不总是有相关记录时才会请求它们。一部动画片可能没有演员。否则使用INNER JOIN

于 2012-04-19T14:06:13.650 回答