- •Добряк Павел Вадимович управление данными
- •Управление данными
- • Угту-упи, 2012
- •Введение
- •1. Основные определения
- •1.1. Элементы баз данных
- •1.2. Технологии управления данными
- •1.3. Модели данных
- •2.1. Основные понятия реляционной модели
- •2.2. Нормализация
- •2. Реляционная модель
- •2.3. Проблемы проектирования реляционных баз данных
- •Задачи для самостоятельного решения
- •3. Реляционные алгебра и исчисления
- •3.1. Реляционная алгебра
- •3.2. Реляционное исчисление на кортежах
- •3.3. Реляционное исчисление на доменах
- •4.1. Введение в sql
- •4.2. Пример реляционной базы данных
- •4.3. Запросы к одной таблице
- •4.4. Запросы к нескольким таблицам
- •4.5. Вложенные запросы
- •4.6. Вложенные подзапросы и кванторы
- •4.7. Объединение однотипных запросов
- •4.8. Рекурсивные запросы
- •Объединение однотипных запросов.
- •Запросы для самостоятельного программирования
- •5. Olap и хранилища данных
- •5.1. Архитектура хранилищ данных
- •5.2. Аналитические запросы
- •6. Триггеры, хранимые процедуры, события
- •7. Транзакции
- •7.1. Функции транзакций
- •7.2. Уровни изолированности
- •7.3. Сериализация транзакций
- •7.4. Синхронизационный захват
- •7.5. Метод временных меток
- •8. Обзор перспективных направлений баз данных
- •9. Объектные технологии в субд
- •9.1. Три манифеста баз данных
- •9.2. Объектная модель sql
- •9.3. Модель данных odmg и язык oql
- •10. Запросы к интернет-страницам
- •10.1. Теговая парадигма
- •10.2. Язык запросов xQuery
- •11. Пространственные базы данных
- •12. Лабораторные работы
- •13. Курсовая работа
- •13.1. Концептуальное проектирование
- •13.2. Семантическое проектирование
- •13.3. Физическое проектирование. Реляционная модель данных
- •13.4. Запросы
- •Объединение однотипных запросов.
- •13.5. Интеллектуализация базы данных.
- •13.6. Клиентская часть информационной системы
- •13.7. Дополнительные элементы базы данных
- •Вопросы к экзамену
- •1. Основные определения.
- •2. Реляционная модель
- •3. Реляционные алгебра и исчисления
- •10. Запросы к интернет-страницам
- •11. Пространственные базы данных
- •Литература
- •Список иллюстраций список таблиц
- •Список листингов
- •Алфавитный указатель
- •Список сокращений
Запрос по одной таблице, вычисляющий агрегатную функцию с использованием операторов where, having, order by.
Запрос соединения нескольких таблиц с использованием оператора where, одна таблица должна использоваться в запросе несколько раз под псевдонимами.
Запрос по правому, левому или полному соединению.
Запрос с двумя вложенными запросами в конструкциях where и having
Запрос с вложенным запросом, используя all, any или exists.
Вложенный запрос с объединением двух таблиц (одна из разновидностей join), опосредованно связанных третьей.
Объединение однотипных запросов.
Рекурсивный запрос.
Вопросы для самопроверки:
Чем отличается использование операторов group by, group by rollup, group by rollup cube, grouping, orger by, partition?
Чем отличается использование операторов where и having?
Какому запросу join … on соответствует оператор where?
Какой операции реляционной алгебры соответствует оператор where?
Какой операции реляционной алгебры соответствует оператор join?
Запросы для самостоятельного программирования
В домашнем задании было предложено придумать запросы с использованием различных операторов для своего примера. Чтобы убедиться в активном владении SQL, нужно уметь писать запросы по заданию для произвольной схемы данных, понимая, какие операторы нужны в запросе. Кроме того, нужно уметь совместно использовать различные принципы построения SQL-запросов. Ниже приводится список заданий, сгруппированных по нескольким уровням сложности.
Задания сформулированы в свободной форме для БД «продажи», приведенной на Рис. 15. При этом фраза «вывести продавцов» означает то, что результат запроса должен содержать имена продавцов, аналогично – «вывести клиентов» - «вывести имена клиентов» и «вывести товары» - «вывести названия товаров», «вывести сделки» - вывести всю информацию о сделке
Уровень 1.
Where
Вывести сделки с количеством проданного товара > 10.
Вывести продавцов с зарплатой > 20000.
Вывести продавцов из отдела розничных продаж.
Вывести продавцов из Екатеринбурга.
Вывести товары с количеством на складе < 5.
Агрегатные функции
Вывести среднюю стоимость всех сделок.
Вывести максимальную стоимость всех сделок.
Вывести минимальную стоимость всех сделок.
Вывести суммарную стоимость всех сделок.
Вывести количество всех сделок.
Уровень 2
Group by
Вывести среднюю стоимость всех сделок для каждой даты.
Вывести максимальную стоимость всех сделок для каждой даты.
Вывести минимальную стоимость всех сделок для каждой даты.
Вывести суммарную стоимость всех сделок для каждой даты.
Вывести количество всех сделок для каждой даты.
Having
Вывести номера продавцов со средней стоимостью сделок > 100.
Вывести номера продавцов с максимальной стоимостью сделок > 100.
Вывести номера продавцов с минимальной стоимостью сделок > 100.
Вывести номера продавцов с суммарной стоимостью сделок > 100.
Вывести номера продавцов, заключивших более 100 сделок.
Соединение where
Вывести все сделки отдела розничных продаж.
Вывести все сделки с мылом.
Вывести все сделки продавцов из Екатеринбурга.
Вывести сделки, заключенные с покупателями из Екатеринбурга.
Вывести список продавцов, продававших покупателям из одного с ними города.
Join
Вывести всех без исключения продавцов и сделки, ими заключенные.
Вывести всех без исключения покупателей и сделки, ими заключенные.
Вывести все без исключения товары и соответствующие им сделки.
Уровень 3
group by
Рассчитать среднюю стоимость сделок для каждого отдела.
Рассчитать минимальную стоимость сделок для каждого отдела.
Рассчитать максимальную стоимость сделок для каждого отдела.
Рассчитать суммарную стоимость сделок для каждого отдела.
Рассчитать количество сделок для каждого отдела.
Where + агрегатная функция
Рассчитать среднюю стоимость сделок с количеством проданного товара > 10.
Рассчитать минимальную стоимость сделок с количеством проданного товара > 10.
Рассчитать максимальную стоимость сделок с количеством проданного товара > 10.
Рассчитать суммарную стоимость сделок с количеством проданного товара > 10.
Having + агрегатная функция
Рассчитать среднюю стоимость сделок для продавцов, заключивших более 100 сделок.
Рассчитать максимальную стоимость сделок для покупателей, заключивших более 100 сделок.
Рассчитать суммарную стоимость сделок для тех товаров, на которые было заключено более 100 сделок.
Рассчитать суммарную стоимость сделок для продавцов, заключивших более 100 сделок.
Рассчитать максимальную стоимость сделок для тех товаров, на которые было заключено более 100 сделок.
Where + having
Вывести тех продавцов, суммарная стоимость сделок которых с количеством товара в каждой сделке > 100 шт. была больше 1000 руб.
Вывести тех продавцов, средняя стоимость сделок которых с количеством товара в каждой сделке > 100 шт. была больше 1000 руб.
Вывести тех покупателей, минимальная стоимость сделок которых с количеством товара в каждой сделке > 100 шт. была больше 1000 руб.
Вывести тех покупателей, максимальная стоимость сделок которых с количеством товара в каждой сделке > 100 шт. была больше 1000 руб.
Вывести те товары, максимальная стоимость сделок на которые с количеством товара > 100 шт. в каждой сделке была больше 1000 руб.
Where + join
Вывести всех без исключения продавцов и номера их сделок, если стоимость сделки была больше 1000.
Вывести всех без исключения покупателей и номера их сделок, если стоимость сделки была больше 1000.
Вывести всех без исключения товары и номера их сделок, если стоимость сделки была больше 1000.
Объединение однотипных запросов
Вывести товары с меткой популярные и непопулярные. Популярные – с количеством сделок >= 500, непопулярные - < 500.
Вывести товары с меткой дорогие и дешевые. Дорогие – с суммарной стоимостью >= 500, дешевые - < 500.
Вывести покупателей с меткой постоянные и нерегулярные. Постоянные – с количеством сделок >= 500, нерегулярные - < 500.
Вывести продавцов с меткой сильные и слабые. Сильные – с количеством сделок >= 500, слабые - < 500.
Уровень 4
Псевдонимы, рекурсивная связь к 1 таблице
Вывести всех подчиненных Иванова.
Для каждого продавца найти продавцов из одного с ним отдела.
Для каждого продавца найти продавцов из одного с ним города.
Для каждого покупателя найти покупателей из одного с ним города.
Псевдонимы, связь одной таблицы с собой через вторую
Вывести всех продавцов, продававших покупателям Иванова.
Вывести всех покупателей продавцов, продававших товары Павлову.
Вывести товары, которые покупают покупатели, купившие мыло.
Вывести товары, которые продают продавцы, продающие мыло.
Псевдонимы, пары записей
Вывести пары товаров, если у них был один продавец.
Вывести пары товаров, если их покупал один покупатель.
Вывести пары продавцов, если они продавали один и тот же товар.
Вывести пары продавцов, если они заключили сделку с одним и тем же покупателем.
Вывести пары покупателей, если у них был общий продавец.
Псевдонимы, циклическая связь между тремя таблицами
Для каждого продавца вывести продавцов из одного города с его покупателями.
Для каждого покупателя вывести покупателей из одного города с его продавцами.
Вложенный запрос в having
Вывести тех продавцов, у которых средняя стоимость сделок больше, чем средняя стоимость сделок по их отделу.
Вывести тех продавцов, у которых средняя стоимость сделок больше, чем средняя стоимость сделок из их города.
Вывести тех продавцов, у которых максимальная стоимость сделок больше, чем средняя стоимость сделок по их отделу.
Вывести тех продавцов, у которых минимальная стоимость сделок больше, чем средняя стоимость сделок из их города.
Вывести тех покупателей, у которых средняя стоимость сделок больше, чем средняя стоимость сделок из их города.
Вложенный запрос в select
Вывести разницу между средней стоимостью сделок данного продавца и средней стоимостью сделки его отдела.
Вывести разницу между максимальной стоимостью сделок данного продавца и средней стоимостью сделок по его городу.
Вывести разницу между минимальной стоимостью сделок данного продавца и средней стоимостью сделок по его городу.
Вывести разницу между средней стоимостью сделок данного покупателя и средней стоимостью сделок по его городу.
Вывести разницу между максимальной стоимостью сделок данного покупателя и средней стоимостью сделок по его городу.
Вложенный запрос в from
Для каждого продавца вывести максимальную из минимальных стоимостей сделок по каждой дате.
Для каждого покупателя вывести среднюю из минимальных стоимостей сделок по каждой дате.
Для каждого товара вывести минимальную из средних стоимостей сделок по каждой дате.
Для каждого продавца вывести среднюю из максимальных стоимостей сделок по каждой дате.
Вложенные запросы с кванторами
Вывести продавцов, которые продавали только мыло.
Вывести продавцов, которые заключили только одну сделку и продали мыло.
Вывести покупателей, которые покупали только мыло.
Вывести покупателей, которые заключили только одну сделку и купили мыло.
Вложенные запросы с объединением join
Вывести всех без исключения имена продавцов и названия товаров, которые они продавали.
Вывести всех без исключения имена покупателей и названия товаров, которые они покупали.
Вывести все без исключения названия товаров, и имена продавцов, которые их продавали.
Вывести все без исключения названия товаров, и имена покупателей, которые их покупали.
Уровень 5
Вложенные запросы с объединением join + where
Вывести всех без исключения продавцов и покупателей (если они были), с которыми они заключали сделки, если стоимость хотя бы 1 сделки была больше 1000.
Вложенные запросы с объединением join + having
Вывести всех без исключения продавцов и покупателей (если они были), с которыми они заключали сделки, если суммарная стоимость этих сделок > 1000.
Вложенные запросы с кванторами + where
Вывести продавцов, в сделках которых со стоимостью > 1000 продавалось только мыло.
Вложенные запросы с кванторами + having
Вывести продавцов, в сделках которых с суммарной стоимостью > 1000, сгруппированным по товарам, продавалось только мыло.
Псевдонимы, рекурсивная связь к 1 табл + where
Вывести всех подчиненных Иванова, если они заключили хотя бы 1 сделку со стоимостью > 1000.
Псевдонимы, рекурсивная связь к 1 табл + having
Вывести тех подчиненных Иванова, если суммарная стоимость сделок у подчиненного > 1000.
Псевдонимы, связь одной таблицы с собой через вторую + where
Вывести всех продавцов, продававших покупателям Иванова, если они заключили хотя бы 1 сделку со стоимостью > 1000.
Псевдонимы, связь одной таблицы с собой через вторую + having
Вывести всех продавцов, продававших покупателям Иванова, если суммарная стоимость сделок у продавца > 1000.
Вложенный запрос в having + where
Вывести тех продавцов, у которых средняя стоимость сделок больше, чем средняя стоимость сделок c количеством товара > 10 по их отделу.
Вложенный запрос в select + where
Вывести разницу между средней стоимостью сделок данного продавца и средней стоимостью сделок c количеством товара > 10 его отдела.
Псевдонимы + вложенные запросы
Вывести всех продавцов, продававших покупателям Иванова, у которых средняя стоимость сделок больше, чем средняя стоимость сделок по их отделу.
Вывести всех подчиненных Иванова, у которых средняя стоимость сделок больше, чем средняя стоимость сделок по их отделу.
Псевдонимы + вложенные запросы с кванторами
Вывести всех подчиненных Иванова, которые продавали только мыло.
Вывести всех продавцов, продававших покупателям Иванова, которые продавали только мыло.
Уровень 6
Псевдонимы + вложенные запросы во from + union
Для каждого продавца и его подчиненных вывести максимальную из минимальных стоимостей сделок по каждой дате.
Для каждого продавца и его подчиненных вывести максимальную из средних стоимостей сделок по каждой дате.
Для каждого продавца и его подчиненных вывести среднюю из минимальных стоимостей сделок по каждой дате.
Для каждого продавца и его подчиненных вывести среднюю из максимальных стоимостей сделок по каждой дате.
