
- •Языки манипулирования реляционными данными (Data Manipulation Languages, dml)
- •1). Реляционная алгебра.
- •2). Реляционное исчисление.
- •3). Языки, ориентированные на преобразования.
- •4). Графически языки.
- •Язык структурированных запросов sql (Structured Query Language)
- •Однотабличные запросы-выборки
- •Многотабличные запросы-выборки
- •1). Задание соединения таблиц в предложении where.
- •2). Задание соединения таблиц в предложении from.
- •3). Подчиненные запросы.
- •4). Запросы объединения.
- •Вычисляемые поля.
- •1). Комбинирование значений в текстовых полях.
- •2). Расчет числовых значений и дат.
- •3). Вычисление итоговых значений.
- •4). Подчиненные запросы.
- •Запросы с параметрами.
- •Запросы-изменения
- •1). Запрос на создание таблицы.
- •2). Запрос на добавление записей.
- •3). Запрос на обновление.
- •4). Запрос на удаление.
- •Язык определения реляционных данных (Data Definition Language, ddl)
3). Подчиненные запросы.
Создаются путем включения одного запроса в другой запрос.
(Будут рассмотрены позже).
4). Запросы объединения.
Осуществляется поочередное выполнение двух и более запросов и объединение их результатов с помощью предложения UNION.
Пример: Вывести номера всех планировавшихся рейсов и плановую дату их вылетов, а также вылетов, на которые продавались билеты.
SELECT [Номер рейса], [Плановая дата]
FROM Вылет
UNION
SELECT [Номер рейса], [Дата вылета]
FROM Пассажир
Замечания:
1). Число полей и их типы данных в предложениях SELECT должны совпадать.
2). При использовании UNION повторяющихся записей нет. Чтобы возвращались все записи, надо использовать UNION ALL.
3). В конце каждого запроса, входящего в запрос объединения, можно включать предложения WHERE.
4). Предложение ORDER BY можно включить только в конце последнего запроса.
Вычисляемые поля.
Предложение SELECT может содержать не только поля из таблиц, но и вычисляемые поля.
Вычисляемые поля позволяют:
комбинировать значения в текстовых полях;
рассчитывать числовые значения и даты;
рассчитывать значения итоговых полей с помощью групповых функций;
создавать подчиненные запросы.
1). Комбинирование значений в текстовых полях.
Пример: Вывести расписание рейсов, соединив в одно поле поля Время вылета и Время прибытия.
SELECT [Номер рейса], [Пункт назначения], [Время вылета] & “ - “ & [Время прибытия] AS Время
FROM Рейс
Ответ:
-
Номер рейса
Пункт назначения
Время
12345
Москва
10:13 – 12:55
……..
……..
………
2). Расчет числовых значений и дат.
Пример: На сколько дней опоздал каждый вылет?
SELECT [Номер рейса], [Плановая дата], [Реальная дата] - [Плановая дата] AS [Опоздание (в днях)]
FROM Вылет
Замечания:
1). Ввод данных в вычисляемые поля или их изменение в результирующем наборе невозможны.
2). При изменении значений полей, используемых в выражении, значение вычисляемого поля обновляется автоматически.
3). Вычисление итоговых значений.
А). Вычисление итогов для всех записей.
К полю, по которому производится вычисление, применяется групповая (итоговая) функция.
Типы групповых функций:
Sum – сумма значений поля.
Avg – среднее от значений поля.
Min – наименьшее значение поля.
Max – наибольшее значение поля.
Count – количество значений поля.
Пример: Определить количество рейсов авиакомпании.
SELECT Count ([Номер рейса]) AS [Число рейсов]
FROM Вылет
Ответ:
-
Число рейсов
5
Замечание:
1). Вместо Count ([Номер рейса]) можно было указать Count (*).
2). Если не переименовывать поле, к которому применена групповая функция, то ему будет дано стандартное имя, которое зависит от реализации в конкретной СУБД.
В одном запросе можно применить несколько групповых функций для различных полей.
Пример: Определить количество рейсов авиакомпании и общее число мест.
SELECT Count ([Номер рейса]) AS [Число рейсов],
Sum ([Число мест] AS [Общее число мест]
FROM Вылет
Ответ:
-
Число рейсов
Общее число мест
5
495
Возможно совместное использование групповых функций для одного поля.
Пример: Определить диапазон числа мест в самолетах авиакомпании.
SELECT Min ([Число мест]) & “ – “ & Max ([Число мест]) AS [Диапазон мест]
FROM Рейс
Ответ:
-
Диапазон мест
60 - 120
Б). Вычисление итогов по группам записей.
GROUP BY – выполняет группировку записей.
– указывает поле, по которому должны объединяться записи с одинаковыми значениями в этом поле;
– для каждой такой записи вычисляется итоговое значение с помощью групповой функции.
Пример: Определить количество плановых вылетов для каждого рейса.
SELECT [Номер рейса], Count ([Плановая дата]) AS [Количество вылетов]
FROM Вылет
GROUP BY [Номер рейса]
Ответ:
-
Номер рейса
Количество вылетов
12345
3
67890
2
77777
2
89898
1
Замечание:
1). При использовании GROUP BY все поля в предложении SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов групповой функции.
Пример: Определить количество пассажиров и среднюю цену билетов на каждый из вылетов.
SELECT [Номер рейса], [Дата вылета],
Count ([Паспортные данные]) AS [Число пассажиров],
Avg ([Цена билета]) AS [Средняя цена билета]
FROM пассажир
GROUP BY [Номер рейса], [Дата вылета]
Если убрать группировку по дате вылета, то будет число пассажиров и средняя цена билетов на каждый тип рейса.
Задание условий отбора при расчете итоговых полей.
А). Ограничение числа выводящихся групп.
HAVING – отбор уже сгруппированных записей;
– условие отбора задается для поля, по которому производится группировка.
Пример: Каково общее число мест рейсов в Москву и в Киев?
Ответ:
-
Пункт назначения
Общее число мест
Киев
100
Москва
160
SELECT [Пункт назначения], Sum ([Число мест]) AS [Общее число мест]
FROM Рейс
GROUP BY [Пункт назначения]
HAVING [Пункт назначения] = ‘Москва’ OR [Пункт назначения] = ‘Киев’
Б). Ограничение числа записей перед выполнением группирования.
Условие отбора задается в предложении WHERE.
SELECT [Пункт назначения], Sum ([Число мест]) AS [Общее число мест]
FROM Рейс
WHERE [Пункт назначения] = ‘Москва’ OR [Пункт назначения] = ‘Киев’
GROUP BY [Пункт назначения]
WHERE – для отбора записей перед группированием.
HAVING – для отбора записей после группирования.
Ответ может различаться в случаях использования WHERE и HAVING.
В). Отбор итоговых значений, удовлетворяющих определенным условиям.
Условие отбора формируется для того поля, по которому применяется групповая функция.
Пример: Вывести города, в которые потенциальное число перевозимых пассажиров не ниже 120.
Ответ:
-
Пункт назначения
Общее число мест не ниже 120
Владивосток
120
Москва
160
SELECT [Пункт назначения], Sum ([Число мест]) AS [Общее число мест не ниже 120]
FROM Рейс
GROUP BY [Пункт назначения]
HAVING Sum ([Число мест]) >=120
Замечание:
1). Если бы условие отбора по числу мест было выполнено до группирования (с помощью WHERE), то ответом было бы: Владивосток, 120.