Символ-Плюс, 2009 г. , 672 с.
Книга Энтони Молинаро «SQL. Сборник рецептов» предназначена тем, кто уже знаком с основами языка запросов SQL и хочет повысить свой профессиональный уровень. Она будет полезна и экспертам SQL, поскольку автор предлагает варианты решения задач для разных СУБД: DB2, Oracle, PostgreSQL, MySQL и SQL Server. Если вы постоянно работаете с SQL на одной платформе, то, возможно, найдете в рецептах более эффективное решение на другой. Вы научитесь использовать SQL для решения более широкого спектра задач – от операций внутри баз данных до передачи данных по сети в приложения. Для этого достаточно открыть книгу на странице с интересующим вас рецептом. Вы узнаете, как применять оконные функции и специальные операторы, а также расширенные методы работы с хранилищами данных: создание гистограмм, резюмирование данных в блоки, выполнение агрегации скользящего диапазона значений, формирование текущих сумм и подсумм. Вы сможете разворачивать строки в столбцы и наоборот, упрощать вычисления внутри строки и выполнять двойное разворачивание результирующего множества, выполнять обход строки, что позволяет использовать SQL для синтаксического разбора строки на символы, слова или элементы строки с разделителями. Приемы, предлагаемые автором, позволят оптимизировать код ваших приложений и откроют перед вами новые возможности языка SQL.
Оглавление.
1. Извлечение записей.
Извлечение всех строк и столбцов из таблицы.
Извлечение подмножества строк из таблицы.
Выбор строк по нескольким условиям.
Извлечение подмножества столбцов из таблицы.
Как задать столбцам значимые имена.
Обращение к столбцу в предикате WHERE попсевдониму.
Конкатенация значений столбцов.
Использование условной логики в выражении SELECT.
Ограничение числа возвращаемых строк.
Возвращение n случайных записей таблицы.
Поиск значений NULL.
Преобразование значений NULL в неꢐNULL значения.
Поиск по шаблону.
2. Сортировка результатов запроса.
Возвращение результатов запроса взаданномпорядке.
Сортировка по нескольким полям.
Сортировка по подстрокам.
Сортировка смешанных буквенноꔸцифровых данных.
Обработка значений NULL при сортировке.
Сортировка по зависящему от данных ключу.
3. Работа с несколькими таблицами.
Размещение одного набора строк поддругим.
Объединение взаимосвязанных строк.
Поиск одинаковых строк в двух таблицах.
Извлечение из одной таблицы значений,
которых нет в другой таблице.
Извлечение из таблицы строк, для которых нет соответствия в другой таблице.
Независимое добавление объединений в запрос.
Выявление одинаковых данных в двух таблицах.
Идентификация и устранение некорректного использования декартова произведения.
Осуществление объединений при использовании агрегатных функций.
Внешнее объединение при использовании агрегатных функций.
Возвращение отсутствующих данных изнесколькихтаблиц.
Значения NULL в операциях и сравнениях.
4. Вставка, обновление, удаление.
Вставка новой записи.
Вставка значений по умолчанию.
Переопределение значения по умолчанию значением NULL.
Копирование строк из одной таблицы в другую.
Копирование описания таблицы.
Вставка в несколько таблиц одновременно.
Блокировка вставки в определенные столбцы.
Изменение записей в таблице.
Обновление в случае существования соответствующих строк в другой таблице.
Обновление значениями из другой таблицы.
Слияние записей.
Удаление всех записей из таблицы.
Удаление определенных записей.
Удаление одной записи.
Удаление записей, которые нарушают ссылочнуюцелостность.
Уничтожение дублирующихся записей.
Удаление записей, на которые есть ссылки в другой таблице.
5. Запросы на получение метаданных.
Как получить список таблиц схемы.
Как получить список столбцов таблицы.
Как получить список индексированных столбцов таблицы.
Как получить список ограничений, наложенных на таблицу.
Как получить список внешних ключей без соответствующих индексов.
Использование SQL для генерирования SQL.
Описание представлений словаря данных в базе данных Oracle.
6. Работа со строками.
Проход строки.
Как вставить кавычки в строковые литералы.
Как подсчитать, сколько раз символ встречается в строке.
Удаление из строки ненужных символов.
Разделение числовых и символьных данных.
Как определить, содержит ли строка только буквенно-цифровые данные.
Извлечение инициалов из имени.
Упорядочивание по частям строки.
Упорядочивание по числу в строке.
Создание списка с разделителями из строк таблицы.
Преобразование данных с разделителями в список оператора IN со множеством значений.
Упорядочение строки в алфавитном порядке.
Выявление строк, которые могут быть интерпретированы как числа.
Извлечение n-ной подстроки с разделителями.
Синтаксический разбор IP-адреса.
7. Работа с числами.
Вычисление среднего.
Поиск минимального/максимального значения столбца.
Вычисление суммы значений столбца.
Подсчет строк в таблице.
Подсчет значений в столбце.
Вычисление текущей суммы.
Вычисление текущего произведения.
Вычисление текущей разности.
Вычисление моды.
Вычисление медианы.
Вычисление доли от целого в процентном выражении.
Агрегация столбцов, которые могут содержать NULLL значения.
Вычисление среднего без учета наибольшего и наименьшего значений.
Преобразование буквенно-цифровых строк в числа.
Изменение значений в текущей сумме.
8. Арифметика дат.
Добавление и вычитание дней, месяцев и лет.
Определение количества дней между двумя датами.
Определение количества рабочих дней между двумя датами.
Определение количества месяцев или лет между двумя датами.
Определение количества секунд, минут или часов между двумя датами.
Как подсчитать, сколько раз в году повторяется каждый день недели.
Определение интервала времени в днях между текущей и следующей записями.
9. Работа с датами.
Как определить, является ли год високосным.
Как определить количество дней в году.
Извлечение единиц времени из даты.
Определение первого и последнего дней месяца.
Выбор всех дат года, выпадающих на определенный день недели.
Определение дат первого и последнего появления заданного дня недели.
Создание календаря.
Получение дат начала и конца кварталов года.
Определение дат начала и окончания заданного квартала.
Дополнение отсутствующих дат.
Поиск по заданным единицам времени.
Сравнение строк по определенной части даты.
Выявление наложений диапазонов дат.
10. Работа с диапазонами данных.
Поиск диапазона последовательных значений.
Вычисление разности между значениями строк одной группы или сегмента.
Определение начала и конца диапазона последовательных значений.
Вставка пропущенных значений диапазона.
Формирование последовательности числовых значений.
11. Расширенный поиск.
Разбиение результирующего множества на страницы.
Как пропустить n строк таблицы.
Использование логики OR во внешних объединениях.
Выявление строк со взаимообратными значениями.
Как выбрать записи с n ым количеством наивысших значений.
Как найти записи с наибольшим и наименьшим значениями.
Сбор информации из последующих строк.
Смещение значений строк.
Ранжирование результатов.
Исключение дубликатов.
Ход конем.
Формирование простых прогнозов.
12. Составление отчетов и управление хранилищами данных.
Разворачивание результирующего множества в одну строку.
Разворачивание результирующего множества в несколько строк.
Обратное разворачивание результирующего множества.
Обратное разворачивание результирующего множества в один столбец.
Исключение повторяющихся значений из результирующего множества.
Разворачивание результирующего множества для упрощения вычислений.
Создание блоков данных фиксированного размера.
Создание заданного количества блоков.
Создание горизонтальных гистограмм.
Создание вертикальных гистограмм.
Как возвратить столбцы, не перечисленные в операторе GROUP BY.
Вычисление простых подсумм.
Вычисление подсумм для всех возможных сочетаний.
Как выявить строки, в которых представленыне подсуммы.
Использование выражений CASE для маркировки строк.
Создание разреженной матрицы.
Группировка строк по интервалам времени.
Агрегация разных групп/сегментов одновременно.
Агрегация скользящего множества значений.
Разворачивание результирующего множества, содержащего подсуммы.
13. Иерархические запросы.
Представление отношений родитель-потомок.
Представление отношений потомоккродитель-прародитель.
Создание иерархического представления таблицы.
Выбор всех дочерних строк для заданной строки.
Определение узлов: ветвления, концевого, корневого.
14. Всякая всячина.
Создание отчетов с перекрестными ссылками с помощью оператора SQL Server PIVOT.
Обратное разворачивание отчета с помощью оператора SQL Server UNPIVOT.
Транспонирование результирующего множества с помощью оператора Oracle MODEL.
Извлечение элементов строки, положение которых в строке неизвестно.
Как определить количество дней в году.
(альтернативное решение для Oracle).
Поиск смешанных буквенно-цифровых строк.
Преобразование целых чисел в их двоичное представление с использованием Oracle.
Разворачивание ранжированного результирующего множества.
Как добавить заголовок столбца в дважды.
развернутое результирующие множество.
Преобразование скалярного подзапроса в составной подзапрос (Oracle).
Синтаксический разбор сериализованных данных в строки таблицы.
Определение доли от целого в процентном выражении.
Создание списка разделенных запятыми значений в Oracle.
Выбор текста, не соответствующего шаблону (Oracle).
Преобразование данных с помощью вложенного запроса.
Проверка существования значения в группе.
A. Оконные функции, краткий обзор.
B. Вспоминаем Розенштейна.