как наилучшим образом организовать внутренние объединения в (выбрать) заявление - PullRequest
8 голосов
/ 10 октября 2010

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

, когда мне нужно получить столбец из каждой таблицы, имеет ли значение, как организовать (внутренние объединения) ??

Select table1.column1,table2.column2,table3.column2
From table1 
Inner Join table2 on ..... etc
Inner Join table3 on .....

другими словами, можно ли поставить (table2) после (From) ??

Select table1.column1,table2.column2,table3.column2
From table2
Inner Join table1 on ..... etc
Inner Join table3 on .....

Ответы [ 2 ]

15 голосов
/ 10 октября 2010

Для большинства запросов порядок не имеет значения.

  • ВНУТРЕННЕЕ СОЕДИНЕНИЕ является ассоциативным и коммутативным, поэтому порядок таблиц не имеет значения
  • SQL является декларативным.То есть, как вы определяете запрос, а не оптимизатором.Он не делает это построчно, как вы написали.

Тем не менее ...

  • НАРУЖНЫЕ СОЕДИНЕНИЯ не являются ни ассоциативными, ни коммутативными
  • ДляДля сложных запросов оптимизатор будет «лучше угадывать», чем использовать все возможности, которые «стоят» слишком дорого.Порядок столов может имеет значение здесь
6 голосов
/ 10 октября 2010

Операция inner join имеет ассоциативность слева направо. Не имеет большого значения, в каком порядке вы пишете таблицы, если только вы не обращаетесь к таблицам в состоянии ON до их объединения.

Когда инструкция выполняется, ядро ​​базы данных определит наилучший порядок выполнения объединения, и это может отличаться от порядка, в котором они появляются в запросе SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...