Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Работаем на SQL

l.Запишите запрос, который подсчитывает все заявки за 3 октября 1990 года.

2.Запишите запрос, который подсчитывает количество различных городов (не

NULL) в таблице Customers.

3. Запишите запрос, который выбирает наименьшую заявку для каждого покупате­

ля.

4.Запишите запрос, который выбирает первого в алфавитном порядке покупателя, имя которого начинается с 'G'.

5.Запишите запрос, который выбирает максимальный рейтинг (rating) для каждого

города.

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

включить в пересчет только один раз.)

(Ответы см. в приложении А.)

62

Форматирование

результатов запросов

Глава 7. Форматированиерезультатов запросов

Назначение этой главы - расширить возможности обработки результатов за­

просов. Вы узнаете, как вставить текст и константы в выбранные поля, как использо­

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

станут выходными данными и, наконец, как представить выходные данные в задан­

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

Строки и выражения

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

дет речь в данной главе.

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

нее представить комиссионные продавцов в виде процентов, а не десятичных чисел,

достаточно указать:

Рис. 7.1. Использование выражения в запросе

64

Строки и выражения

SELECT snum, sname, city, comm • 100

FROM Salespeople;

Выходные данные для этого запроса представлены на рис. 7.1.

Выходные столбцы. Последний столбец в предыдущем примере не имеет имени, поскольку является выходным столбцом. Выходные столбцы - это столбцы, кото­

рые создаются с помощью запроса (в тех случаях, когда в предложении запроса

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

Внесение текста в выходные данные запроса. Буква 'А', не обозначающая ничего кроме самой себя, является константой, как и число 1. Константы, а также текст, можно включать в предложение запроса SELECT. Однако, буквенные констан­ ты, в отличие от числовых, нельзя использовать в выражениях. В SЕLЕСТ­ предложение можно включить 1+2, но не 'А'+ 'В', поскольку 'А' и 'В' здесь просто буквы, а не переменные или символы, используемые для обозначения чего-либо от­ личного от них самих. Тем не менее, возможность вставить текст в выходные данные

запроса вполне реальна.

Можно изменить предыдущий пример, пометив комиссионные, выраженные в про­ центах, символом "процент"(%), что позволяет представить их в выходных данных в

виде символов и комментариев, например:

SELECT snum, sname, city, ·х·, comm • 100

FROM Salespeople;

-~SOL Execut1on Log-- --

--- --- ;

SELfCT snum, sname. c1ty,

'%'comm.

* 1"1'1

 

 

1 FROM Salespeople,

 

 

 

 

 

 

 

ЧIF!Ш-

London•••

 

 

 

 

 

 

 

 

 

.,.."".1001 Peel

 

12.00000

 

 

1002

Serres

San Jose

%

13.00000

 

 

1004

Mot.ika

london

%

11. 00000

 

 

1007

Rifkin

Barcelona

%

1 . 00001/J

 

 

1l/Jl/J3

 

New

Vork

'5%

 

 

 

Д)(elrod

 

 

10.00000

 

 

 

 

 

 

 

 

 

Рис. 7.1. Включение символов в выходные данные

65

Глава 7. Форматированиерезультатов запросов

Выходные данные для этого запроса представлены на рис. 7.2.

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

SELECT "Fог·, odate, ·, there аге·,

COUNT (DISTINCT onum), 'orders..

FROM Orders

GROUP ВУ odate;

Грамматическую ошибку в выходных данных на 10/05/1990 можно исправить, но запрос при этом сильно усложнится. (Для этого пришлось бы использовать два запро­ са и операцию объединения UNION, которая будет рассмотрена в главе 14.) Вам мо­ жет быть полезен единственный неизменный комментарий для каждой строки таблицы, но он ограничен. Иногда более элегантное и полезное решение состоит в том, чтобы выдать один и тот же комментарий для всех выходных данных в целом или

разные комментарии для различных строк.

Многие программные продукты, использующие SQL, часто предоставляют пользо­

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

Рис. 7.3. Комбинирование текста, значений полей и агрегатов

66

Источник: https://studfile.net/preview/16418473/