- •Раздел 1.
- •Основы построения баз данных
- •Самостоятельная работа №1 (6 часов)
- •Тема: Этапы развития баз данных. Языковые средства банка данных. Роль субд.
- •Основные этапы развития баз данных
- •Первый этап — базы данных на больших эвм
- •Второй этап - эпоха персональных компьютеров
- •Третий этап - распределенные базы данных
- •Языковые средства банка данных
- •Пользователи банков данных
- •Четвертый этап - перспективы развития систем управления базами данных
- •Контрольные вопросы
- •Самостоятельная работа №2 (8 часов)
- •Общий обзор средств для работы с базами данных
- •Как связаны друг с другом компоненты для работы с базами данных
- •Назначение bde Administrator
- •Создание псевдонима бд
- •Параметры баз данных типа standard
- •Установки параметров драйвера paradox
- •Установки параметров драйвера interbase
- •Контрольные вопросы
- •Самостоятельная работа №3 (8 часов)
- •Архитектура базы данных. Физическая и логическая независимость
- •Классификация субд
- •Способы разработки и выполнения приложений
- •Контрольные вопросы
- •Самостоятельная работа №4 (8 часов)
- •Классификация моделей данных
- •Основные особенности систем, основанных на инвертированных списках
- •Файловые структуры, используемые для хранения данных в бд
- •Этапы доступа к бд
- •Компоненты модели данных
- •Контрольные вопросы
- •Самостоятельная работа №5 (8 часов)
- •Методы хранения данных и доступа к ним
- •Последовательный метод
- •Прямой метод
- •Индексные методы
- •Индексно-последовательный метод
- •Индексно-произвольный метод
- •Инвертированные списки
- •Контрольные вопросы
- •Раздел 2. Проектирование и использование баз данных самостоятельная работа №6 (8 часов)
- •Этапы проектирования баз данных
- •Внешний уровень — подготовительный этап инфологического проектирования
- •Составные части инфологической модели
- •Требования и подходы к инфологическому проектированию
- •Контрольные вопросы
- •Самостоятельная работа №7 (8 часов)
- •1. Отсутствие кортежей-дубликатов
- •2. Отсутствие упорядоченности кортежей
- •3. Отсутствие упорядоченности атрибутов
- •4. Атомарность значений атрибутов
- •Нормализация - за и против
- •Контрольные вопросы
- •Самостоятельная работа №8 (8 часов)
- •Ссылочная целостность и каскадные воздействия
- •Контрольные вопросы
- •Раздел 3 Структурированный язык запросов sql самостоятельная работа №9 (12 часов)
- •Роль sql
- •Манипулирование реляционными данными
- •Контрольные вопросы
- •Самостоятельная работа №10 (12 часов)
- •Выбор данных с помощью команды select.
- •Объединение таблиц. Использование агрегатных функций
- •Реализация вложенных запросов
- •Модификация данных. Операторы insert, delete, update
- •Контрольные вопросы
- •Список рекомендуемой литературы
Контрольные вопросы
Какое поле таблицы Заказчики является первичным ключом?
Как по-другому называется столбец таблицы? Строка?
Почему нельзя запрашивать для просмотра первые пять строк таблицы?
Какое наибольшее основное различие между типами данных в SQL?
Распознает ли стандартный SQL тип данных DATA?
Является ли SQL системой управления базами данных (СУБД)? Почему?
Какие функции выполняет SQL? Какие из них наиболее важные? Обосновать свой ответ.
Чем характерно манипулирование реляционными данными?
Самостоятельная работа №10 (12 часов)
ТЕМА: Реляционная алгебра. Операторы языка SQL
Выбор данных с помощью команды select.
Большинство запросов на извлечение данных (запросов-выборок) строится на основе команды SELECT. Синтаксис этой команды следующий:
SELECT <предложение> [INTO < предложение >] FROM < предложение > [WHERE < предложение >] [GROUP BY < предложение >] [ HAVING < предложение >] [UNION < предложение >] [ORDER BY < предложение >];
В общем случае результатом выполнения запроса на извлечение данных является некоторая новая результирующая таблица. Порядок следования строк которой не определен и среди строк которой могут находиться дубликаты.
В качестве заголовков полей этой таблицы используются имена полей, из которых извлекались данные (эти поля перечисляются в SELECT-предложении). Если информация выбиралась из нескольких таблиц (имена таблиц перечисляются в FROM-предложении через запятую), то перед именем поля в результирующей таблице ставится имя таблицы, из которой выбирались данные.
Результирующая таблица получается последовательным применением предложений FROM, WHERE, GROUP BY и HAVING к таблицам, заданным в предложении FROM.
Чтобы вывести только уникальные строки таблицы, необходимо использовать ключевое слово DISTINCT.
Пример. Вывести список городов, в которых живут заказчики.
SELECT DISTINCT Город FROM Заказчики;
Если команда выбирает несколько полей, то DISTINCT опускает строки, где все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а некоторые различны, будут сохранены.
Для отбора строк по заданному критерию используется предложение
WHERE.
В состав критерия отбора могут входить как элементарные логические условия, так и сложные, в которых условия объединяются логическими связками (NOT, AND и OR). Сложные логические условия оцениваются по правилам булевой алгебры.
Объединение таблиц. Использование агрегатных функций
Результатом выполнения предложения FROM является расширенное декартово произведение таблиц из списка предложения.
Пример. Пусть надо поставить в соответствие каждому продавцу заказчиков, живущих в одном с ним городе. То есть необходимо для каждого продавца из таблицы Продавцы найти в таблице Заказчики всех заказчиков из того же города, в котором живет данный продавец. Это можно сделать следующим образом:
SELECT Продавцы.Номер_продавца,
Заказчики.Номер_заказчика, Продавцы .Город FROM Продавцы, Заказчики WHERE Продавцы Город. = Заказчики.Город;
В этом случае выполняется операция объединения таблиц.
Можно выполнять объединение таблицы с самой собой. При объединении таблицы с собой каждая строка таблицы комбинируется с собой и с каждой другой строкой таблицы. Затем каждая комбинация оценивается в терминах предиката, также как в объединениях различных таблиц.
Объединение таблицы с собой можно изобразить как объединение двух копий одной и той же таблицы. Таблица на самом деле не копируется, но SQL выполняет команду так, как если бы это было сделано. Другими словами, это объединение - такое же, как и любое другое объединение между двумя таблицами, за исключением того, что в данном случае обе таблицы идентичны.
Синтаксис команды для объединения таблицы с собой тот же, что и для объединения различных таблиц. Все повторяемые имена столбцов дополняются префиксами имени таблицы. Но так как таблица одна, то необходимо иметь два различных имени для такой таблицы. Это можно сделать заданием временных имен, называемых псевдонимами.
Псевдонимы определяются в предложении FROM следующим образом: указывается имя таблицы и через пробел псевдоним для нее. Псевдонимы можно использовать уже в предложении SELECT, то есть еще до определения их в предложении FROM. Псевдоним существует только во время выполнения команды. Когда выполнение запроса заканчивается, псевдонимы, используемые в нем, становятся неопределенными.
Пример. Найти все возможные пары заказчиков с одинаковым рейтингом: SELECT Первая.Фамилия_заказчика,
Вторая.Фамилия_заказчика, Первая.Рейтинг FROM Заказчики Первая, Заказчики Вторая WHERE Первая.Рейтинг = Вторая.Рейтинг;
Псевдонимы позволяют обработать таблицу Заказчики как две независимые таблицы Первая и Вторая.
Результирующая таблица имеет два значения для каждой комбинации, причем второй раз в обратном порядке. Это потому, что каждое значение представлено и в первом псевдониме, и во втором ( симметрично) псевдониме.
Следовательно, значение А в псевдониме! сначала выбирается в комбинации со значением В в псевдониме2, а затем значение В псевдониме! выбирается в комбинации со значением А в псевдониме2. Кроме того каждая строка была скомбинирована сама с собой, следовательно, будут получены строки типа А-А.
Агрегатные функции предназначены для того, чтобы вычислять некоторое значение для заданного множества строк. Таким множеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице или вся таблица.
В SQL определены пять стандартных агрегатных функций: COUNT -число строк или значений, МАХ - максимальное значение, MIN - минимальное значение, SUM - суммарное значение и AVG - среднее значение.
Для всех агрегатных функций, кроме COUNT(*), фактический (т.е. требуемый семантикой) порядок вычислений следующий: на основании параметров агрегатной функции из заданного множества строк производится список значений. Затем по этому списку значений производится вычисление функции. Если список оказался пустым, то значение функции COUNT для него есть 0, а значение всех остальных функций NULL (не определено).
С агрегатными функциями SUM и AVG могут использоваться только числовые поля. С COUNT, MAX и MIN - числовые и символьные поля. Когда эти функции используются с символьными полями, МАХ и MIN будут транслировать эти поля в эквивалент ASCII.
Если агрегатная функция определена с ключевым словом DISTINCT, то список значений строится из значений столбца, указанного после этого слова (в этом случае не допускается вычисление арифметических выражений!). Далее из этого списка удаляются неопределенные значения, и в нем устраняются значения-дубликаты. Затем вычисляется указанная функция.
Если агрегатная функция специфицирована без ключевого слова DISTINCT (или с ключевым словом ALL), то список значений формируется из значений арифметического выражения, указанного в качестве параметра агрегатной функции и вычисляемого для каждой строки заданного множества. Далее из списка удаляются неопределенные значения, и производится вычисление агрегатной функции.
Пример. Определить среднюю сумму, заработанную сотрудниками фирмы
SELECT AVG (Оклад + Премия ) FROM Сотрудник;
Для каждой строки таблицы этот запрос будет складывать значения полей Оклад и Премия для соответствующего заказчика, а затем вычислять среднее значение.
Для подсчета общего числа строк в таблице используется функция COUNT со звездочкой вместо имени поля, как в следующем примере
SELECT COUNT (*) FROM Заказчики;
Сортировка и группировка строк таблицы
Предложение ORDER BY позволяет установить желаемый порядок просмотра результирующей таблицы (отсортировать таблицу).
Фактически задается список столбцов результирующей таблицы, и для каждого столбца указывается порядок просмотра строк результата в зависимости от значений этого столбца (ASC - по возрастанию (умолчание), DESC - по убыванию). Столбцы можно задавать их именами тогда и только тогда, когда в списке выборки в предложении SELECT этому столбцу соответствует арифметическое выражение, состоящее только из имени столбца. Во всех остальных случаях в разделе ORDER BY должен указываться порядковый номер столбца в таблице-результате.
SELECT <список выборки> FROM <таблицы>
ORDER BY <столбец / целое число> [ASC / ESC] [ ,<столбец/ целое число>[ASC/ESC]...];
Пример. Вывести список заказчиков в алфавитном порядке фамилий: SELECT Номер_заказчика, Фамилия_заказчика FROM Заказчики ORDER BY 2;
Предложение GROUP BY позволяет объединить строки результирующей таблицы в группы с одинаковыми значениями столбцов.
Если R - это таблица, являющаяся результатом предыдущего раздела (FROM или WHERE), то результатом раздела GROUP BY является разбиение R на множество групп строк. Это множество состоит из минимального числа таких групп, в которых для каждого столбца из списка столбцов раздела GROUP BY во всех строках каждой группы, включающей более одной строки, значения этого столбца совпадают.
Пример. Вывести номера, описание и количество товара, объединенные в группы с совпадающими описаниями товара.
SELECT Номер, Описание, Количество FROM Товар
GROUP BY Описание;
Условие поиска предложения HAVING задает условие на группу строк сгруппированной таблицы. Условие поиска предложения HAVING строится по тем же синтаксическим правилам, что и условие поиска предложения WHERE, и может включать те же самые предикаты.! (см. п. 2.3.). Однако в арифметических выражениях предикатов, входящих в условие выборки предложения HAVING, прямо можно использовать только столбцы, указанные в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно использовать только внутри спецификаций агрегатных функций COUNT, SUM, AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для всей группы строк.
Например, нельзя писать
SELECT Номер_Продавца, МАХ(Сумма) FROM Заказы
GROUP BY Номер_Продавца
HAVING Дата_3аказа='10.03.98';
для вывода наибольшей суммы, полученной каждым Продавцом 10 марта.
Поле Дата Заказа нельзя использовать в предложении HAVING, т.к. оно может иметь больше чем одно значение на группу вывода. Правильно записывается SELECT Номер_Продавца, МАХ(Сумма) FROM Заказы WHERE Дата_3аказа=' 10.03.98' GROUP BY Номер Продавца;
Результатом выполнения предложения HAVING является сгруппированная таблица, содержащая только те группы строк, дли которых выполняется условие поиска.
