ON таблица_1.поле_1 оператор таблица_2.поле_1 {AND|OR} ON таблица_1.поле_2 оператор таблица_2.поле_2;
Предложения JOIN могут быть вложенными, в таком случае будет выполняться множественное соединение. Синтаксис запроса:
SELECT список_полей
FROM таблица_1 INNER JOIN таблица_2 INNER JOIN
таблица_3
ON таблица_2.поле_1 оператор таблица_3.поле_1
ON таблица 1.поле1 оператор таблица_2.поле _1 {AND|OR} ON таблица 1.поле _2 оператор таблица_2.поле_2;
Задание 18. С помощью SQL-запроса сформировать список групп с указанием наименования факультетов, к которым они относятся.
Запрос должен содержать поля: Номер группы и Наименование
факультета.
В запросе использовать предложение INNER JOIN.
Задание 19. С помощью SQL-запроса сформировать список коммерческих студентов на оплату за обучение, упорядоченный по наименованию специальности. Список должен содержать поля
Наименование специальности, Фамилия и Стоимость обучения. В
запросе использовать предложение INNER JOIN.
Задание 20. Составить SQL-запрос для подсчета итоговой стоимости платы за обучение коммерческими студентами по каждой специальности в разрезе факультетов.
Запрос должен содержать поля: Наименование факультета,
Наименование специальности и Итого по специальности.
В запросе использовать предложение INNER JOIN.
Внешнее соединение таблиц
Для выполнения внешнего соединения таблиц в любом предложении FROM используют предложения LEFT JOIN или RIGHT JOIN.
Синтаксис запроса на внешнее соединение:
87
SELECT список полей
FROM таблица_1 {LEFT|RIGHT} JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2
LEFT JOIN используется для создания левого внешнего объединения, при котором все записи из главной таблицы включаются в динамический набор, даже если в подчиненной таблице нет соответствующих им записей.
RIGHT JOIN используется для создания правого внешнего объединения, при котором все записи из подчиненной таблицы включаются в динамический набор, даже если в главной таблице нет соответствующих им записей.
Примечание. Операции LEFT JOIN или RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в операцию LEFT JOIN или RIGHT JOIN.
Задание 21. Составить SQL-запрос для определения по каждой специальности номеров групп.
Запрос должен содержать поля Наименование специальности и Номер группы.
В запросе использовать предложение LEFT JOIN.
Задание 22. Создать копию запроса по заданию 21. Присвоить ему имя Задание 22. Изменить запрос так, чтобы результатом являлось правое внешнее объединение таблиц Группа и Факультет.
Задание 23. Составить SQL-запрос, определяющий на основании таблиц Группа и Студент количество студентов в группах. С помощью запроса определить, по каким группам отсутствуют сведения о студентах.
Задание 24. Составить SQL-запрос, формирующий список старост групп.
Перед составлением запроса внести следующие изменения в базу данных:
88
изменить структуру таблицы Группа, добавив в таблицу новое поле Староста - числовое, длинное целое;
в режиме таблицы ввести в поле Староста номера зачетных книжек тех студентов из таблицы Студент, кто является старостой. Для этого можно открыть таблицу Группа, затем последовательно щелкать по знаку «+», расположенному в левом столбце каждой записи. На экране будет появляться список студентов, обучающихся в текущей группе. Просматривая этот список, можно выбрать номер зачетной книжки старосты; Список студентов, создаваемый запросом должен содержать
следующие поля: Наименование факультета, Номер группы, Фамилия, Дата рождения и Номер зачетной книжки старосты.
В объединение включить все группы из таблицы Группа, и те факультеты из таблицы Факультет, сведения о которых имеются в таблице Группа.
Сведения о старостах упорядочить в разрезе факультетов, по номерам групп.
Список полей в команде SELECT кроме полей может содержать выражения. Например, для вычисления стоимости обучения с учетом НДС в список полей следует включить выражение:
Специальность [Стоимость обучения]*(1+НДС) AS [Стоимость с учетом НДС]
Заголовком столбца для значений, полученных в результате вычисления выражения, будет Стоимость с учетом НДС.
Для вычисляемых полей допускается сортировка, задание условий отбора, расчет итоговых значений.
Например, необходимо упорядочить выборку по возрастанию значений стоимости с учетом НДС, в запрос следует добавить предложение
ORDER BY Специальность. [Стоимость обучения] *(1+НДС)
89
Если требуется найти итоговую стоимость в разрезе факультетов, необходимо выполнить группировку полученного по запросу объединения по наименованию факультета
GROUP BY Группа.[Номер факультета]
в список полей включить групповую операцию:
SUМ(Специальностъ.[Стоимость обучения]*(1+НДС))
Пример. Определить итоговую стоимость обучения с учетом НДС по номерам специальностей.
SELECT Специальность.[Номер специальности], Sum(Специальность. [Стоимость обучения] * (1+НДС)) AS [Итоговая стоимость с учетом НДС] FROM Специальность INNER JOIN ( Группа INNER JOIN Студент ON Студент.[Номер группы] = Группа.[Номер группы]) ON
Группа.[Номер специальности] = Специальность.[Номер специальности] WHERE Студент.Коммерческий=Yes GROUP BY Специальность. [Номер специальности];
Задание 25. Составить SQL-запрос для получения справки по стоимости обучения коммерческих студентов с учетом НДС. Принять, что стоимость обучения с учетом НДС коммерческого студента равна стоимости обучения по выбранной им специальности, умноженной на (1+0,2), где 0,2 - величина НДС.
В справку выводить следующие сведения о студенте: Номер группы,
Наименование специальности, Номер зачетной книжки, Фамилия и Стоимость обучения с учетом НДС.
Сведения о студентах упорядочить по убыванию значений
Стоимость обучения с учетом НДС.
Задание 26. Составить SQL-запрос для получения справки, содержащей итоговые данные о стоимости обучения с учетом НДС по специальностям.
В справку выводить Наименование специальности и Итоговую стоимость обучения с учетом НДС.
90
Создание новой таблицы
Создание повой таблицы выполняется командой CREATE TABLE. В этой команде выполняется описания новой таблицы, ее полей и индексов.
Синтаксис команда:
CREATE TABLE таблица (поле_1 тип [(размер)] [NOT NULL]
[индекс_1]
[, поле_2 тип [(размер)][NOT NULL] [индекс_2] [,...]]
[, CONSTRAINT составной_Индекс [,...]])
где таблица - имя создаваемой таблицы; поле_1, поле_2 и т.д. – имена нолей, создаваемых в новой таблице.
Таблица должна содержать хотя бы одно поле; тип – тип данных поля в новой таблице;
размер – размер поля в символах (только для текстовых и двоичных полей);
индекс_1, ипдекс_2 – предложение CONSTRAINT,
предназначенное для создания простого индекса;
составной_Индекс – предложение CONSTRAINT,
предназначенное для создания составного индекса.
Примечание. Если для поля добавлено ограничение NOT NULL, то при добавлении новых записей это поле должно содержать допустимые данные.
Пример. Создается новая таблица с двумя текстовыми полями и числовым полем. Поле SSN делается ключевым полем.
CREATE TABLE НоваяТаблица (Имя TEXT, Фамилия TEXT, SSN INTEGER
CONSTRAINT МойИндекс PRIMARY KEY);
Задание 27. Составить SQL-запрос на создание новой таблицы с именем Дисциплина1. Таблица Дисциплина1 должна иметь следующий состав полей:
Код дисциплины – числовое, байтовое (Byte);
91