Порядок запросов в SQL

424
19 июня 2017, 20:15

Только начинаю разбираться с SQL и возник такой вопрос: помимо стандартного порядка SELECT ... FROM ... WHERE ... возможны ли следующие комбинации:

  1. SELECT ... FROM (SELECT ... FROM ... WHERE ... )
  2. SELECT ... WHERE ... FROM
  3. SELECT ... GROUP BY ... FROM ...

Заранее спасибо за ответ!

Answer 1

Давайте сначала разберем, в каком порядке выполняется sql-запрос (рассмотрим по стандарту):

  1. FROM - создаём простынку из данных
  2. WHERE - накладываем условия
  3. GROUP BY - группируем, если есть агрегирующие функции
  4. HAVING - условия на агрегирующие функции
  5. SELECT - выбор нужных столбцов и вычисления
  6. ORDER BY - сортировка

Теперь рассмотрим порядок записи частей запроса:

SELECT column_name
FROM table_name
WHERE conditions
GROUP BY some_column_names
HAVING agg_column_name conditions
ORDER BY column_names desc/asc

Порядок записи запроса строго, как показано выше. Естественно, в запросе может не быть условий, агрегирующий функций и т.д., но суть остаётся такая.

Теперь по порядку ответы на вопросы:

  1. Да, такое возможно. Говоря простым языком, результат выполнения sql-запроса вернет таблицу, состоящую из строк и столбцов, поэтому вместо имени таблицы во FROM вы также можете использовать запрос, который вернёт некоторую таблицу, с которой вы уже будете работать. По сути, какая разница - есть у вас таблица в БД, или вы сами сделаете таблицу и будете использовать её потом?
  2. Нет, см. порядок построения запроса. Сначала строится простынка, потом лишь накладываются условия. По сути, sql-запрос можно интерпретировать простым русским языком (а точнее английским, там всё закономерней, в русском можно менять слова местами): выбери (select) из таблицы (from) данные с условиями (where), отсортировав их по такому-то признаку.
  3. Аналогично пункту 2.

Почитайте учебник, там всё простым языком расписано.

READ ALSO
RedBeanPHP … как узнать последнее значение

RedBeanPHP … как узнать последнее значение

Простите за нубский вопрос

281
Java проблемы с методом

Java проблемы с методом

Возвращает ошибку:

341
Как получить тип byte после операции int/int

Как получить тип byte после операции int/int

Ситуация: нужно получить тип byte после операции int/intЕсли результат входит в диапазон byte, то вывести его, если не входит, то вывести сообщение-ошибку

254
Как качать .json с интернета, а не из приложения?

Как качать .json с интернета, а не из приложения?

Использую данные в формате JSON , которые хранятся внутри приложения в папке assets/station/musicjson

278