Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lect1_m3_ipovs_ipovs_bd_230100.doc
Скачиваний:
17
Добавлен:
27.03.2016
Размер:
3.2 Mб
Скачать

Выражения

В соответствии со стандартом ANSI/ISO (SQL1) в выражениях можно использовать четыре арифметические операции: сложение (X+Y), вычитание (X-Y), умножение (X*Y) и деление (X/Y). Для формирования сложных выражений можно использовать круглые скобки.

Преобразование целых чисел в масштабируемые десятичные числа и десятичных чисел в числа с плавающей запятой согласно стандарту должно происходить автоматически. Таким образом, в одном числовом выражении можно использовать числовые данные разных типов.

Отсутствующие, неподходящие или неизвестные данные

Поскольку БД является моделью реального мира, то отдельные элементы данных в ней в какой-то конкретный момент времени будут либо отсутствовать, либо не подходить для характеристики объекта, либо иметь неизвестные значения. Такое значение в SQL обозначается величиной NULL. Например, в столбце SUMD таблицы PERSON содержатся величины общих доходов для каждого жителя. Для нового жителя, который только что зарегистрирован, общий доход неизвестен, поэтому для него в качестве значения в столбце SUMD следует поставить значение NULL.

Правила записи оператора select

Язык SQL предназначен в первую очередь для выполнения запросов. Для построения SQL - запросов, задающих выборку данных, используется оператор SELECT, который является наиболее функциональным, мощным из всех операторов SQL.

Оператор SELECT читает данные из БД и возвращает их в виде таблицы результатов запроса (рис. 3).

Рис. 3. Выполнение SQL - запроса на чтение

Оператор SELECT состоит из шести предложений, или фраз (рис. 4). Предложения SELECT и FROM являются обязательными. Четыре остальные включаются в оператор по мере необходимости. Функции каждого из предложений следующие:

1) в предложении SELECT указывается список возвращаемых столбцов, которые должны быть включены в таблицу результатов запроса. Возвращаемые столбцы могут содержать значения, считываемые из столбов таблиц базы данных, или значения, вычисляемые во время выполнения запроса;

2) в предложении FROM указывается список таблиц, которые содержат элементы данных, считываемые запросом;

3) предложение WHERE показывает, что в таблицу результатов запроса следует включать только строки, удовлетворяющие условию поиска;

4) предложение GROUP BY позволяет задавать итоговый запрос. Обычный запрос включает в таблицу результатов по одной строке для каждой строки из БД. Итоговый запрос вначале группирует строки БД по определенному признаку, а затем включает в таблицу результатов одну итоговую строку для каждой группы;

5) предложение HAVING показывает, что в таблицу результатов запроса следует включать только некоторые из групп, созданных с помощью предложения GROUP BY. Для отбора включаемых групп используется условие поиска;

6) предложение ORDER BY сортирует таблицу результатов запроса на основании данных, содержащихся в одном или нескольких столбцах.

В предложении SELECT, с которого начинаются все операторы SELECT, в списке возвращаемых столбцов следует указать такие элементы, как имя столбца, константу или выражение, которые будут возвращены в результате выполнения запроса. Для каждого элемента из этого списка в таблице результатов запроса будет создан один столбец.

Имя столбца идентифицирует один из столбцов, содержащихся в таблицах, которые перечислены в предложении FROM. Когда в качестве возвращаемого столбца указывается имя столбца из таблицы БД, то СУБД просто берет значение этого столбца для каждой из строк таблицы БД и помещает его в соответствующую строку таблицы результатов запроса.

Рис. 4. Синтаксическая диаграмма оператора SELECT

Константа, записанная в списке возвращаемых столбцов, показывает, что в каждой строке таблицы результатов запроса должно содержаться одно и то же значение.

Выражение показывает, что СУБД должна вычислять значение, помещаемое в таблицу результатов запроса, по формуле, заданной выражением.

Например, для учебной БД в результате выполнения оператора

SELECT ’ГРАЖДАНИН’, FIO, ‘ПОЛУЧАЕТ’, SUMD, ‘ПЛАТИТ’, SUMD*0.13

FROM PERSON

будет создана таблица, показанная в табл. 2.

Таблица 2

Денежные доходы граждан

ГРАЖДАНИН

FIO

ПОЛУЧАЕТ

SUMD

ПЛАТИТ

SUMD*0.13

ГРАЖДАНИН

ГРАЖДАНИН

ГРАЖДАНИН

ИВАНОВ

ПЕТРОВ

САХАРОВ

ПОЛУЧАЕТ

ПОЛУЧАЕТ

ПОЛУЧАЕТ

1000.00р.

700.00р.

NULL

ПЛАТИТ

ПЛАТИТ

ПЛАТИТ

130.00р.

91.00р.

NULL

Количество строк в таблице результатов запроса может быть любым, в частности, равным нулю. Например, выполнение оператора

SELECT FIO FROM PERSON WHERE NOM<0 приведет к созданию таблицы, в которой будет один столбец (FIO) и ни одной строки, поскольку жители не имеют отрицательных номеров.

В некоторых случаях результатом запроса может быть единственное значение, например:

SELECT AVG (SUMD) FROM PERSON

Этот оператор вычисляет среднее значение дохода, получаемого жителями, и такой результат также считается таблицей, которая состоит из одного столбца и одной строки.

То, что SQL - запрос всегда возвращает таблицу данных, очень важно с практической точки зрения. Во-первых, результаты запроса можно записать обратно в БД в виде таблицы. Во-вторых, таблицы результатов двух запросов, имеющие похожую структуру, можно объединить в одну таблицу. И, в-треть­их, таблица результатов запроса сама может стать объектом дальнейших запросов. Таким образом, табличная структура реляционной БД тесно связана с реляционными запросами: к таблицам можно посылать запросы, а запросы возвращают таблицы.

Нередко требуется получить содержимое всех столбцов таблицы, чтобы ознакомиться с ее структурой и хранимыми в ней данными. С учетом этого в операторе SELECT разрешается использовать символ звездочки, который означает, что требуется прочитать все столбцы из таблиц, перечисленных в предложении FROM. Например, содержимое таблицы PERSON можно получить с помощью оператора

SELECT * FROM PERSON

В этом случае таблица результатов запроса будет содержать все 6 столбцов таблицы PERSON, которые расположены в том же порядке, что и в исходной таблице, хранящейся в БД.

По умолчанию в таблицу результатов запроса включаются все строки, в том числе и повторяющиеся (см. ключевое слово ALL на синтаксической диаграмме рис. 3.4). Например, оператор

SELECT ADR FROM PERSON

возвращает адреса всех жителей, и среди этих адресов будут повторяющиеся, если в одной квартире проживают несколько человек.

Чтобы в таблице результатов запроса содержались только неповторяющиеся строки, в операторе SELECT перед списком возвращаемых столбцов записывается ключевое слово DISTINCT. Например, чтобы получить список разных адресов квартир, предыдущий оператор нужно дополнить этим ключевым словом:

SELECT DISTINCT ADR FROM PERSON