这两个 SQL 查询的关系代数是什么:
Select * from film where film_rating = 'PG' limit 20;
我们如何显示限制?
Select * from actor, country where first_name='BOB' and country='In';
其中 first_name 是演员的列,国家是国家表的列...这两个表之间没有关系...它们是独立的表...
那么我们可以在这里使用连接运算符吗?
这两个 SQL 查询的关系代数是什么:
Select * from film where film_rating = 'PG' limit 20;
我们如何显示限制?
Select * from actor, country where first_name='BOB' and country='In';
其中 first_name 是演员的列,国家是国家表的列...这两个表之间没有关系...它们是独立的表...
那么我们可以在这里使用连接运算符吗?
关于limit
关系代数。传统的关系代数不支持limit
SQL 中的任何东西。Li、Chang、Ilyas 和 Song 在RankSQL: query algebra and optimization for relational top-k queries (SIGMOD 2005)中已经认识到并研究了这个问题。他们提出了一个单调评分函数F,它通过排序算子tauF对结果进行排序。
我只是在这里回答关于加入的问题。
演员和电影之间存在着 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