Структура оператора SELECT
Язык запросов строится на единственном операторе SELECT, используемом чаще всех операторов языка SQL. Он производит выборки данных из таблиц БД и предоставляет их пользователям в необходимом виде. Практически SELECT реализует всю мощь реляционной алгебры.
В наиболее общем виде он имеет следующий формат:
SELECT [DISTINCT или ALL] <имена полей возвращаемых запросом>
FROM <имена таблиц используемых в запросе>
WHERE <условия отбора записей>
GROUP BY <имена группируемых полей>
HAVING <условия отбора>
UNION <оператор select>
PLAN <план выполнения запроса>
ORDER BY <список полей сортировки>
SELECT - ключевое слово, которое сообщает СУБД, что эта команда - запрос. Все запросы начинаются этим служебным словом с последующим пробелом. За ним может следовать способ выборки - с удалением дубликатов записей (DISTINCT) или без удаления (ALL, по умолчанию). Затем через запятую следует список полей включаемых в результат запроса. Может использоваться символ «*» (звездочка) означает, что в результирующий набор включаются все поля из исходных таблиц или из указанной таблицы, например Товары.* (из таблицы товары выбираются все поля). При необходимости поля таблиц можно переименовать, для этого используется оператор AS.
РазделFROM - используется совместно с SELECT, должен присутствовать в каждом запросе. В нем, через запятую, перечисляются используемые в запросе таблицы. В случае если таблиц несколько, то запрос неявно выполняет декартово произведение. Таблицам можно присвоить имена-псевдонимы, что бывает полезно для осуществления операции соединения таблицы с самой собою или для доступа из вложенного подзапроса к текущей записи внешнего запроса. Все последующие разделы оператора SELECT являются необязательными.
Если необходимо из таблицы А (таблица 6.1) выбрать только записи в необходимых полях (Фамилия, Зарплата), т.е. выполнить проекцию то можно записать следующий код (результат - таблица 7.2):
SELECT A.Фамилия, A.Зарплата FROM А
Полностью вся таблица будет получена в следующем случае:
SELECT * FROM А
В разделе WHERE задаются условия отбора записей в результат запроса, т.е. условие которому должна удовлетворять запись, чтобы попасть в результат запроса, аналог операции селекции в реляционной алгебре.
В выражении условий раздела WHERE могут быть использованы следующие предикаты:
· Предикаты сравнения { =, <>, >, <, >=, <= }, которые имеют традиционный смысл, например, следующий код языка SQL использованный для таблицы 6.1 даст результат, приведенный в таблице 7.1:
SELECT * FROM А
WHERE Зарплата<3000
· Предикат Between A and В - принимает значения между А и В. Предикат истинен, когда сравниваемое значение попадает в заданный диапазон, включая границы диапазона. Одновременно в стандарте задан и противоположный предикат Not Between A and В, который истинен тогда, когда сравниваемое значение не попадает в заданный интервал, включая его границы. Например:
SELECT * FROM А
WHERE Зарплата Between 2000 and 3000
В результате выполнения этого запроса будут возвращены все записи, у которых значения поля «Зарплата» находятся в интервале от 2000 до 3000, включительно.
· Предикат вхождения во множество - IN (множество) истинен тогда, когда сравниваемое значение входит во множество заданных значений. При этом множество значений может быть задано простым перечислением или встроенным подзапросом. Одновременно существует противоположный предикат NOT IN (множество), который истинен тогда, когда сравниваемое значение не входит в заданное множество.
SELECT * FROM А
WHERE Фамилия IN(‘Иванов’, ‘Петров’)
В результирующий набор данных будут включены те записи, для которых значения поля «Фамилия» совпадут с элементами множества определенными предикатом сравнения IN, т.е. записи о сотрудниках: Иванов и Петров.
· Предикаты сравнения с образцом LIKE и NOT LIKE. Предикат LIKE требует задания шаблона, с которым сравнивается заданное значение, предикат истинен, если сравниваемое значение соответствует шаблону, и ложен в противном случае. Предикат NOT LIKE имеет противоположный смысл. По стандарту в шаблон могут быть включены специальные символы:
o символ подчеркивания (_) - для обозначения любого одиночного символа;
o символ процента (%) - для обозначения любой произвольной последовательности символов;
o остальные символы, заданные в шаблоне, обозначают самих себя.
SELECT * FROM А
WHERE Фамилия Like ‘П%’
В результате выполнения запроса будут получены все записи, значения поля «Фамилия» для которых совпадет с шаблоном ‘П%’, т.е. Все фамилии сотрудников начинающиеся с символа «П».
· Предикат сравнения с неопределенным значением IS NULL. Понятие неопределенного значения было внесено в концепции БД позднее. Неопределенное значение интерпретируется как значение, неизвестное на данный момент времени. При сравнении неопределенных значений не действуют стандартные правила сравнения: одно неопределенное значение никогда не считается равным другому неопределенному значению. Для вы явления равенства значения некоторого поля неопределенному применяют специальные стандартные предикаты: <имя поля>IS NULL и <имя поля > IS NOT NULL.
· Предикаты существования EXIST и не существования NOT EXIST. Эти предикаты относятся к встроенным подзапросам.
Раздел ORDER BY определяет список полей сортировки. Последовательность перечисления полей имеет важное значение и определяет порядок сортировки в результирующем отношении. Например, если первым полем списка будет указана Фамилия, а вторым Номер группы, то в результирующем отношении сначала будут собраны в алфавитном порядке студенты, и если найдутся однофамильцы, то они будут расположены в порядке возрастания номеров групп. Приведем простой пример сортировки записей по полю «Фамилия»:
SELECT * FROM А
ORDER BY Фамилия
В разделе GROUP BY определяется список полей группировки. При группировке записи таблиц разбиваются на группы. В группы собираются записи, имеющие одинаковые значения полей указанных в разделе GROUP BY. Данный раздел позволяет выполнять операции над группами с применением агрегатных функций указанных в таблице 21.1
Таблица 21.1 – Основные агрегатные (итоговые) функции
Функция | Результат |
COUNT | Количество строк или непустых значений полей, которые выбрал запрос |
SUM | Сумма всех выбранных значений данного поля |
AVG | Среднеарифметическое значение всех выбранных значений данного поля |
MIN | Наименьшее из всех выбранных значений данного поля |
MAX | Наибольшее из всех выбранных значений данного поля |
В разделе HAVING задаются предикаты-условия, накладываемые на каждую группу, и имеет тот же синтаксис, что и раздел WHERE. Другими словами раздел HAVING используется при группировке вместо раздела WHERE.
Агрегатные функции можно использовать без группировки, если вся таблица будет рассматриваться как одна группа и результатом запроса будет одна строка. Например, требуется определить количество экземпляров книг библиотеки, в этом случае запрос будет иметь вид:
SELECT COUNT(*) AS Количество
FROM Экземпляры;
Если требуется определить количество экземпляров книг имеющихся сейчас в библиотеке, тогда запрос примет вид:
SELECT COUNT(*) AS Количество
FROM Экземпляры
GROUP BY Наличие
HAVING Наличие = Да;
Дата добавления: 2015-11-18; просмотров: 985;