Программирование >>  Преобразование значений null 

1 2 3 [ 4 ] 5 6 7 ... 219


ни (днях, месяцах, годах и т. д.) и подсчет количества определенных дней в месяце.

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

Глава 10 Работа с диапазонами данных представляет рецепты для поиска значений в диапазонах и создания диапазонов значений. Примеры включают автоматическое формирование последовательности строк, вставку пропущенных числовых значений диапазона, определение начала и конца диапазона значений и выявление последовательности значений.

Глава 11 Расширенный поиск представляет рецепты, которые жизненно важны для повседневной работы с базами данных, но подчас вызывают затруднения. Эти рецепты ничуть не сложнее остальных, но до сих пор многие разработчики очень неэффективно решают задачи, рассматриваемые данными рецептами. В примеры данной главы вошли поиск значений с использованием хода конем , разбиение результирующего множества на страницы, пропуск строк таблицы, поиск взаимообратных значений, выбор n верхних записей и ранжирование результатов.

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

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

Глава 14 Всякая всячина - это коллекция разнообразных рецептов, которые не вписались ни в одну из рассматриваемых тем, но



при этом интересны и полезны. Данная глава отличается от остальных, поскольку предлагает решения только для конкретных СУБД. Это единственная глава в книге, где в каждом рецепте обсуждается только одна база данных. Сделано это по двум причинам. Во-первых, глава предполагалась более как забава для энтузиастов. Во-вторых, некоторые рецепты приведены только для того, чтобы показать функции, не имеющие эквивалентов в других СУБД (примеры включают операторы SQL Server PIVOT/UNPIVOT и оператор Oracle MODEL). Однако в некоторых случаях представленное в этой главе решение можно с небольшими изменениями использовать для другой платформы.

Приложение A Оконные функции, краткий обзор - это краткий курс по оконным функциям с подробным обсуждением группировки в SQL. Для большинства оконные функции являются новинкой, поэтому данное приложение представлено в виде краткого учебного руководства. Кроме того, по собственному опыту я знаю, что использование оператора GROUP BY в запросах приводит в замешательство многих разработчиков. В этой главе дается четкое определение SQL-группе и анализируются различные запросы, подтверждающие действительность этого определения. Продолжается разговор рассмотрением влияния значений NULL на группировку, агрегирование и разбиение на сегменты. В заключение предлагается обсуждение еще более непонятного и при этом исключительно мощного синтаксиса оператора OVER оконных функций (т. е. оператора кадрирования или сегментирования ).

Приложение B Вспоминаем Розенштейна - дань уважения Дэвиду Розенштейну, которому я обязан своим успехом в SQL. Книга Розенштейна The Essence of SQL (Coriolis Group Books) была первой книгой по SQL, которую я прочитал вне университетской программы. Именно она научила меня думать на SQL . До сих пор львиную долю своего успеха в SQL я отношу на счет книги Дэвида. Она в самом деле не похожа на все остальные прочитанные мною работы по SQL, и я счастлив, что самостоятельно выбрал первой именно ее. Приложение В останавливается на некоторых запросах, представленных в The Essence of SQL , и предлагает альтернативные решения с использованием оконных функций (которых не существовало на момент написания The Essence of SQL ).

Платформа и версия

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

DB2 v.8



Oracle Database 10g (за исключением небольшого числа рецептов, решения будут работать также для Oracle 8i Database и Oracle 9i Database)

PostgreSQL 8

SQL Server 2005

MySQL 5

Таблицы, используемые в данной книге

Основная масса примеров данной книги использует две таблицы, EMP и DEPT. EMP - это простая таблица из 14 строк, содержащая только поля с числовыми, строковыми данными и датами. Таблица DEPT состоит из четырех строк с числовыми и строковыми полями. Эти таблицы можно встретить во многих книгах по базам данных, да и отношение многие-к-одному между отделами и служащими предельно понятно.

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

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

Содержимое таблиц EMP и DEPT приведено ниже:

select * from emp;

EMPNO

ENAME

HIREDATE

COMM

DEPTNO

7369

SMITH

CLERK

7902

17-DEC-1980

7499

ALLEN

SALESMAN

7698

20-FEB-1981

1600

7521

WARD

SALESMAN

7698

22-FEB-1981

1250

7566

JONES

MANAGER

7839

02-APR-1981

2975

7654

MARTIN

SALESMAN

7698

28-SEP-1981

1250

1400

7698

BLAKE

MANAGER

7839

01-MAY-1981

2850

7782

CLARK

MANAGER

7839

09-JUN-1981

2450

7788

SCOTT

ANALYST

7566

09-DEC-1982

3000

7839

KING

PRESIDENT

17-NOV-1981

5000

7844

TURNER

SALESMAN

7698

08-SEP-1981

1500

7876

ADAMS

CLERK

7788

12-JAN-1983

1100

7900

JAMES

CLERK

7698

03-DEC-1981

7902

FORD

ANALYST

7566

03-DEC-1981

3000

7934

MILLER

CLERK

7782

23-JAN-1982

1300



1 2 3 [ 4 ] 5 6 7 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика