"Пристрелка" к нужным данным
В этой главе…
- Указание требуемых таблиц
- Отделение нужных строк от всех остальных
- Создание эффективных предложений where
- Как работать со значениями null
- Создание составных выражений с логическими связками
- Группирование вывода результата запроса по столбцу
- Упорядочение результата запроса
У системы управления базой данных есть две главные обязанности: хранение данных и обеспечение к ним легкого доступа. В хранении данных нет ничего особенного, ту же работу может выполнять и шкаф. А что действительно трудно – так это обеспечить удобный доступ к данным. Для этого необходимо иметь возможность выловить небольшое количество нужных данных из океана ненужных.
SQL позволяет использовать некоторые характеристики самих данных для определения, представляют ли они для вас интерес. Операторы SELECT (выбрать), DELETE (удалить) и UPDATE (обновить) сообщают ядру (engine) базы данных, т.е. той части СУБД, которая как раз и взаимодействует с данными, какие именно строки необходимо выбрать, удалить или обновить. Чтобы обрабатывались требуемые строки, в операторы SELECT, DELETE и UPDATE добавляются уточняющие предложения.
Уточняющие предложения
В SQL имеются следующие уточняющие предложения: FROM, WHERE, HAVING, GROUP BY и ORDER BY. Предложение FROM (из) сообщает ядру базы данных, с какой таблицей (или таблицами) он должен работать. Что касается WHERE (где) и HAVING (при условии), то эти предложения указывают характеристику, определяющую необходимость выполнения текущей операции над конкретной строкой. И наконец, предложения GROUP BY (группировать по) и ORDER BY (упорядочивать по) указывают, каким образом следует выводить строки, полученные из базы данных. Основные сведения по уточняющим предложениям приведены в табл. 9.1.
Таблица 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 обращаться не может.