| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Скобки в join |
| Автор: blur 12.7.2006, 23:57 |
| Приветик, Подскажите, для чего нужны скобки в join: (((t1 join t2 on .....) join t3 on ....) join t4 on ...) join .... и т.д и отличается это чем-то от того, если все это записать без скобок? |
| Автор: boevik 13.7.2006, 07:45 |
| Все зависит от базы данных. К примеру MSSQL скобки не нужны и порядок записи join-s не влияет на порядок связи таблиц при селекте. у Access влияет. |
| Автор: comtat 13.7.2006, 08:11 | ||
У MySql все делается без скобок
|
| Автор: blur 13.7.2006, 09:20 |
| А может кто знает как к этим скобкам относится Oracle? И еще, имеет ли значение порядок, в котором связываются таблицы? |
| Автор: Ignat 13.7.2006, 09:43 |
Зависит от того используется ли оптимизатор (хинты). |
| Автор: blur 13.7.2006, 11:39 | ||
А можно по-подробнее про оптимизатор? |
| Автор: Ignat 13.7.2006, 12:25 |
Об оптимизаторе есть смысл говорить применительно к конкретной БД. А Oracle я не знаю. |
| Автор: Sqlninja 18.7.2006, 11:42 | ||
В Oracle: Скобки не имеют значения. Порядок соединения таблиц имеет значение, т.к. непосредственно влияет на план выполнения и соответственно на производительность. |
| Автор: blur 18.7.2006, 12:58 | ||
А не можешь привести пример, чтобы понятнее было? |
| Автор: Sqlninja 18.7.2006, 13:42 | ||
Пример привести могу, но станет ли от этого понятнее, не знаю.
то есть оракл будет соединять таблицы именно в том порядке, в котором они указаны в предложении FROM. Общее правило такое, что первыми должны соединяться таблицы (подзапросы и т.д.), из которых в запросе идет высокоселективная выборка, (то есть много отфильтровалось, мало выбралось) и дальше по убыванию селективности. Попробуй разный порядок соединения для нескольких таблиц и сравни планы. 80%, что они будут отличаться. Почему не 100 - отдельная тема. Если делать так как ты писал выше, по ANSI, то подсказка не нужна, порядок и так ясен. |
| Автор: Mephisto 2.8.2006, 08:46 |
| На сколько я знаю порядок влияет на Outer join. А скобки, как по мне, не нужны. Т.к. порядок подключения ты указываешь после самого слова join. |
| Автор: Olimpic21 9.8.2006, 06:40 |
| можно вопрос?) кратце поясните какие джоиты есть и что означают?))) плз) |
| Автор: boevik 9.8.2006, 07:29 |
| INNER JOIN - результат записи между которыми есть соотвествие полей прописаных в условии связи (join) LEFT JOIN - все записи из левой таблицы с соотвествующими записями из правой. Если нет соотвествия из правой таблицы, то поля заполняются NULL RIGHT JOIN - все записи из правой таблицы с соотвествующими записями из левой. Если нет соотвествия из левой таблицы, то поля заполняются NULL FULL JOIN - все записи из обоих таблиц. Если нет соотвествия в какой либо таблице, поля заполняются NULL. Cross join - каждая запись левой таблицы связывается со всеми записями правой, т.е. декартово произведение. |
| Автор: Olimpic21 9.8.2006, 11:09 |
| boevik благодарю!) |