Уточняющие предложения и их назначение
Таблица 9.1. Уточняющие предложения и их назначение
Уточняющее предложение | Для чего предназначено |
from | Указывает, из каких таблиц брать данные |
where | Фильтрует строки, которые не соответствуют условию поиска |
group by | Группирует строки в соответствии со значениями в столбцах группирования |
having | Фильтрует группы, которые не соответствуют условию поиска |
order by | Сортирует результаты предыдущих предложений перед получением окончательного вывода |
Если используется больше чем одно из этих предложений, то они должны располагаться в следующем порядке:
SELECT список_столбцов
FROM список_таблиц
[WHERE условие_поиска]
[GROUP BY столбец_группирования]
[HAVING условие_поиска]
[ORDER BY условие_упорядочивания] ;
Ниже описывается, как работают уточняющие предложения.
- Предложение WHERE — это фильтр, который выбирает строки, удовлетворяющие условию поиска, и отбрасывает все остальные.
- Предложение GROUP BY создает группы из строк, отобранных с помощью предложения WHERE, каждая из которых соответствует какому-либо значению из столбца группирования.
- Предложение HAVING — это другой фильтр, который обрабатывает каждую из групп, созданных с помощью предложения GROUP BY, и выбирает те из них, которые удовлетворяют условию поиска, отбрасывая все остальные.
- Предложение ORDER BY сортирует все, что остается после того, как все предыдущие предложения проведут обработку таблицы (или таблиц).
Квадратные скобки ([]) означают, что предложения WHERE, GROUP BY, HAVING и ORDER BY не являются обязательными.
SQL выполняет эти предложения в следующем порядке: FROM, WHERE, GROUP BY, HAVING и SELECT. Предложения работают по принципу конвейера, когда каждое из них получает результат выполнения предыдущего предложения, обрабатывает этот результат и передает то, что получилось, следующему предложению. Если этот порядок выполнения переписать в виде функций, то он будет выглядеть следующим образом:
SELECT (HAVING (GROUP BY (WHERE (FROM...) ) ) )
Предложение ORDER BY выполняется уже после SELECT. Оно может обращаться только к тем столбцам, которые перечислены в списке, находящемся после SELECT. К другим же столбцам из таблиц, перечисленных в предложении FROM, предложение ORDER BY обращаться не может.