- •Содержание
- •1.1. Основные понятия
- •1.2. Компоненты БнД
- •1.3. Классификация БнД и бд
- •1.4. Этапы проектирования бд
- •1.5. Взаимосвязь этапов проектирования бд
- •Вопросы для самоконтроля
- •Раздел 2. Проектирование баз данных. Тема 2. Инфологическое моделирование (начало)
- •2.1. Необходимость инфологического моделирования
- •2.1.1. Виды ограничений целостности
- •2.1.2. Причины, приводящие к нарушению ограничений целостности
- •2.2. Описание объектов и их свойств
- •Тема 3. Инфологическое моделирование (окончание)
- •3.1. Описание связей между объектами.
- •3. 2. Описание сложных объектов
- •Вопросы для самоконтроля
- •Тема 4. Даталогическое проектирование
- •4.1. Общие сведения
- •4.2. Подход к даталогическому проектированию
- •4.3. Определение состава бд
- •4.4. Разновидности даталогических моделей
- •Вопросы для самоконтроля
- •Тема 5. Реляционная даталогическая модель базы данных
- •5.1. Основные понятия
- •5.2. Цели проектирования рбд
- •5.2.1. Возможность хранения всех необходимых данных в бд
- •5.2.2. Исключение избыточности данных
- •5.2.3. Сведение числа хранимых в бд отношений к минимуму
- •5.2.4. Нормализация отношений
- •Вопросы для самоконтроля
- •Тема 6. Метод проектирования реляционной базы данных на основе илм
- •Вопросы для самоконтроля
- •Тема 7. Пример проектирования реляционной базы данных на основе илм
- •7.6. Определение состава бд
- •7.7. Определение отношений, включаемых в бд
- •7.8. Описание логической структуры бд на языке субд (схема бд)
- •7.9. Сравнение спроектированной рбд с однотабличной бд
- •Вопросы для самоконтроля
- •Раздел 3. Описание информационных потребностей пользователей базы данных. Тема 8. Информационные потребности пользователей базы данных.
- •8.1. Типы и языки запросов
- •8.2. Реляционная алгебра (алгебра отношений)
- •8.2.1. Проекция
- •8.2.2. Выборка
- •8.2.3. Соединение
- •8.2.4. Объединение
- •8.2.5. Пересечение
- •8.2.6. Вычитание
- •8.2.7. Умножение
- •8.2.8. Деление
- •8.3. Примеры запросов на реляционном языке
- •Вопросы для самоконтроля
- •Раздел 4. Использование языкаSql для работы с базами данных. Тема9. Структурированный язык запросов sql
- •9.1. Стандарт и разновидности языка sql
- •9.2. Краткое введение в sql
- •Тема 10. Основные элементы языка sql. Использование языка sql для выборки данных
- •10.1. Оператор select
- •Тема 11. Отбор строк из таблиц. Условия поиска строк
- •Вопросы для самоконтроля
- •Тема 12. Сортировка таблиц
- •Тема 13. Использование псевдонимов для обозначения таблиц базы данных. Самосоединение таблиц. Итоговые запросы и агрегатные функции
- •Вопросы для самоконтроля
- •Тема 14. Запросы с группировкой
- •Тема 15. Вложенные запросы
- •Вопросы для самоконтроля
- •Тема 16. Изменение данных в базе данных
- •16.1. Корректировка таблиц бд
- •16.2. Создание объектов бд
- •16.3. Создание представлений
- •Вопросы для самоконтроля
- •Рекомендуемая литература
Вопросы для самоконтроля
Для чего предназначено предложение GROUP BY оператора SELECT?
Для чего предназначено предложение HAVING оператора SELECT?
Для чего предназначено предложение ORDER BY оператора SELECT?
В каком предложении оператора SELECT задаются псевдонимы таблиц?
Приведите пример использования псевдонимов таблиц в операторе SELECT (для учебной БД).
Для учебной БД приведите пример использования самосоединения в запросе на языке SQL.
Для чего предназначена агрегатная функция AVG( )? Приведите правила записи аргумента.
Для чего предназначена агрегатная функция SUM( )? Приведите правила записи аргумента.
Для чего предназначена агрегатная функция MIN( )? Приведите правила записи аргумента.
Для чего предназначена агрегатная функция MAX( )? Приведите правила записи аргумента.
Для чего предназначена агрегатная функция COUNT( )? Приведите правила записи аргумента.
Для чего предназначена агрегатная функция COUNT(*)?
Для учебной БД напишите запрос, вычисляющий среднедушевой налог.
Тема 14. Запросы с группировкой
Группировка данных задается фразой GROUP BY. При этом обеспечивается группировка только на одном уровне, т.е. нельзя разбить каждую из групп на группы более низкого уровня. Например, получить сведения о сумме доходов каждого жителя позволяет запрос
SELECT nom, SUM(money) FROM Have_D GROUP BY nom
В этом примере используется группировка по одному столбцу. В общем случае строке таблицы можно группировать по любой комбинации ее столбцов. При этом имена столбцов в фразе GROUP BY перечисляются через запятую.
Фраза GROUP BY означает логическую группировку таблицы по указанному столбцу или столбцам. Физически строки в таблице не перекомпоновываются.
Логика выполнения запроса при наличии фразы GROUP BY несколько отличается от реализации обычного запроса. Фраза SELECT при использовании GROUP BY применяется к каждой группе, а не к каждой строке, как обычно.
Каждое выражение во фразе SELECT должно принимать единственное значение для группы, т.е. оно может быть либо самим столбцом, по которому производится группировка, либо арифметическим выражением, включающим этот столбец, либо функцией, которая получает в результате единственное значение для группы. Кроме того, во фразу SELECT может быть включена константа.
Вместе с GROUP BY может использоваться фраза HAVING, которая для группы играет ту же роль, что и фраза WHERE для строк. Например, запрос на выдачу списка номеров жителей, которые имеют более одного источника дохода, будет выглядеть следующим образом:
SELECT nom FROM Have_D GROUP BY nom HAVING COUNT(*)>1
Выражение во фразе HAVING должно принимать единственное значение для группы. Функция COUNT(*) означает подсчет числа строк в группе (или таблице).
Тема 15. Вложенные запросы
Условие отбора в фразе WHERE может формулироваться с помощью подзапроса, т.е. оператора SELECT, вложенного в другой оператор SELECT. Например, если надо получить сведения о жителях, имеющих телефон с номером 532-98-54, то это можно сделать, задав такой запрос:
SELECT * FROM person WHERE Adr=
(SELECT Adr FROM tphone WHERE Ntel=‘5329854’)
При реализации запроса, содержащего вложенные подзапросы, система обрабатывает вложенный подзапрос самого низкого уровня, затем следующего уровня и так последовательно “поднимается” вверх.
Если подзапрос выдает множество значений, то в фразе WHERE можно использовать предикат IN, предназначенный для выяснения принадлежности элемента множеству. Например, запрос на выдачу фамилий жителей, имеющих источник дохода “РАБОТА1”, может быть записан с подзапросом:
SELECT Fio FROM person WHERE nom IN
(SELECT nom FROM Have_D WHERE source=‘РАБОТА1’)
Во многих случаях можно избежать использования вложенных запросов, заменяя их на запросы, в которых задано условие соединения таблиц. Так, два последних запроса можно представить иначе:
SELECT person.* FROM tphone,person WHERE
person.Adr= tphone.Adr AND Ntel=‘5329854’
SELECT Fio FROM Have_D,person WHERE
person.nom= Have_D.nom AND source=‘РАБОТА1’
Такие запросы выглядят более простыми и менее “процедурными”, так как при задании запроса не надо определять порядок, в котором просматриваются таблицы.
В приведенных выше примерах были рассмотрены запросы с одним уровнем вложенности, однако допускается задавать несколько уровней вложенности запросов.