Использование ,
обозначения не повсеместно считается плохой практикой, но я думаю, что это вполне мин теперь согласны с этим. Даже Oracle (пользователи которого, по-видимому, являются самыми вокальными сторонниками этого синтаксиса) рекомендуют не использовать его.
Но я не знаю, кто , который будет поддерживать смешивание ,
и синтаксис ANSI-92 в JOIN
. Он просто просит неприятностей.
SELECT
orders.order_id
FROM
orders
INNER JOIN
orders_items
ON orders.order_id = orders_items.order_id
INNER JOIN
items
ON orders_items.item_id = items.id
WHERE
items.vendor = '3'
GROUP BY
orders.order_id
SQL Optimiser не выполняет то, что вы указали. SQL - это просто выражение, из которого оптимизатор SQL получает план, чтобы дать результат, который подходит. Написав его, как описано выше, оптимизатор найдет то, что он видит как лучший порядок фильтрации, объединения, сортировки и т. Д., И которые являются лучшими индексами и т. Д., Чтобы использовать эти вещи.
EDIT
Я заметил людей, поддерживающих DISTINCT
над GROUP BY
.
В то время как DISTINCT
немного короче, он не быстрее и накладывает на вас ограничения. Вы не можете позже добавить COUNT(*)
, но с GROUP BY
вы можете.
Короче говоря, GROUP BY
может что угодно DISTINCT
может, но это не так, наоборот. Я использую только DISTINCT
в очень тривиальных фрагментах кода, поэтому я могу получить запрос на блеск на одной строке. Даже тогда я часто позже сожалею об этом немного по мере развития кода, и мне нужно вернуться к GROUP BY
.
Я думаю, что вы написали правильно. Вы можете присоединиться к таблицам с помощью оператора JOIN, а также в том, где оператор. Вы использовали оба в одном выражении (и оба они одинаковы с другим синтаксисом) –