- •Оглавление
- •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.1. Использование вложенных запросов
Вложенный запрос в предложении WHERE или HAVING может использоваться в следующих типах условий отбора:
- сравнение с результатом вложенного запроса;
- проверка на принадлежность результатам вложенного запроса;
- проверка на существование;
- многократное сравнение.
13.8.2. Сравнение с результатом вложенного запроса
В такой проверке значение некоторого выражения сравнивается со значением, возвращенным вложенным запросом. Эта проверка напоминает простое сравнение.
Вложенный запрос должен возвращать только одно значение требуемого типа и может стоять только справа от операции сравнения.
Синтаксис:
<выражение> <операция сравнения> (<вложенный запрос>)
Пример 43. Вывести информацию (тип вызова, время, длительность, стоимость) о самом продолжительном телефонном разговоре.
SELECT T.NAZV, V.VREMYA, V.DLIT, V.STOIM
FROM VYZOVY V, TIPY_VYZ T
WHERE (T.ID=V.TIP_ID) AND
V.DLIT=(SELECT MAX(DLIT) FROM VYZOVY)
Пример 44. Вывести список контактов, чей возраст больше среднего.
SELECT K.NAME1, K.VOZRAST
FROM KONTAKTY K
WHERE K.VOZRAST>(SELECT AVG(VOZRAST) FROM KONTAKTY)
Пример 45. Каких вызовов было больше, чем пропущенных.
SELECT T.NAZV, COUNT(*)
FROM TIPY_VYZ T, VYZOVY V
WHERE T.ID=V.TIP_ID
GROUP BY T.ID, T.NAZV
HAVING COUNT(*)>(SELECT COUNT(*)
FROM TIPY_VYZ T1, VYZOVY V1
WHERE (T1.ID=V1.TIP_ID) AND (T1.NAZV='Пропущенный'))
13.8.3. Проверка на принадлежность результатам вложенного запроса
Значение некоторого выражения проверяется на равенство одному из множества значений, возвращенных вложенным запросом. Эта проверка напоминает простую проверку на членство в множестве. Вложенный запрос может возвращать не более одного столбца.
Синтаксис:
<выражение> [NOT] IN (<вложенный запрос>)
Пример 46. Вывести список мелодий, уже назначенных какому-либо контакту.
SELECT NAZV
FROM MELODII
WHERE ID IN (SELECT DISTINCT MEL_ID FROM KONTAKTY)
Вариант без вложенного запроса:
SELECT DISTINCT M.NAZV
FROM MELODII M, KONTAKTY K
WHERE M.ID=K.MEL_ID
Пример 47. Вывести список мелодий, назначавшихся только для групп контактов.
SELECT NAZV
FROM MELODII
WHERE (ID IN (SELECT DISTINCT MEL_ID FROM GRUPPY)) AND
(ID NOT IN (SELECT DISTINCT MEL_ID FROM KONTAKTY))
13.8.4. Проверка на существование (exists)
С помощью такого условия проверяется наличие (или отсутствие) строк в таблице результатов вложенного запроса, который обязательно должен содержать внешнюю ссылку, т.е. столбец из таблицы главного запроса.
Синтаксис:
[NOT] EXISTS (<связанный вложенный запрос>)
Условие EXISTS считается выполненным, если подзапрос вернул хотя бы одну строку не важно каких данных.
Условие NOT EXISTS считается выполненным, если подзапрос не вернул ни одной строки.
Проверка на существование не использует результаты вложенного запроса, а проверяет только их наличие. По этой причине в SQL смягчается правило, согласно которому «вложенный запрос должен возвращать один столбец данных», поэтому на практике при записи вложенного запроса в проверке EXISTS всегда используется форма SELECT *.
Пример 48. Вывести список контактов, уже отнесенных к какой-либо группе.
SELECT K.NAME1
FROM KONTAKTY K
WHERE EXISTS (SELECT * FROM KONT_GR WHERE KONT_ID=K.ID)
Вариант без вложенного запроса:
SELECT DISTINCT K.NAME1
FROM KONTAKTY K, KONT_GR KG
WHERE KONT_ID=K.ID
Пример 49. Вывести список контактов, не отнесенных ни к одной группе.
SELECT K.NAME1
FROM KONTAKTY K
WHERE NOT EXISTS (SELECT * FROM KONT_GR KG WHERE KG.KONT_ID=K.ID)
Вариант с проверкой на принадлежность результатам вложенного запроса:
SELECT NAME1
FROM KONTAKTY
WHERE ID NOT IN (SELECT DISTINCT KONT_ID FROM KONT_GR)
Вариант без вложенного запроса:
SELECT K.NAME1
FROM KONTAKTY K LEFT JOIN KONT_GR KG ON KG.KONT_ID=K.ID
WHERE KG.KONT_ID IS NULL