Скажем, у меня есть эта схема.Ассоциативность и коммутативность внутренних объединений sql
Boats
_____
bid
bname
Reserves
________
sid
bid
date
Sailors
_______
sid
sname
Я знаю, что внутренние соединения должны быть как ассоциативной и коммутативной, но я не могу понять, почему.
Учитывая запрос:
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Boats) NATURAL INNER JOIN Reserves
Я имею в виду, что это должно вернуться null
так Моряки и лодки не имеют общих полей, в то время как:
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Reserves) NATURAL INNER JOIN Boats
должен возвращать имена моряков и имена которые они зарезервировали.
Скажите, пожалуйста, почему внутренние соединения должны быть как коммутативными, так и ассоциативными.
Спасибо!
так и тогда, изменение в упорядочении или группировке в внутренние соединения будут влиять только на скорость запроса? – user3903214
Я не знаю, но я сомневаюсь, что скорость будет иной. Я ожидаю, что планировщик запросов выберет примерно один и тот же план выполнения для обоих запросов. Вы можете протестировать, набив некоторые случайные (ish) данные в таблицы, затем используя [EXPLAIN] (http://www.postgresql.org/docs/current/static/sql-explain.html). –
@ user3903214 Но если вы выбираете и группируете (и, возможно, агрегатируете), то это соответствует комбинации других операций, поэтому важно, как действуют комбинации этих операторов, а не только комбинации соединения. – philipxy