0

Я сделал два отношения с почтительными атрибутами, КОМАНДА (TeamName, TeamID) и PLAYER (TeamID, PlayerName, PlayerHeight)Простой Реляционная алгебра запросов

Я пытаюсь найти все названия команд, в которых все игроки (этой команды) имеют высоту более 6 футов.

Мои предположения связаны с тем, что TeamName и TeamID связаны между собой, поэтому команда TeamName X имеет TeamID 1 и PlayerName A, B, C может иметь PlayerHeight 6,7,8 и TeamID 1. Это примеры!

В моем понимании, что я должен сделать, это 1. Сделайте Отношение игроков с: проект-PlayerHeight, TeamID (игрок) 2. Как-то вычислить, если «для каждого» отдельный TeamID ALL возвращение PlayerHeight> 6, что TeamID 3. Я не могу понять последнюю часть, и я знаю, что первые два неверны.

Пожалуйста, помогите, я очень смущен, и если объяснят мне, я буду изучать его правильно. Спасибо!

+0

Это реляционная алгебра! –

+0

Извините бутон, удалил тег –

+0

π (название команды) (TEAM | x | (PLAYER - (σ (высота <6) PLAYER))) – sqlvogel

ответ

0

Группа по команде и принимать только тех, кто имеет ни один игрок < = высота 6

select t.teamname 
from team t 
join player p on p.teamid = t.teamid 
group by t.teamname 
having sum(case when p.playerheight <= 6 then 1 end) = 0 
+0

Спасибо, Юрген! Есть ли способ выразить это в реляционной алгебре? –

0

Да, вам нужно создать новое отношение между высотами игроков и команд путем присоединения ваших двух существующих отношений. Однако в этом конкретном случае вам не нужно проверять, что высота всех игроков для команды больше порога - вам просто нужно проверить, что максимальная высота игрока превосходит порог. Выраженный в SQL, это может выглядеть так:

SELECT TeamName, MIN(PLAYER.PlayerHeight) AS MinHeight 
FROM TEAM 
    JOIN PLAYER 
    ON TEAM.TeamID = PLAYER.TeamID 
GROUP BY TEAM.TeamName 
HAVING MinHeight > 6 
+0

Я забыл спросить, что это будет в формате реляционной алгебры вместо SQL, хотя это очень полезно, когда я его создаю. Спасибо! Можете ли вы перевести его в форму RA? –

Смежные вопросы