2012-04-19 2 views
2
이 두 SQL 쿼리에 대한 관계 대수 무엇입니까

: 관계 대수는

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

우리는 어떻게 한계를 보일 수 있는가? FIRST_NAME 배우의 열과 나라

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

이 두 테이블 사이에 관계가 없다 ... 국가 테이블의 컬럼입니다 ... 그들은

그래서 우리는 여기 조인 연산자를 사용할 수 있습니다 ... 독립적 인 테이블입니다 ?

+0

두 번째 테이블과의 관계가있는 세 번째 테이블이 없습니까? –

답변

5

관련성있는 대수에서 limit을 사용하십시오. 전통적인 관계형 대수는 SQL에서 limit과 같은 것을 지원하지 않습니다. 이 문제는 에있는 Li, Chang, Ilyas 및 Song에 의해 인식되고 연구되었습니다. RankSQL : 관계형 최상위 -k 쿼리에 대한 쿼리 대수와 최적화 (SIGMOD 2005). 그들은 정렬 연산자 tauF에 의해 결과 순위를 매기는 단조로운 점수 함수 F을 제안했습니다.

+0

1) 사실 나는이 연산자에 대해 알고 있지만 문제는 선택, 프로젝트 및 tauF Π film_id, 제목, 평가 (σ 평가 = 'PG'(필름)) 이 다음 선택 부분에 대해 어떻게 할 수 있습니다를 결합하는 방법입니다 우리는 그것을 tauF와 결합합니까? 2) 또한 tauF는 정렬 용이므로 LIMIT 작업 inbuilt가 정렬 작업을 수행합니까? – Sam

0

여기에 합류하는 것에 대한 질문에만 답변하고 있습니다.

액터와 필름 사이에 m : n 관계가 있습니다. 중간 테이블 (예 : film_actors)을 통해 실현되어야합니다. 또한 country 테이블에는 "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