Есть ли конкретный порядок выполнения в запросе SQL? - PullRequest
0 голосов
/ 04 ноября 2018

Я не совсем понимаю порядок выполнения SQL-запросов.

Например, (Inner join в MySQL в приведенном ниже коде), между предложениями WHERE и SELECT * FROM, какое из них будет интерпретировано и выполнено первым?

То есть, приведенный ниже запрос сначала возвращает * (все) из tables data, а затем находит случаи, соответствующие условию WHERE? или они просто находят список data, который соответствует условию WHERE, а затем SELECT * FROM из результата WHERE?

SELECT * FROM customers, orders
WHERE customers.id = orders.customer_id;

Как и в предыдущем случае, мне интересно, как вообще выполняются SQL-запросы.

1 Ответ

0 голосов
/ 04 ноября 2018

Для оценки текста запроса существует логический порядок, но ядро ​​базы данных может выбирать, в каком порядке выполнять компоненты запроса, основываясь на том, что является наиболее оптимальным. Логический порядок разбора текста приведен ниже. Именно поэтому, например, вы не можете использовать псевдоним из предложения SELECT в предложении WHERE. Что касается процесса разбора запроса, псевдоним еще не существует.

  1. FROM

  2. ON

  3. OUTER

  4. WHERE

  5. GROUP BY

  6. CUBE | ROLLUP (их нет в MySQL, но есть в некоторых других диалектах SQL)

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ЗАКАЗАТЬ ПО

  11. LIMIT (или, в MSSQL, TOP)

См. документацию Microsoft (см. «Порядок логической обработки оператора SELECT») для получения дополнительной информации об этом.

...