Файл: Базы данных - уч. пособие.pdf

Добавлен: 28.11.2018

Просмотров: 10885

Скачиваний: 43

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

5.1 Язык SQL

101

одной или нескольких таблиц, которые содержат необходимые для отбора записи;
предложение GROUP BY в SQL-предложении объединяет записи с одинаковыми
значениями в указанном списке полей в одну запись. Если инструкция SELECT
содержит статистическую функцию SQL, например Sum или Count, то для каждой
записи будет вычислено итоговое значение; предложение HAVING определяет, ка-
кие сгруппированные записи, выданные в результате выполнения запроса, отоб-
ражаются при использовании инструкции SELECT с предложением GROUP BY.
После того как записи результирующего набора будут сгруппированы с помощью
предложения GROUP BY, предложение HAVING отберет те из них, которые удо-
влетворяют условиям отбора, указанным в предложении HAVING; предложение
ORDER BY позволяет отсортировать записи, полученные в результате запроса,
в порядке возрастания или убывания на основе значений указанного поля или полей.

Следует отметить, что инструкции SELECT не изменяют данные в базе данных.
Для более наглядного представления результатов выполнения запросов на вы-

борку добавим в нашу базу данных таблицы «Дисциплина» и «Успеваемость» и до-
бавим поле «Номер_группы» в таблицу «Студенты» (рис. 5.9), а также заполним
эти таблицы.

Рис. 5.9 – Обновленная схема базы данных

На рисунке 5.10 приведено содержимое таблиц «Студент», «Успеваемость»

и «Дисциплина».

В следующем примере представлен простейший запрос на выборку записей

из таблицы «Студенты», в котором отбираются студенты, обучающиеся в группе
432-1.

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.8

. . . . . . . . . . . . . . . . . . . . .

SELECT Студент.Номер_зачетной_книжки,

Студент.ФИО_студента, Студент.Номер_группы

FROM Студент
WHERE Студент.Номер_группы='432-1';

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


background image

102

Глава 5. Языки управления и манипулирования данными

Рис. 5.10 – Содержимое таблиц базы данных

На рисунке 5.11 представлен результат выполнения этого запроса, были най-

дены две записи, удовлетворяющие критерию запроса.

Рис. 5.11 – Результат выполнения запроса

Помимо обычных знаков сравнения (=, <, >, <=, >=, <>) в языке SQL в условии

отбора используется ряд ключевых слов:

• Is not null — выбрать только непустые значения;

• Is null — выбрать только пустые значения;

• Between. . .And определяет принадлежность значения выражения указанно-

му диапазону.

Синтаксис:

выражение [Not] Between значение_1 And значение_2,

где выражение — выражение, определяющее поле, значение которого проверяется
на принадлежность к диапазону; значение_1, значение_2 — выражения, задающие
границы диапазона.

Если значение поля, определенного в аргументе выражение, попадает в диа-

пазон, задаваемый аргументами значение_1 и значение_2 (включительно), то опе-
ратор Between. . .And возвращает значение True; в противном случае возвращается


background image

5.1 Язык SQL

103

значение False. Логический оператор Not позволяет проверить противоположное
условие: что выражение находится за пределами диапазона, заданного с помощью
аргументов значение_1 и значение_2.

Оператор Between. . .And часто используют для проверки: попадает ли значение

поля в указанный диапазон чисел.

Если выражение, значение_1 или значение_2 имеет значение NULL, оператор

Between. . .And возвращает значение NULL.

Оператор Like используется для сравнения строкового выражения с образцом.
Синтаксис:

выражение Like «образец»,

где выражение — выражение SQL, используемое в предложении WHERE; обра-
зец — строка, с которой сравнивается выражение.

Оператор Like используется для нахождения в поле значений, соответствую-

щих указанному образцу. Для аргумента образец можно задавать полное значение
(например, Like «Иванов») или использовать подстановочные знаки для поиска
диапазона значений (например, Like «Ив*»).

В таблице 5.3 приведен перечень подстановочных символов и пример их ис-

пользования в диалекте языка SQL, используемого в MS Access (Microsoft Jet SQL).

Таблица 5.3 – Параметры оператора Like

Тип совпадения

Образец

Совпадение

(True)

Несовпадение

(False)

Несколько символов

a*a

aa, aBa, aBBBa

aBC

*ab*

abc, AABB, Xab

aZb, bac

Специальный символ

a[*]a

a*a

aaa

Несколько символов

ab*

abcdefg, abc

cab, aab

Одиночный символ

a?a

aaa, a3a, aBa

aBBBa

Одиночная цифра

a#a

a0a, a1a, a2a

aaa, a10a

Диапазон символов

[a-z]

f, p, j

2, &

Вне диапазона

[!a-z]

9, &,%

b, a

Не цифра

[!0–9]

A, a, &,

0, 1, 9

Комбинированное выражение

a[!b-m]#

An9, az0, a99

abc, aj0

Внутреннее соединение

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Операция INNER JOIN объединяет записи из двух таблиц, если
связующие поля этих таблиц содержат одинаковые значения.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Синтаксис операции:

FROM таблица_1 INNER JOIN таблица_2 ON таблица_1.поле_1 оператор таб-

лица_2.поле_2,

где таблица_1, таблица_2 — имена таблиц, записи которых подлежат объединению;
поле_1, поле_2 — имена объединяемых полей. Поля должны иметь одинаковый тип


background image

104

Глава 5. Языки управления и манипулирования данными

данных и содержать данные одного рода, однако эти поля могут иметь разные
имена; оператор — любой оператор сравнения: =, <, >, <=, >=, или <>.

Операцию INNER JOIN можно использовать в любом предложении FROM.

Это самые обычные типы связывания. Они объединяют записи двух таблиц, если
связующие поля обеих таблиц содержат одинаковые значения.

В следующем примере составим запрос, выдающий сведения об успеваемости

студентов по всем изученным ими дисциплинам.

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.9

. . . . . . . . . . . . . . . . . . . . .

SELECT Студент.ФИО_студента as ФИО, Дисциплина.Наименование_дисцип-

лины as Предмет, Успеваемость.Семестр, Успеваемость.Оценка

FROM Студент INNER JOIN (Дисциплина INNER JOIN Успеваемость ON Дис-

циплина.Код_дисциплины = Успеваемость.Код_дисциплины)

ON Студент.Код_студента = Успеваемость.Код_студента;

На рисунке 5.12 представлен результат выполнения этого запроса.

Рис. 5.12 – Результат выполнения запроса с внутренним соединением

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Внешнее соединение

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Операции LEFT JOIN, RIGHT JOIN объединяют записи исходных
таблиц при использовании в любом предложении FROM.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Операция LEFT JOIN используется для создания внешнего соединения, при

котором все записи из первой (левой) таблицы включаются в результирующий
набор, даже если во второй (правой) таблице нет соответствующих им записей.


background image

5.1 Язык SQL

105

Операция RIGHT JOIN используется для создания внешнего объединения, при

котором все записи из второй (правой) таблицы включаются в результирующий
набор, даже если в первой (левой) таблице нет соответствующих им записей.

Синтаксис операции:

FROM таблица_1 [LEFT | RIGHTJOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2.

В следующем примере в результате выполнения запроса будут найдены все

студенты и их успеваемость, при этом в результирующий набор данных будут
также включены студенты, чьи сведения об успеваемости отсутствуют.

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.10

. . . . . . . . . . . . . . . . . . . . .

SELECT

Студент.ФИО_студента,

Дисциплина.Наименование_дисциплины,

Успеваемость.Семестр, Успеваемость.Оценка

FROM Студент LEFT JOIN (Дисциплина RIGHT JOIN Успеваемость ON Дис-

циплина.Код_дисциплины = Успеваемость.Код_ дисциплины)

ON Студент.Код_студента = Успеваемость.Код_студента;

На рисунке 5.13 представлен результат выполнения этого запроса, где видно,

что по сравнению с предыдущим примером добавлена еще одна запись о студенте
Глазове Олеге Владимировиче.

Рис. 5.13 – Результат выполнения запроса с внешним соединением

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Важно отметить, что операции LEFT JOIN или RIGHT JOIN могут быть вло-

жены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена
в операции LEFT JOIN или RIGHT JOIN.