Вопрос

Впервые я столкнулся с реляционной алгеброй для вопроса баз данных сегодня, и я не могу найти ответ.

У меня есть 3 столы, пакет, канал и рынок.

Партия соединена с каналом и рынком на главных клавишах (ChanialID, MarketID).

Какова правильная запись для запроса такого рода:

select * from batch, channel, market 
where batch.channelID=channel.channelID AND batch.marketID=market.marketID

Спасибо


Если я правильно понял, мне нужно написать следующим образом:

π...(Batch⋈                                   Channel⋈                                Market
           (batch.channelID=channel.channelID)        (batch.marketID=market.marketID)
Это было полезно?

Решение

Это было бы партия ⋈ канал ⋈ рынок (Природные присоединения являются ассоциативными и коммутативными).

РЕДАКТИРОВАТЬ: Поскольку имена атрибутов одинаковы для каждого соединения (вы сравниваете batch.channelID с участием channel.channelID), вы в ситуации, когда запрос можно написать с натуральными присоединениями, и нет необходимости писать (xxx = yyy) под ⋈ оператор, когда он представляет естественное соединение.

Ты мог Напишите его как θ-соединения вместо этого, в этом случае ваш синтаксис будет практически правильным, но я чувствую, что используя θ-присоединения для представления естественных присоединений в мировой пропуске. Изменение, которое необходимо сделать, так это то, что θ-Joins не ассоциативно, вам нужно добавить кронштейны: (Пакетный канал) ⋈ Рынок

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top