Главная страница
Содержание
 
 

Оператор SELECT – выборка с фильтром


Язык запросов в SQL состоит из единственного оператора – SELECT, Синтаксис которого имеет следующий вид:
SELECT [ ALL| DISTINCT] <Список полей>|*
FROM <Список таблиц>
[WHERE <Предикат-условие выборки или соединения>]
[GROUP BY <Список полей результата>]
[HAVING <Предикат-условие для группы>]
[ORDER BY <Список полей, по которым упорядочить вывод>];
Ключевое слово SELECT сообщает СУБД, что данная команда является запросом. Все запросы на выборку данных начинаются этим словом с последующим пробелом. Рассмотрим параметры, которые могут следовать за ним: FROM - указывает источник данных в виде списка таблиц, либо в виде объединений, либо в виде подзапроса с обязательным указанием псевдонима. WHERE – указывает условия для выборки в виде предиката. ALL – в результирующий набор попадут все возможные строки (в случае декартового произведения отношения – все возможные сочетания), а значит повторения исключены не будут. Используется по умолчанию. DISTINCT – противоположен ALL – в результирующем наборе не будет присутствовать два одинаковых кортежа, т.е. совпадающих по значениям своих атрибутов. Рассмотрим пример выполнения запроса требующего применения DISTINCT (пример 1).

Важно понять, что декартового произведение двух отношений в приведенном примере возвращает 12 кортежей, а применение условия оставляет 4 из них, 3 из которых совпадают в значениях своего единственного атрибута. Поэтому для того, чтобы убрать повторы, после SELECT необходимо написать ключевое слово DISTINCT. Рассмотрим подробнее предикат из секции WHERE. В нем описано условие для выбираемых кортежей, т.е. будут выбраны только те кортежи, для которых это условие совпадает, а именно поля Номер_зк совпадают по своему значению. При обращении к полям из разных отношений (таблиц), имеющим одинаковые названия внутри одного запроса необходимо указывать название таблицы (пример 1). ORDER BY – указывает по каким полям в какой очередности и в каком направлении (по возрастанию или по убыванию) проводить сортировку. Для указания направления используются ключевые слова ASC (по возрастанию) – используется по умолчанию и DESC (по убыванию). (пример 2).


В выражении условий раздела WHERE могут быть использованы следующие предикаты:
Предикаты сравнения (=, <>, >, >=, <, <=), которые имеют традиционный смысл.
Предикат Between A and B – принимает значения между А и В. Предикат истинен, когда сравниваемое значение попадает в заданный диапазон, включая границы диапазона. Одновременно в стандарте задан и противоположный предикат Not Between A and B.
Предикат вхождения в множество IN (множество) истинен тогда, когда сравниваемое значение входит в множество заданных значений. При этом множество значений может быть задано простым перечислением или встроенным подзапросом.
Предикаты сравнения с образцом LIKE и NOT LIKE. Предикат LIKE требует задания шаблона, с которым сравнивается заданное значение, предикат истинен, если сравниваемое значение соответствует шаблону, и ложен в противном случае. Предикат NOT LIKE имеет противоположный смысл. Шаблон может содержать % (* для Access) для обозначения любого числа любых символов; _ (? для Access) для обозначения любого одного символа.
Предикат сравнения с неопределенным значением IS NULL. Для выявления равенства значения некоторого атрибута неопределенному значению применяют специальные стандартные предикаты: <имя атрибута> IS NULL и <имя атрибута> IS NOT NULL
Предикат существования EXIST и не существования NOT EXIST. Применяется во вложенных запросах для определения непустого или пустого множества, являющегося результатом выборки. (пример 3).