- •Организация хранения информации на основе концепции баз данных
- •История развития баз данных
- •Классификация информационных систем
- •Основные компоненты информационной системы
- •Построение системных моделей предметных областей
- •Основы теории реляционных баз данных
- •Кортеж, атрибут, домен
- •Функциональная зависимость, ключи
- •Нормализация отношений
- •Примеры использования оператора select
- •Отбор данных из нескольких таблиц
- •Примеры использования операторов модификации данных
- •Этапы работы с базами данных
- •Структура простейшей базы данных
- •Свойства полей базы данных
- •Типы данных
- •Безопасность баз данных
- •Режимы работы с базами данных
- •Объекты базы данных
- •Проектирование базы данных
- •Разработка технического задания.
- •Разработка схемы данных
- •Контрольные вопросы
Отбор данных из нескольких таблиц
Пример 6. Для естественного соединения таблиц явно указываются условия соединения и в силу важности этой операции для нее в реляционной алгебре определено имяJOIN:
SELECT Студент.Фамилия, Обучение.Оценка
FROM Студент, Обучение
WHERE Студент.Код студента=Обучение.Код студента;
Аналогичный запрос на языке QBEприведен на рис. 2.20.

Рис. 2.17. Запрос на языкеQBEдля примера 6
В результате получим новую таблицу, в которой строки с данными о студентах (фамилии) соединены со строками с данными об их оценках.
Замечание. Соединяемые таблицы перечислены в разделе FROMоператора, условие соединения приведено в разделеWHERE. РазделWHERE, помимо условия соединения таблиц, может также содержать и условия отбора строк (например, выбрать только студентов, получивших отличные оценки).
Пример 7. Получить общее количество дисциплин (ключевое словоCOUNT):
SELECT COUNT(*) AS N FROM Дисциплина;
Аналогичный запрос на языке QBEприведен на рис. 2.21.

Рис. 2.18. Запрос на языкеQBEдля примера 7
В результате получим таблицу с одним столбцом и одной строкой, содержащей количество строк из таблицы Дисциплины:
.
Пример 8. Получить максимальный, минимальный и средний балл, полученный студентами (ключевые словаMAX,MIN,AVG):
SELECT
MAX(Обучение.Оценка) AS MX,
MIN(Обучение.Оценка) AS MN,
AVG(Обучение.Оценка) AS AV
FROM Обучение;
Аналогичный запрос на языке QBEприведен на рис. 2.22.

Рис. 2.19. Запрос на языкеQBEдля примера 8
В результате получим следующую таблицу с одной строкой:
![]()
Пример 9. Для каждого студента получить средний балл (ключевое словоGROUP BY…):
SELECT
Обучение.Код студента,
AVG(Обучение.Оценка) AS AV GROUP BY Обучение.Код студента;
Аналогичный запрос на языке QBEприведен на рис. 2.23.

Рис. 2.20. Запрос на языкеQBEдля примера 9
Этот запрос будет выполняться следующим образом. Сначала строки исходной таблицы будут сгруппированы так, чтобы в каждую группу попали строки с одинаковыми значениями поля Код студента. Затем внутри каждой группы будет найдено среднее значение поляОценка. От каждой группы в результирующую таблицу будет включена одна строка. Например:

Замечание 1. В списке отбираемых полей оператора SELECT, содержащего разделGROUP BY, можно включать только агрегатные функции и поля, которые входят в условие группировки. Следующий запрос выдаст синтаксическую ошибку:
SELECT Обучение.Код студента, Обучение.Код дисциплины, AVG(Обучение.Оценка) AS AV GROUP BY Обучение.Код студента;
Причина ошибки в том, что в список отбираемых полей включено поле Код дисциплины, которое не входит в раздел GROUP BY. И действительно, в каждую полученную группу строк может входить несколько строк с различными значениями поляКод дисциплины. Из каждой группы строк будет сформировано по одной итоговой строке. При этом нет однозначного ответа на вопрос, какое значение выбрать для поля Код дисциплины в итоговой строке.
Замечание 2. Некоторые диалекты SQL не считают это за ошибку. Запрос будет выполнен, но предсказать, какие значения будут внесены в поле Код дисциплины в результирующей таблице, невозможно.
