
- •Оглавление
- •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.8.5. Многократное сравнение (any, all)
В такой проверке значение некоторого выражения сравнивается с каждым из множества значений, возвращенных вложенным запросом.
Синтаксис:
<выражение> <операция сравнения> ANY|ALL (<вложенный запрос>)
Значение выражения поочередно сравнивается с каждым значением, содержащимся в результатах вложенного запроса, в соответствии с заданной операцией сравнения.
Проверка ANY возвращает TRUE (Истина), если любое (хотя бы одно) из этих сравнений дает результат TRUE.
Проверка ALL возвращает TRUE (Истина), если все сравнения дают результат TRUE.
Пример 50. Вывести список групп, количество контактов в которых не самое большое.
SELECT G.NAZV, COUNT(*)
FROM GRUPPY G, KONT_GR KG
WHERE G.ID=KG.GR_ID
GROUP BY G.ID, G.NAZV
HAVING COUNT(*) < ANY (SELECT COUNT(*) FROM KONT_GR GROUP BY GR_ID)
Пример 51. Вывести список групп, количество контактов в которых самое большое.
SELECT G.NAZV, COUNT(*)
FROM GRUPPY G, KONT_GR KG
WHERE G.ID=KG.GR_ID
GROUP BY G.ID, G.NAZV
HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM KONT_GR GROUP BY GR_ID)
Вариант без многократного сравнения:
SELECT G.NAZV, COUNT(*)
FROM GRUPPY G, KONT_GR KG
WHERE G.ID=KG.GR_ID
GROUP BY G.ID, G.NAZV
HAVING COUNT(*) = (SELECT MAX(KOLVO)
FROM (SELECT COUNT(*) AS KOLVO
FROM KONT_GR
GROUP BY GR_ID))
Пример 52. Вывести тип вызова, зафиксированный с наибольшим количеством контактов.
Не работает в Microsoft Access:
SELECT T.NAZV, COUNT(DISTINCT N.KONT_ID)
FROM TIPY_VYZ T, VYZOVY V, NOMERA N
WHERE (T.ID=V.TIP_ID) AND (V.NOMER_ID=N.ID)
GROUP BY T.ID, T.NAZV
HAVING COUNT(DISTINCT N.KONT_ID)>=ALL
(SELECT COUNT(DISTINCT N1.KONT_ID)
FROM VYZOVY V1, NOMERA N1
WHERE V1.NOMER_ID=N1.ID
GROUP BY V1.TIP_ID)
Работает в Microsoft Access:
SELECT Q.NAZV, COUNT(*)
FROM ( SELECT DISTINCT T.NAZV, N.KONT_ID
FROM TIPY_VYZ T, VYZOVY V, NOMERA N
WHERE (T.ID=V.TIP_ID) AND (V.NOMER_ID=N.ID)) AS Q
GROUP BY Q.NAZV
HAVING COUNT(*) >= ALL
(SELECT COUNT(*)
FROM (SELECT DISTINCT V1.TIP_ID, N1.KONT_ID
FROM VYZOVY V1, NOMERA N1
WHERE V1.NOMER_ID=N1.ID) AS Q1
GROUP BY Q1.TIP_ID)
13.9. Объединение результатов нескольких запросов
При практическом использовании баз данных иногда возникает необходимость объединения в одной таблице результатов данных, возвращенных несколькими независимыми запросами. Такое объединение выполняется при помощи ключевого слова UNION, которое записывается между объединяемыми запросами, как показано на рисунке 13.2.
Рис. 13.2. Синтаксическая диаграмма объединения результатов запросов
Как видно из представленной синтаксической диаграммы, количество объединяемых запросов не ограничено. Если в операции объединения указано слово ALL, то в таблицу результатов включаются все копии абсолютно одинаковых строк, возвращенных объединяемыми запросами. Если же слово ALL не указано, копии строк удаляются.
Объединяемые запросы должны подчиняться следующим правилам:
- количество столбцов, возвращаемых предложениями SELECT объединяемых запросов должно быть одинаковым;
- возвращаемые столбцы, расположенные на одинаковых позициях в предложениях SELECT объединяемых запросов, должны иметь совместимые типы данных;
- предложение ORDER BY может быть записано только после последнего из объединяемых запросов и может содержать в качестве столбцов сортировки только порядковые номера столбцов и ключевое слово DESC.
Пример 53. Вывести список мелодий, уже назначенных какому-либо контакту или группе.
SELECT M.NAZV
FROM MELODII M, GRUPPY G
WHERE G.MEL_ID=M.ID
UNION
SELECT M.NAZV
FROM MELODII M, KONTAKTY K
WHERE K.MEL_ID=M.ID