Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2575.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
1.86 Mб
Скачать

означает соответствие любому символу, не включенному в список. Например, запрос

SELECT * FROM Студент

WHERE Фамилия LIKE 'Б[яу]кина';

позволяет найти данные о студентках по фамилии Букина или Бякина. Соответствие диапазону символов, например, от А до П, включая крайние значения, можно задать следующим образом [А-П].

Подстановочные знаки *, ?, # и [ рассматриваются как образец для поиска этого символа только при заключении их в квадратные скобки.

Предикат IS NULL возвращает значение Истина, если

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

SELECT Название

FROM Дисциплина

WHERE Преподаватель IS NULL;

9.2. Параметрические запросы

В параметрических запросах в условиях поиска используется значение параметра, которое запрашивается во время выполнения запроса. Для построения параметрического запроса на языке SQL достаточно в условиях поиска вместо аргумента указать приглашение на ввод параметра, например,

WHERE Группа= [Укажите группу ]; При выполнении запроса будет запрошено имя группы. Однако при этом не допускаются совпадения приглашения с именем поля, например, нельзя использовать приглашение [Группа]. При таком приглашении будут выданы данные о студентах

51

Text;
PA R A M E T E R S

всех групп. Иногда Access запрашивает параметр, хотя запрос не является параметрическим. Это происходит в том случае, если в запросе используются имена, не совпадающие с именами полей таблиц, указанных в запросе. Для корректного выполнения параметрического запроса целесообразно использовать необязательное описание . Например

PARAMETERS [Укажите группу]

SELECT * FROM Студент

WHERE Группа = [Укажите группу];

В окне будет выводиться приглашение, указанное в имени описания PARAME TERS . В описании необходимо указать тип данных.

9.3. Перекрестные запросы

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

TRANSFORM Avg(Уcпеваемоcть.Оценка)

SELECT Студент.Фамилия

FROM Студент INNER JOIN (Дисциплина INNER JOIN Успеваемость ON Дисциплина.[Код дисциплины]^ Успеваемость.[Код дисциплины]) ON Студент.Зачетка = Успеваемость.Зачетка GROUP BY Студент.Фамилия PIVOT Дисциплина.Название;

52

После ключевого слова TRANSFORM указывается функция вычисления значений ячеек таблицы. В данном примере среднее значение равно единственному значению оценки каждого студента по каждой дисциплине. После слова SELECT указывается имя поля, значения которого выводятся в первый столбец (являются заголовками строк таблицы). Предложение GROUP BY является обязательным.

После слова PIVOT перечисляются имена полей, являющихся именами столбцов таблицы.

9.4. Поиск в связанных таблицах

Язык SQL позволяет связывать таблицы в запросах (при этом в окне Схема данных таблицы могут быть не связаны). Обычно соединение происходит по равенству значений каких-либо полей. Поля связи должны иметь одинаковые типы (точнее, иметь совместимый тип данных) и длины, имена могут отличаться. Имена таблиц, участвующих в

объединении, перечисляют в предложении FROM. Так как имена столбцов в объединяемых таблицах могут совпадать, то в этом случае используют полные имена столбцов, состоящие из имени таблицы и имени столбца: <имя таблицы>.<имя столбца>. Чаще всего используется так называемое внутреннее объединение, при котором объединяются записи двух таблиц, если связующие поля обеих таблиц содержат одинаковые значения. В простейшем случае условие внутреннего объединения задается

в предложении WHERE. Например, объединяя таблицы СТУДЕНТ и УСПЕВАЕМОСТЬ по условию равенства полей

Зачетка, а таблицы ДИСЦИПЛИНА и УСПЕВАЕМОСТЬ по равенству полей Код дисциплины, получим сведения о всех оценках, полученных студентами:

53

SELECT Фамилия, Название, Оценка

FROM Студент, Успеваемость, Дисциплина WHERE Студент.Зачетка = Успеваемость.Зачетка AND Успеваемость.[Код дисциплины]= Дисциплина.[ Код дисциплины];

Несмотря на очевидную простоту, такой способ объединения не всегда удобен. В частности, результирующий набор в этом случае нельзя изменять, и изменения не могут попасть в основные таблицы. Более универсальным способом

является использование для объединения в предложении FROM

операции JOIN. При этом результирующий набор можно изменять. В случае внутреннего соединения предложение FROM имеет следующий синтаксис:

FROM <таблица_1> INNER JOIN <таблица_2> ON

<таблица 1>.<поле 1> <оператор> <таблица 2>.<поле 2>

Здесь <таблица_1> и <таблица_2> имена объединяемых таблиц, <поле_1> и <поле_2> имена полей связи, <оператор> оператор сравнения.

Например, внутреннее объединение таблиц СТУДЕНТ и УСПЕВАЕМОСТЬ можно произвести следующим образом:

SELECT

Фамилия, [Код дисциплины],

Оценка

FROM Студент INNER JOIN

Успеваемость ON

Студент. Зачетка = Успеваемость. Зачетка;

Операции J O I N могут быть вложенными, например, для объединения трех таблиц: СТУДЕНТ,

54

УСПЕВАЕМОСТЬ и ДИСЦИПЛИНА — сначала объединим таблицы ДИСЦИПЛИНА и УСПЕВАЕМОСТЬ, а полученную таблицу объединим с таблицей СТУДЕНТ:

SELECT Фамилия, Название, Оценка

FROM Студент INNER JOIN

(Дисциплина INNER JOIN Успеваемость ON Дисциплина.[Код дисциплины]= Успеваемость.[Код дисциплины])01 Студент.Зачетка = Успеваемость.Зачетка;

Операции LEFT JOIN или RIGHT JOIN (см. ниже) могут быть вложены в операцию I N N E R JOIN , но операция INNER JOIN не может быть вложена в LEFT JOIN или

RIGHT JOIN.

Реже используется внешнее объединение таблиц.

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

при котором все записи из таблицы, стоящей в левой части операции, включаются в результирующий набор. Записи таблицы, расположенной справа от операции, объединяются с записями из расположенной слева таблицы только при наличии совпадающих значений в полях связи. Если для записи, расположенной слева, нет совпадающей, то ей сопоставляется строка значений Null с правой стороны. Аналогично выполняется операция правого внешнего объединения. Синтаксис операций внешнего объединения совпадает с синтаксисом операции внутреннего объединения, следует только заменить ключевые слова операций.

Возможно также самосоединение (самообъединение), т. е.

соединение двух копий одной таблицы. Допустим, имеется таблица ПРЕПОДАВАТЕЛЬ, включающая среди прочих поля

Табельный номер, Фамилия, Заведующий кафедрой. В

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

55

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]