ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Методичка
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 4815
Скачиваний: 8
46
предложение HAVING определяет, какие сгруппированные записи,
выданные в результате выполнения запроса, отображаются при использо-
вании инструкции SELECT с предложением GROUP BY. После того как
записи результирующего набора будут сгруппированы с помощью пред-
ложения GROUP BY, предложение HAVING отберет те из них, которые
удовлетворяют условиям отбора, указанным в предложении HAVING;
предложение ORDER BY позволяет отсортировать записи, получен-
ные в результате запроса, в порядке возрастания или убывания на основе
значений указанного поля или полей.
Следует отметить, что инструкции SELECT не изменяют данные
в базе данных.
Для более наглядного представления результатов выполнения запро-
сов на выборку добавим в нашу базу данных таблицы «Дисциплины»
и «Успеваемость» и добавим поле «Номер_группы» в таблицу «Студенты»
(рис. 15), а также заполним эти таблицы.
Рис. 15 — Обновленная схема базы данных
На рисунке 16 приведено содержимое таблиц «Студент», «Успевае-
мость» и «Дисциплина».
47
Рис. 16 — Содержимое таблиц базы данных
В следующем примере представлен простейший запрос на выборку
записей из таблицы «Студенты», в котором отбираются студенты, обу-
чающиеся в группе 432-1:
SELECT Студент.Номер_зачетной_книжки,
Студент.ФИО_студента, Студент.Номер_группы
FROM Студент
WHERE Студент.Номер_группы='432-1';
На рисунке 17 представлен результат выполнения этого запроса, бы-
ли найдены 2 записи, удовлетворяющие критерию запроса.
Рис. 17 — Результат выполнения запроса
Помимо обычных знаков сравнения (=,<,>,<=,>=, <>) в языке SQL
в условии отбора используется ряд ключевых слов:
48
Is not null — выбрать только непустые значения;
Is null — выбрать только пустые значения;
Between…And определяет принадлежность значения выражения ука-
занному диапазону.
Синтаксис:
выражение [Not] Between значение_1 And значение_2,
где выражение — выражение, определяющее поле, значение которого
проверяется на принадлежность к диапазону;
значение_1, значение_2 — выражения, задающие границы диапазона.
Если значение поля, определенного в аргументе выражение, попада-
ет в диапазон, задаваемый аргументами значение_1 и значение_2 (включи-
тельно), то оператор Between...And возвращает значение True; в противном
случае возвращается значение False. Логический оператор Not позволяет
проверить противоположное условие: что выражение находится за преде-
лами диапазона, заданного с помощью аргументов значение_1 и значе-
ние_2.
Оператор Between...And часто используют для проверки: попадает
ли значение поля в указанный диапазон чисел.
Если выражение, значение_1 или значение_2 имеет значение Null,
оператор Between...And возвращает значение Null.
Создание запроса на выборку с внутренним соединением
Операция INNER JOIN объединяет записи из двух таблиц, если свя-
зующие поля этих таблиц содержат одинаковые значения.
Синтаксис операции:
FROM таблица_1 INNER JOIN таблица_2 ON таблица_1.поле_1 опе-
ратор таблица_2.поле_2,
49
где таблица_1, таблица_2 — имена таблиц, записи которых подлежат объ-
единению;
поле_1, поле_2 — имена объединяемых полей. Поля должны иметь
одинаковый тип данных и содержать данные одного рода, однако эти поля
могут иметь разные имена;
оператор — любой оператор сравнения: "=," "<," ">," "<=," ">=," или "<>".
Операцию INNER JOIN можно использовать в любом предложении
FROM. Это самые обычные типы связывания. Они объединяют записи
двух таблиц, если связующие поля обеих таблиц содержат одинаковые
значения.
В следующем примере составим запрос, выдающий сведения об ус-
певаемости студентов по всем изученным ими дисциплинам:
SELECT Студент.ФИО_студента as ФИО, Дисциплина.
Наименование_дисциплины as Предмет, Успеваемость. Семестр, Успевае-
мость.Оценка
FROM Студент INNER JOIN
(Дисциплина INNER JOIN Успеваемость ON Дисциплина.
Код_дисциплины = Успеваемость.Код_дисциплины)
ON Студент.Код_студента = Успеваемость.Код_студента;
На рисунке 18 представлен результат выполнения этого запроса.
Рис. 18 — Результат выполнения запроса с внутренним соединением
50
Создание запроса на выборку с внешним соединением
Операции LEFT JOIN, RIGHT JOIN объединяют записи исходных
таблиц при использовании в любом предложении FROM.
Операция LEFT JOIN используется для создания внешнего соедине-
ния, при котором все записи из первой (левой) таблицы включаются в ре-
зультирующий набор, даже если во второй (правой) таблице нет соответст-
вующих им записей.
Операция RIGHT JOIN используется для создания внешнего объеди-
нения, при котором все записи из второй (правой) таблицы включаются
в результирующий набор, даже если в первой (левой) таблице нет соответ-
ствующих им записей.
Синтаксис операции:
FROM таблица_1 [ LEFT | RIGHT ] JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2
В следующем примере в результате выполнения запроса будут най-
дены все студенты и их успеваемость, при этом в результирующий набор
данных будут также включены студенты, чьи сведения об успеваемости
отсутствуют:
SELECT Студент.ФИО_студента, Дисциплина.
Наименование_дисциплины, Успеваемость.Семестр, Успеваемость. Оценка
FROM Студент LEFT JOIN
(Дисциплина RIGHT JOIN Успеваемость ON Дисциплина.
Код_дисциплины = Успеваемость.Код_дисциплины)
ON Студент.Код_студента = Успеваемость.Код_студента;
На рисунке 19 представлен результат выполнения этого запроса, где
видно, что по сравнению с предыдущим примером добавлена еще одна за-
пись о студенте Глазове Олеге Владимировиче.