- •Оглавление
- •1. Основные понятия информационных систем
- •1.1. История возникновения информационных систем
- •1.2. Современное понятие информационной системы
- •2. Автоматизированные информационные системы
- •2.1. Преимущества автоматизированных информационных систем
- •2.2. Классификация аис
- •2.2.1. Классификация по типу хранимых данных.
- •2.2.2. Классификация по характеру обработки данных.
- •2.2.3. Классификация по степени интеграции данных и автоматизации управления.
- •2.2.4. Классификация по степени распределенности.
- •2.2.5 Классификация аис по другим признакам
- •3. Банки данных
- •3.1. Понятие банка данных
- •3.2. Преимущества банков данных
- •3.3. Предпосылки широкого использования банков данных
- •3.4. Общие требования к банкам данных
- •3.5. Компоненты банка данных
- •3.5.1. Информационная компонента
- •3.5.2. Программные средства банков данных
- •3.5.3. Языковые средства БнД
- •3.5.4. Технические средства банков данных
- •3.5.5. Организационно-методические средства.
- •4. Виды банков данных
- •4.1. Банки документов
- •4.2. Банки знаний
- •4.3. Экспертные системы
- •4.4. Хранилища данных
- •5. Системы управления базами данных (субд)
- •5.1. Назначение и состав субд
- •5.2. Классификация субд
- •5.3. Архитектура субд
- •5.4. Функции субд
- •5.5. Основные распространенные субд
- •6. Основы проектирования баз данных
- •6.1. Основные понятия в теории баз данных
- •6.2. Связи между сущностями
- •6.3. Этапы проектирования базы данных
- •6.3.1. Инфологическое моделирование
- •6.3.2. Даталогическое моделирование
- •6.3.3. Физическое моделирование
- •7. Модели данных
- •7.1. Иерархическая модель данных
- •7.2. Сетевая модель данных
- •7.3. Понятие реляционной модели данных
- •7.3. Постреляционная модель данных
- •7.4. Объектно-ориентированная модель данных
- •7.5. Объектно-реляционная модель данных
- •8. Реляционная модель данных
- •8.1. Понятие «отношения» в реляционной модели данных
- •8.2. Свойства отношений
- •8.3. Требования к реляционным базам данных
- •8.4. Основные математические понятия
- •9. Нормализация баз данных
- •9.1. Первая нормальная форма
- •9.2. Вторая нормальная форма
- •9.3. Третья нормальная форма
- •9.4. Нормальная форма Бойса – Кодда
- •9.5. Многозначные зависимости
- •9.6. Четвертая нормальная форма
- •9.7. Пятая нормальная форма
- •9.8. Принципы выбора нормальной формы для проектируемой базы данных
- •10. Введение в язык запросов sql
- •10.1. Назначение языка sql
- •10.2. Достоинства языка sql
- •10.3. Состав языка sql
- •10.4. Трехзначная логика
- •10.5. Основные типы данных языка sql
- •11. Sql. Некоторые Операторы языка определения данных
- •11.1. Оператор create table
- •11.2. Оператор alter table
- •11.3. Оператор drop table
- •12. Sql. Операторы изменения данных
- •12.1. Оператор insert into
- •12.2. Оператор update
- •12.3. Оператор delete from
- •13. Sql. Выбор информации из базы данных
- •13.1. Общее описание оператора select
- •13.1.1. Назначение оператора select
- •13.1.2. Синтаксическая диаграмма оператора select
- •13.2. Обязательные предложения оператора select
- •13.2.1. Предложение select.
- •13.2.2. Предложение from.
- •13.2.3. Примеры простейших запросов на выборку.
- •13.3. Отбор строк (предложение where)
- •13.3.1. Сравнение
- •13.3.2. Проверка на принадлежность диапазону значений (between)
- •13.3.3. Проверка на членство во множестве (in)
- •13.3.4. Проверка на соответствие шаблону (like)
- •13.3.5. Отслеживание отсутствия значений (null)
- •13.3.6. Составные условия отбора строк
- •13.4. Сортировка результатов запроса (предложение order by)
- •13.5 Примерный порядок выполнения простых однотабличных запросов
- •13.6. Многотабличные запросы
- •13.6.1. Полные имена столбцов.
- •13.6.2. Псевдонимы таблиц.
- •13.6.3. Особенности многотабличных запросов.
- •13.6.4. Примеры многотабличных запросов.
- •13.6.5. Соединение таблиц в предложении from.
- •13.6.6. Примерный порядок выполнения многотабличных запросов
- •13.7. Итоговые запросы на чтение
- •13.7.1. Агрегатные функции.
- •13.7.2. Группировка строк (предложение group by)
- •13.7.3. Отбор групп строк (предложение having)
- •13.7.4. Примерный порядок выполнения итоговых запросов
- •13.8. Вложенные запросы на чтение (подзапросы)
- •13.8.1. Использование вложенных запросов
- •13.8.2. Сравнение с результатом вложенного запроса
- •13.8.3. Проверка на принадлежность результатам вложенного запроса
- •13.8.4. Проверка на существование (exists)
- •13.8.5. Многократное сравнение (any, all)
- •13.9. Объединение результатов нескольких запросов
13.7.3. Отбор групп строк (предложение having)
Точно так же, как предложение WHERE используется для отбора отдельных строк, участвующих в запросе, предложение HAVING используется для отбора групп строк, созданных предложением GROUP BY.
Синтаксис:
HAVING <условие отбора групп строк>
В предложении HAVING используются такие же типы условий, как и в предложении WHERE. Кроме того, учитывая, что условие в предложении HAVING применяется к группе строк, в нем можно использовать агрегатные функции, столбцы группировки, константы, а также выражения, состоящие из перечисленных элементов.
На практике условие в предложении HAVING всегда должно включать в себя как минимум одну агрегатную функцию. Если это не так, условие поиска нужно переместить в предложение WHERE.
Примечание. Все имена столбцов из предложения HAVING, которые не используются как аргументы агрегатных функций, должны быть обязательно указаны в предложении GROUP BY!!!
Пример 41. Вывести список мелодий, которые установлены более чем для одного контакта.
SELECT M.NAZV, COUNT(*)
FROM MELODII M, KONTAKTY K
WHERE (M.ID=K.MEL_ID)
GROUP BY M.ID, M.NAZV
HAVING COUNT(*)>1
Пример 42. Вывести информацию о контактах (имя, количество вызовов, общая длительность), разговоры с которыми (без учета пропущенных) длились в среднем более 1 минуты).
SELECT K.NAME1, COUNT(*), SUM(DLIT)
FROM KONTAKTY K, NOMERA N, VYZOVY V, TIPY_VYZ T
WHERE (K.ID=N.KONT_ID) AND (N.ID=V.NOMER_ID) AND (V.TIP_ID=T.ID)
AND (T.NAZV<>'Пропущенный')
GROUP BY K.ID, K.NAME1
HAVING AVG(DLIT)>60
13.7.4. Примерный порядок выполнения итоговых запросов
1. Из всех таблиц, указанных в предложении FROM, сформировать одну общую таблицу как декартово произведение (или соединение при наличии операции JOIN).
2. Если имеется предложение WHERE, применить заданное в нем условие отбора к каждой строке общей таблицы и оставить только те строки, для которых это условие выполняется (TRUE), остальные строки отбросить.
3. Если имеется предложение GROUP BY, разделить оставшиеся строки на группы таким образом, чтобы в строках каждой группы были одинаковые значения во всех столбцах группировки.
4. Если имеется предложение HAVING, применить заданное в нем условие поиска к каждой группе строк и оставить только те группы строк, для которых это условие выполняется.
5. Для каждой из оставшихся строк (при наличии группировки – для каждой из групп строк) вычислить значение каждого элемента в списке возвращаемых столбцов (предложение SELECT) и создать одну строку таблицы результатов запроса.
6. Если указано ключевое слово DISTINCT, удалить из таблицы результатов запроса все повторяющиеся строки.
7. Если имеется предложение ORDER BY, отсортировать результаты запроса.
13.8. Вложенные запросы на чтение (подзапросы)
Вложенным запросом на чтение (подзапросом, внутренним запросом) называется оператор SELECT, который находится внутри другого оператора SELECT (называемого также внешним или основным запросом). Вложенность подзапросов практически неограниченна, т.е. внутри вложенного запроса может быть еще один вложенный запрос.
Вложенные запросы применяются в тех случаях, когда для получения конечной таблицы результатов запроса необходимо сначала получить некоторую промежуточную таблицу, которую, собственно, и должен возвращать подзапрос.
Вложенные запросы играют важную роль в SQL по следующим причинам:
- оператор SQL с вложенным запросом зачастую является самым естественным способом выражения запроса, так как он лучше всего соответствует словесному описанию запроса;
- вложенные запросы облегчают написание операторов SELECT, поскольку они позволяют разбивать запрос на части, а затем складывать эти части вместе;
- существуют запросы, которые нельзя сформулировать на SQL, не прибегая к помощи вложенных запросов.
Вложенные запросы чаще всего используются в предложениях FROM, WHERE и HAVING.
Результаты вложенного запроса в предложении FROM используются как источник данных (исходная таблица) для основного запроса. Пример такого запроса рассматривался в п. 13.7.2.
В данном подразделе рассмотрим вложенные запросы в предложениях WHERE и HAVING.
Вложенные запросы в предложении WHERE помогают отбирать из таблицы результатов запроса отдельные строки, а в предложении HAVING – группы строк.
Вложенный запрос хотя и сохраняет структуру оператора SELECT, но при этом обладает рядом отличительных особенностей.
Вложенный запрос всегда заключается в круглые скобки.
Таблица результатов вложенного запроса в предложениях WHERE и HAVING может содержать только один столбец.
Во вложенный запрос не может входить предложение ORDER BY.
Во вложенном запросе можно использовать имена столбцов таблиц главного запроса (внешние ссылки). Такие вложенные запросы называются связанными.