- •8.1. Основные элементы sql Операторы
- •Типы данных
- •Константы
- •Выражения
- •Встроенные функции
- •Отсутствующие, неподходящие или неизвестные данные
- •8.2. Использование sql для выборки (чтения) данных
- •8.3. Отбор строк из таблиц
- •Сравнение
- •Проверка на принадлежность диапазону значений
- •Проверка на членство во множестве
- •Проверка на соответствие шаблону
- •Проверка на равенство значению null
- •Составные условия поиска
- •Вопросы для самоконтроля
8.2. Использование sql для выборки (чтения) данных
Язык SQL предназначен в первую очередь для выполнения запросов. Для построения SQL – запросов, задающих выборку данных, используется оператор SELECT, который является наиболее функциональным, мощным из всех операторов SQL.
ОператорSELECT читает данные из БД и возвращает их в виде таблицы результатов запроса (рис. 8.3).
Рис. 8.3. Выполнение SQL-запроса на чтение
Оператор SELECT состоит из шести предложений, или фраз (рис. 8.4). Предложения SELECT и FROM являются обязательными. Четыре остальные включаются в оператор по мере необходимости. Функции каждого из предложений следующие:
в предложении SELECT указывается список возвращаемых столбцов, которые должны быть включены в таблицу результатов запроса. Возвращаемые столбцы могут содержать значения, считываемые из столбов таблиц базы данных, или значения, вычисляемые во время выполнения запроса;
в предложении FROM указывается список таблиц, которые содержат элементы данных, считываемые запросом;
WHERE показывает, что в таблицу результатов запроса следует включать только строки, удовлетворяющие условию поиска;
GROUP BYпозволяет задавать итоговый запрос. Обычный запрос включает в таблицу результатов по одной строке для каждой строки из БД. Итоговый запрос вначале группирует строки БД по определённому признаку, а затем включает в таблицу результатов одну итоговую строку для каждой группы;
HAVING показывает, что в таблицу результатов запроса следует включать только некоторые из групп, созданных с помощью предложения GROUP BY. Для отбора включаемых групп используется условие поиска;
ORDER BY сортирует таблицу результатов запроса на основании данных, содержащихся в одном или нескольких столбцах.
В предложении SELECT, с которого начинаются все операторы SELECT, список возвращаемых столбцов содержит элементы, представляющие собой либо имя столбца, либо константу, либо выражение.
Имя столбца идентифицирует один из столбцов, содержащихся в таблицах, которые перечислены в предложении FROM. Когда в качестве возвращаемого столбца указывается имя столбца из таблицы БД, то СУБД просто берёт значение этого столбца для каждой из строк таблицы БД и помещает его в соответствующую строку таблицы результатов запроса.
Константа, записанная в списке возвращаемых столбцов, показывает, что в каждой строке таблицы результатов запроса должно содержаться одно и то же значение.
Выражение показывает, что СУБД должна вычислять значение, помещаемое в таблицу результатов запроса, по формуле, заданной выражением.
Например, в результате выполнения оператора
SELECT ’ГРАЖДАНИН’, FIO, ‘ПОЛУЧАЕТ’, SUMD, ‘ПЛАТИТ’, SUMD*0.12
FROM PERSON
будет создана таблица, состоящая из таких строк (табл. 8.1):
Таблица 8.1
Денежные доходы граждан
ГРАЖДАНИН |
FIO |
ПОЛУЧАЕТ |
SUMD |
ПЛАТИТ |
SUMD*0.12 |
ГРАЖДАНИН ГРАЖДАНИН … ГРАЖДАНИН …
|
ИВАНОВ ПЕТРОВ… ЕЛЬЦИН… |
ПОЛУЧАЕТ ПОЛУЧАЕТ … ПОЛУЧАЕТ … |
1000.00р. 700.00р. … NULL … |
ПЛАТИТ ПЛАТИТ … ПЛАТИТ … |
120.00р. 84.00р. … NULL … |
Количество строк в таблице результатов запроса может быть любым, в частности, равным нулю. Например, выполнение оператора
SELECT FIO FROM PERSON приведёт к созданию таблицы, в которой будет один столбец (FIO) и ни одной строки.
В некоторых случаях результатом запроса может быть единственное значение, например:
SELECT AVG (SUMD) FROM PERSON (вычисляется среднее значение дохода, получаемого жителем).
Этот результат также считается таблицей, которая состоит из одного столбца и одной строки.
То, что SQL-запрос всегда возвращает таблицу данных, очень важно с практической точки зрения. Во-первых, результаты запроса можно записать обратно в БД в виде таблицы. Во-вторых, таблицы результатов двух запросов, имеющие похожую структуру, можно объединить в одну таблицу. И в-третьих, таблица результатов запроса сама может стать объектом дальнейших запросов. Таким образом, табличная структура реляционной БД тесно связана с реляционными SQL-запросами: к таблицам можно посылать запросы, а запросы возвращают таблицы.
Нередко требуется получить содержимое всех столбцов таблицы, чтобы ознакомиться с её структурой и хранимыми в ней данными. С учётом этого в операторе SELECT разрешается использовать символ звёздочки, который означает, что требуется прочитать все столбцы из таблиц, перечисленных в предложении FROM. Например, содержимое таблицы PERSON можно получить с помощью оператора
SELECT * FROM PERSON
Таблица результатов запроса содержит все 6 столбцов таблицы PERSON, которые расположены в том же порядке, что и в исходной таблице, хранящейся в БД.
По умолчанию в таблицу результатов запроса включаются все строки, в том числе и повторяющиеся (см. ключевое слово ALL на синтаксической диаграмме рис. 8.4). Например, оператор
SELECT ADR FROM PERSON
возвращает адреса всех жителей, и среди этих адресов будут повторяющиеся, если в одной квартире проживают несколько человек.
Чтобы в таблице результатов запроса содержались только неповторяющиеся строки, в операторе SELECT перед списком возвращаемых столбцов записывается ключевое слово DISTINCT. Например, чтобы получить список разных адресов квартир, предыдущий оператор нужно дополнить этим ключевым словом:
SELECT DISTINCT ADR FROM PERSON.