Заказ столиков в INNER JOIN - PullRequest
       67

Заказ столиков в INNER JOIN

0 голосов
/ 13 апреля 2020

Прочитав книгу Алан Больё, «Изучение» SQL. В topi c внутренних объединений это говорит о том, что какой бы ни был порядок таблиц в INNER JOIN, результаты одинаковы и приводят следующие причины:

Если вы не уверены, почему все три версии запроса учетной записи / сотрудника / клиента дают те же результаты, имейте в виду, что SQL - это непроцедурный язык, то есть вы описываете, что вы хотите получить и какие объекты базы данных должны быть задействованы, но это зависит от базы данных сервер, чтобы определить, как лучше всего выполнить ваш запрос. Используя статистику, собранную из объектов вашей базы данных, сервер должен выбрать одну из трех таблиц в качестве отправной точки (выбранная таблица впоследствии будет называться таблицей управления), а затем решить, в каком порядке объединить оставшиеся таблицы. Следовательно, порядок появления таблиц в предложении from не имеет значения.

Значит ли это, что, если статистика, собранная из объектов базы данных, изменится, результаты также изменятся?

1 Ответ

3 голосов
/ 13 апреля 2020

Значит ли это, что если статистика, собранная из объектов базы данных, изменится, то результаты также изменятся?

Нет. Один и тот же запрос всегда будет давать одинаковые результаты (при условии, конечно, что базовые данные одинаковы). Автор объясняет, что база данных может выбрать ту или иную стратегию для обработки запроса (начиная с той или иной таблицы, используя тот или иной алгоритм для объединения строк и т. Д.). Это решение принимается на основе многих факторов, некоторые из которых основаны на информации, доступной в статистике.

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

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

Обратите внимание, что существует крайний случай, когда база данных не гарантирует, что результаты будут одинаковыми при последовательном выполнении одного и того же запроса (например, запрос без предложения ограничения строки, но без order by): клиент отвечает за предоставление запроса, результаты которого определены правильно (язык дает вам достаточно веревки, чтобы повеситься, если вы действительно этого хотите).

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