Вычисляемые столбцы

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

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

Кроме того, в списке возвращаемых столбцов можно использовать константы SQL. Это может пригодиться для создания результатов запроса, которые более удобны для восприятия, как в следующем примере:

Чтение всех столбцов (оператор SELECT *)

Иногда требуется получить содержимое всех столбцов таблицы. На практике такая ситуация может возникнуть, когда вы впервые сталкиваетесь с новой базой данных и необходимо быстро получить представление о ее структуре и хранимых в ней данных. С учетом этого в SQL разрешается использовать вместо списка возвращаемых столбцов символ звездочки (*), который означает, что требуется прочитать все столбцы:

В стандарте ANSI/ISO сказано, что в предложении select можно использовать либо символ чтения всех столбцов, либо список возвращаемых столбцов, но не оба одновременно. Однако во многих реализациях SQL символ звездочки (*) считается просто одним из возвращаемых столбцов. Таким образом, запрос

SELECT *, (SALES - TARGET) FROM OFFICES

допустим в большинстве коммерческих диалектов SQL (в частности, в DB2, Oracle и SQL Server), однако не разрешен стандартом ANSI/ISO.

Символ чтения всех столбцов очень удобно использовать в интерактивном SQL. Однако следует избегать использования его в программном SQL, поскольку изменения в структуре базы данных могут привести к краху приложения. Предположим, например, что таблица offices была удалена из базы данных, а затем создана вновь, при этом был изменен порядок столбцов и добавлен новый, седьмой столбец. Если программа ожидает, что запрос select * from offices возвратит результат, содержащий шесть столбцов определенных типов, она почти наверняка перестанет работать после изменения порядка столбцов и добавления нового столбца.

Этих сложностей можно избежать, если в программах запрашивать требуемые столбцы по именам. Например, следующий запрос возвращает те же результаты, что и select * from offices. Он не восприимчив к изменениям структуры базы данных, пока в таблице offices существуют столбцы с указанными именами.

SELECT OFFICE, CITY, REGION, MGR, TARGET, SALES FROM OFFICES

Повторяющиеся строки (ключевое слово DISTINCT)

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

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

Если ключевое слово distinct не указано, повторяющиеся строки не удаляются. Можно также указать ключевое слово all, явно показывая, что повторяющиеся строки следует оставить, однако делать это не обязательно, поскольку ключевое слово all используется по умолчанию.

Отбор строк (предложение WHERE)

SQL-запросы, считывающие из таблицы все строки, полезны при просмотре базы данных и создании отчетов, однако редко применяются для чего-нибудь еще. Обычно требуется выбрать из таблицы несколько строк и включить в результаты запроса только их. Чтобы указать, какие строки требуется отобрать, следует использовать предложение where. Ниже показано несколько запросов, в которых используется это предложение.

Предложение where состоит из ключевого слова where, за которым следует условие поиска, определяющее, какие именно строки требуется прочитать. Если в условии поиска встречается имя столбца (как, например, имя manager), то используется значение этого столбца из текущей строки. Для каждой из строк условие поиска может иметь одно из трех перечисленных ниже значений.

• Если условие поиска имеет значение true, строка будет включена в результаты запроса.

• Если условие поиска имеет значение false, то строка исключается из результатов запроса.

• Если условие поиска имеет значение null, то строка исключается из результатов запроса.

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

В SQL используется множество условий поиска, позволяющих эффективно и естественным образом создавать различные типы запросов. Ниже рассматриваются пять основных условий поиска (в стандарте ANSI/ISO они называются предикатами).

Сравнение. Значение одного выражения сравнивается со значением другого выражения. Например, такое условие поиска используется для выбора всех офисов, находящихся в восточном регионе, или всех служащих, фактические объемы продаж которых превышают плановые.

Проверка на принадлежность диапазону значений. Проверяется, попадает ли указанное значение в определенный диапазон значений. Например, такое условие поиска используется для нахождения служащих, фактические объемы продаж которых превышают $100000, но меньше $500000.

Проверка на членство в множестве. Проверяется, совпадает ли значение выражения с одним из значений из заданного множества. Например, такое условие поиска используется для выбора офисов, расположенных в Нью-Йорке, Чикаго или Лос-Анджелесе.

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

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

СРАВНЕНИЕ (=, О, <, <=, >, >=)

Наиболее распространенным условием поиска в SQL является сравнение. При сравнении SQL вычисляет и сравнивает значения двух выражений для каждой строки данных. Выражения могут быть как очень простыми, например, содержать одно имя столбца или константу, так и более сложными — арифметическими — выражениями. В SQL имеется шесть различных способов сравнения двух выражений. Когда SQL сравнивает значения двух выражений, могут получиться три результата:

· если сравнение истинно, результат проверки имеет значение TRUE;

· если сравнение ложно, результат проверки имеет значение FALSE;

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

Использование значений NULL в запросах может привести к некоторым неожиданным результатам.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: