Условия JOIN лучше, чем предложения WHERE в T- SQL? - PullRequest
0 голосов
/ 17 февраля 2020

Я пришел к выводу, что вы можете делать одно и то же с большей частью времени. Есть ли способ сделать это более производительным в определенных обстоятельствах? Считается ли один лучше другого с точки зрения читабельности? SQL Сервер компилирует их в одно и то же?

Пример:

SELECT c.customer_name
,      o.order_id
FROM customers AS c
JOIN orders AS o ON c.customer_id = o.customer_id AND o.order_total > 50.00

VS

SELECT c.customer_name
,      o.order_id
FROM customers AS c
JOIN orders AS o ON c.customer_id = o.customer_id
WHERE o.order_total > 50.00

Пожалуйста, извините, если я что-то серьезно неправильно об этом или мой синтаксис неверен.

  1. Я довольно плохо знаком с SQL, и большая часть логики c в приложении, над которым я работаю на своей новой работе, находится в динами c SQL (я только начал свою первую работу по разработке 2 недели go)

  2. Это мой первый вопрос о переполнении стека

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

1 Ответ

1 голос
/ 17 февраля 2020

Это зависит от типа JOIN.
Для ВНУТРЕННИХ СОЕДИНЕНИЙ разницы нет, оптимизатор будет обрабатывать их одинаково.
Для ВНЕШНИХ СОЕДИНЕНИЙ есть ключевое различие.
Для следующего запроса:

SELECT * FROM employee AS e 
LEFT OUTER JOIN department AS d ON e.depId=d.depId AND d.location = 'USA'

Он вернет всех сотрудников и присоединится к департаментам США.

SELECT * FROM employee AS e 
LEFT OUTER JOIN department AS d ON e.depId=d.depId
WHERE d.location = 'USA'

Этот вернет только сотрудников в департаментах США (другими словами, он преобразует объединение в INNER JOIN).

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