这两个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运算符吗?
答案 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