|
Программирование >> Sql: полное руководство
Ниже приведены другие примеры запросов, в которых используются вычисляемые столбцы: Показать общую стоимость по каждому товару. SELECT MFR ID, PRODUCT ID, DESCRIPTION, (QTY ON HAND * PRICE) FROM PRODUCTS
Что получится, если увеличить плановый объем продаж для каждого служащего на 3% от его фактического объема продаж? SELECT NAME, QUOTA, (QUOTA + (.03 * SALES)) FROM SALESREPS NAME QUOTA (QUOTA + (.03 * SALES)) Bill Adams Mary Jones Sue Smith Sam Clark Bob Smith Dan Roberts Tom Snyder Larry Fitch Paul Cruz Nancy Angelli $350, $300, $350, $275, $200, $300, $350, $275, $300, 000.00 000.00 000.00 000.00 000.00 000.00 NOLL 000.00 ООО .00 000.00 $361,037.33 $311,781.75 $364,221.50 $283,997.36 $204,277.82 $309,170.19 NULL $360,855.95 $283,603.25 $305,581.26 Как было сказано в главе 5, во многих СУБД реализованы дополнительные арифметические операции, операции над строками символов и встроенные функции, которые можно применять в выражениях SQL. Их также можно использовать в выражениях в списке возвращаемых столбцов, как в следующем примере для DB2: Вывести список имен, а также месяц и год приема на работу всех служащих. SELECT NAME, MONTH (HIRE DATE) , YEAR (HIRE DATE) FROM SALESREPS NAME MONTH(HIRE DATE) YEAR(HIRE DATE) Bill Adams Mary Jbnes Sue Smith February October December 1988 1989 1986 Sam Clark June 1988 Bob Smith May 1987 Dan Roberts October 1986 Tom Snyder January 1990 Larry Fitch October 1989 Paul Cruz March 1987 Nancy Angelli November 1988 Кроме того, в списке возвращаемых столбцов можно использовать константы. Это может пригодиться для создания таблицы результатов запроса, которая более удобна для восприятия, как в следующем примере: Вывести список объемов продаж для каждого города. SELECT CITY, has sales of, SALES FROM OFFICES CITY HAS SALES OF SALES Denver has sales of $186,042.00 New York has sales of $692,637.00 Chicago has sales of $735,042.00 Atlanta has sales of $367,911.00 Los Angeles has sales of $835,915.00 Кажется, что результаты запроса состоят из отдельных предложений, каждое из которых относится к одному из офисов, но на самом деле они представляют собой таблицу, содержащую три столбца. Первый и третий столбцы содержат значения из таблицы OFFICES. Во втором столбце для всех строк содержится одна и та же текстовая строка из двенадцати символов. Выборга всех столбцов (инструкция SELECT *) Иногда требуется получить содержимое всех столбцов таблицы. На практике такая ситуация может возникнуть, когда вы впервые сталкиваетесь с новой базой данных и необходимо быстро получить представление о ее структуре и хранимых в ней данных. С учетом этого в SQL разрещается использовать вместо списка возвращаемых столбцов символ звездочки (*), который означает, что требуется извлечь все столбцы: Показать все данные, содержащиеся в таблице offices. SELECT * FROM OFFICES
Результаты запроса содержат все шесть столбцов таблицы offices, которые расположены в том же порядке, что и в исходной таблице в стандарте ANSI/ISO сказано, что в предложении select можно использовать либо символ выборки всех столбцов, либо список возвращаемых столбцов, но не оба одновременно, что видно из рис. 6.1. Однако во многих СУБД символ звездочки считается просто одним из возвращаемых столбцов. Таким образом, запрос 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 MGR FROM OFFICES 108 106 104 105 108 Таблица результатов запроса содержит пять строк (по одной для каждого офиса), однако две из них совпадают. Почему? Потому что Ларри Фитч (Larry Fitch) является менеджером двух офисов: в Лос-Анджелесе и в Денвере. Поэтому его идентификатор (108) содержится в двух строках таблицы offices. Это не совсем те результаты.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |