
- •Оглавление
- •Раздел 4. Проектирование реляционных баз данных. 113
- •Раздел 5. Определение структур данных и обслуживание баз данных. 114
- •Введение
- •Раздел 1. Основы теории баз данных Тема 1: Базы данных и информационные системы. Основные понятия.
- •Понятия базы данных и информационные системы.
- •Архитектура информационной системы.
- •Понятия базы данных и информационные системы.
- •Архитектура информационной системы.
- •Тема 2: Банки данных. Системы управления базами данных.
- •Банки данных. Основные компоненты системы.
- •Классификация субд.
- •Банки данных. Основные компоненты системы.
- •Классификация субд.
- •Раздел 2. Реляционная алгебра Тема1: Реляционная алгебра. Классические операции теории множеств.
- •Тема 2: Специальные операции теории множеств.
- •Раздел 3. Модели данных. Тема 1: Классические модели данных.
- •Сетевая модель представления данных.
- •Реляционная модель представления данных.
- •Элементы реляционной модели
- •Тема 2: Связывание таблиц. Целостность связей.
- •Основные виды связи таблиц.
- •Контроль целостности связей.
- •Характеристика видов связей
- •Раздел 4. Проектирование реляционных баз данных. Тема 1: Основные принципы проектирования баз данных.
- •2. Избыточное дублирование данных и аномалии
- •3. Формирование исходного отношения.
- •Тема 2: Метод нормальных форм
- •2. Выявление зависимостей между атрибутами
- •3. Нормальные формы
- •Тема 3: Метод сущность-связь. Этапы проектирования.
- •2.Этапы проектирования
- •3.Пример проектирования бд учебной части.
- •Тема 4: Правила формирования отношений.
- •2. Формирование отношений для связи 1:м
- •3. Формирование отношений для связи м:м
- •Раздел 5. Определение структур данных и обслуживание баз данных. Тема 1: Среда sql*Plus.
- •Функции.
- •2. Основные типы данных
- •3. Арифметические выражения
- •4. Операторы сравнения
- •5. Обработка неопределенных значений
- •6. Функции
- •7. Форматные модели
- •Тема 2: Структуры данных. Создание таблиц.
- •Создание таблиц.
- •3. Создание таблиц
- •Тема 3: Изменение таблиц и ограничений
- •Добавление и изменение столбца.
- •Изменение ограничений.
- •Удаление таблицы. Изменение имени таблицы и добавление комментариев.
- •Тема 4: Операции с ограничениями.
- •Тема 5: Манипулирование данными.
- •1. Вставка новых строк в таблицу
- •2. Копирование строк из другой таблицы
- •3. Обновление строк в таблице
- •4. Удаление строк из таблицы
- •Тема 6: Команда запроса данных. Простой запрос.
- •Тема 7: Сложные запросы.
- •Использование функций для работы с датами при организации запроса.
- •Тема 8: Группировка строк в запросе
- •2. Группы внутри групп.
- •3. Предложение having.
- •Тема 9: Подзапросы.
- •Подзапрос. Его назначение и синтаксис.
- •Однострочные и многострочные подзапросы.
- •Подзапрос. Его назначение и синтаксис.
- •2.Однострочные и многострочные подзапросы.
- •Тема 10: Выборка данных из нескольких таблиц.
- •2. Псевдонимы таблиц.
- •3. Дополнительные условия поиска.
- •4. Внешние соединения.
- •Select таблица.Столбец, таблица.Столбец
- •Тема 11: Создание, изменение и удаление последовательностей.
- •Создание последовательности.
- •2. Изменение и удаление последовательности.
- •3. Генерация значений последовательности.
- •Тема 12: Создание, изменение и удаление представлений.
- •Представления. Создание представлений.
- •Изменение и удаление представлений.
- •Представления. Создание представлений.
- •Изменение и удаление представлений.
- •Тема 13: «Индексы»
- •Понятие индекса. Необходимость использования.
- •Создание и удаление индексов.
- •1. Понятие индекса. Необходимость использования.
- •2. Создание и удаление индексов.
- •Тема 14: «Создание отчетов»
- •2. Форматирование number колонок.
- •3. Оформление Отчета пробелами и итоговыми строками.
- •4. Вычисление итоговых строк при изменении значения колонки.
- •5. Определение заголовков.
- •6. Установка размеров страницы
- •7. Сохранение и Печать Результатов Запроса
- •Тема 15: Управление транзакциями
- •Практикум Раздел 3. Реляционная алгебра.
- •Раздел 4. Проектирование реляционных баз данных.
- •Раздел 5. Определение структур данных и обслуживание баз данных.
- •Библиографический список
2. Группы внутри групп.
Сводные результаты по группам и подгруппам можно получить путем указания более чем одного столбца в предложении GROUP BY. В следующем примере количество людей подсчитывается не только по отделам, но и по должностям. Порядок сортировки, используемый по умолчанию, определяется порядком столбцов в предложении GROUP BY.
Пример 3: Вывод количества преподавателей по должностям внутри кафедр (таблица Dolzhn).
SELECT kaf, dolzhn, COUNT(*) as “Количество”
FROM Dolzhn
GROUP BY kaf, dolzhn;
3. Предложение having.
Предложение WHERE для исключения групп не используется. Для исключения целиком некоторых групп следует пользоваться предложением HAVING.
Пример 4: Вывод номера отдела и средней заработной платы для тех отделов, где средняя заработная плата превышает 10000.
SELECT id_otdel, AVG(salary)
FROM emp
GROUP BY id_otdel
HAVING AVG(salary)>10000.
Предложение HAVING задает условие отбора групп для вывода. Следовательно, на группы накладывается дальнейшее ограничение, основанное на сводной информации.
Синтаксис:
SELECT {столбец, групповая_функция}
FROM Таблица
[WHERE условие]
[GROUP BY выражение_группирования]
[HAVING условие_группы]
[ORDER BY {Столбец, выражение}[ASC|DESC]];
где HAVING - вывод конкретных групп.
Условие_группы - включает в выходной результат только те группы, для которых заданное условие истинно (TRUE).
Если используется предложение HAVING, сервер базы данных ORACLE выполняет следующие действия:
Группирует строки.
Применяет групповую функцию.
Производит вывод групп, удовлетворяющих условию предложения HAVING.
Предложение HAVING может предшествовать предложению GROUP BY, но более логично ставить предложение GROUP BY первым. Образование групп и вычисление групповых функций происходят до того, как к группам из списка SELECT применяется ограничение, заданное в предложении HAVING.
Пример 5: Вывод должности и общей заработной платы для всех должностей с заработной платой более 20000 в месяц, кроме вице-президентов. Выходные строки сортируются по заработной плате.
SELECT dolzhn, SUM(salary) SUMMA
FROM EMP
WHERE dozhn NOT LIKE ‘VP%’
GROUP BY dolzhn
HAVING SUM(salary)>20000
ORDER BY SUM(salary);
Сервер Oracle рассматривает предложения в следующем порядке:
Если команда содержит предложение WHERE сервер, прежде всего, отбирает строки в соответствии с этим предложением.
Сервер выявляет группы, заданные предложением GROUP BY.
Исключаются группы, не удовлетворяющие критерию предложения HAVING.
Предложение GROUP BY можно использовать без указания групповой функции в списке SELECT. Если отбор строк производится по результатам групповой функции, то использование как предложения GROUP BY, так и предложения HAVING обязательно
Тема 9: Подзапросы.
Подзапрос. Его назначение и синтаксис.
Однострочные и многострочные подзапросы.
Подзапрос. Его назначение и синтаксис.
Подзапрос - это команда SELECT, вложенная в предложение другой команды SQL (например, SELECT, CREATE, INSERT и т.д.).
Структура подзапроса представлена на рисунке:
Рис.1. Структура подзапроса
Подзапросы полезны при написании команд SELECT для выборки значений по некоторому условию, значения операндов которого заранее неизвестны. Подзапросы можно использовать в разных предложениях команд SQL:
WHERE.
HAVING.
FROM команды SELECT или DELETE.
Синтаксис запроса с подзапросом:
SELECT список_выбора
FROM имя_таблицы
WHERE выражение оператор
(SELECT список_выбора
FROM имя_таблицы
….);
где оператор – это оператор сравнения (например, >,<,= и т.д.) или оператор IN.
Правила оформления подзапроса следующие:
подзапрос должен быть заключен в круглые скобки;
подзапрос должен находиться справа от оператора сравнения в логическом выражении;
в подзапросе нельзя использовать предложение ORDER BY.
Обработка вложенных подзапросов
Вложенная команда SELECT выполняется первой. Результат передается в условие главного запроса. Первой выполняется команда SELECT вложенного блока запроса. Далее обрабатывается главный блок запроса. Результат подзапроса используется при этом для вычисления условия поиска.
Пример 1. Выборка фамилий и должностей сотрудников, имеющих такой же стаж, как у сотрудника Иванова (таблица Prep).
SELECT fam, dolzhn
FROM Prep
WHERE stash =
(SELECT stash
FROM Prep
WHERE fam = ‘Иванов’);