Файл: Учебник Макаровой.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.07.2024

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

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

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

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

INSERT INTO таблица_куда [IN внешняя_база_данных]

SELECT [источник.]поле![, поле2[,...]

FROM выражение

WHERE условие

Перед загрузкой выполняется оператор подзапроса SELECT, который и формирует выборку для добавления. Фраза SELECT определяет структуру данных источника передаваемых записей - имена таблицы и полей, содержащих исходные данные для загрузки в таблицу_куда FROM позволяет указать имена исходных таблиц, участвующих в формировании выборки, а фраза WHERE – задает условия выполнения подзапроса. Структура данных выборки должна соответствовать структуре данных таблицы, в которую производится добавление.

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

Пример 19.65.

INSERT INTO Студент SELECT [Студент-заочник].* FROM [Студент- заочник]

Все записи таблицы [Студент-заочник] в полном составе полей будут добавлены в таблицу Студент.

Примечание. Структуры таблиц должны совпадать.

Пример 19.66.

INSERT INTO Студент SELECT [Студент-заочник].* FROM [Студент-

заочник] WHERE [Дата рождения] >= #01/01/80#

Записи таблицы [Студент-заочник] добавляются в таблицу Студент, если дата рождения студента больше или равна указанной.

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

FROM таблица1 INNER JOIN таблица2 ON таблица1.поле1 = таблица2.поле2

Данный оператор описывает симметричное соединение двух таблиц по ключам связи (noлe1; поле2). Новая запись формируется в том случае, если в таблицах содержатся одинаковые значения ключей связи.

Возможные варианты операции:

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

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

Пример 19.67.

SELECT Студент.*, Оценка.* FROM Студенты INNER JOIN Оценка ON Студент.[№ зач.книжки] = Оценка.[№ зач.книжки];

SELECT Студент.*, Оценка.* FROM Студенты LEFT JOIN Оценка

ON Студент. [№ зач.книжки] = Оценка. [№ зач.книжки];

SELECT Студент.*, Оценка.* FROM Студенты RIGHT JOIN Оценка ON Студент. [№ зач.книжки] = Оценка. [№ зач.книжки];

617


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

втором случае будут выведены все записи таблицы СТУДЕНТ и соответствующие им записи таблицы ОЦЕНКА. В третьем случае наоборот, все записи таблицы ОЦЕНКА и соответствующие им записи таблицы СТУДЕНТ.

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

Пример 19.68.

SELECT Студент., .Оценка. Дисциплина. [Наименование дисциплины] FROM (Студент INNER JOIN (Оценка INNER JOIN

( Дисциплина ON Оценка. [Код дисциплины] = Дисциплина. [Код дисциплины])

ON Студент.[№ зач.книжки]=Оценка. [№ зач.книжки])

Сначала происходит соединение таблиц ОЦЕНКА и ДИСЦИПЛИНА по ключу связи [Код дисциплины]. Соединение симметричное, то есть если коды дисциплины не совпадают, записи этих таблиц не соединяются. Затем происходит соединение таблиц СТУДЕНТ и ОЦЕНКА по ключу связи [№ зач.книжки].

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

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

DELETE [таблица.*] FROM выражение WHERE условия_отбора

Полная чистка таблицы от записей и очистка индексов выполняется операцией:

DELETE * FROM таблица

Пример 19.69.

DELETE * FROM Студент

Все ранее загруженные записи будут удалены.

DELETE * FROM Студент WHERE [Дата рождения]>#1.1.81#

Удаляются только те записи, в которых поле [Дата рождения] больше указанной даты.

Данная операция удаляет записи в таблице, связанные с другой таблицей: условия удаления записей могут относиться к полям связанных таблиц:

DELETE таблица.* FROM таблица INNER JOIN др._таблица

ON таблица, [полеN = др._таблица.[полеМ] WHERE условие

Пример 19.70.

DELETE Студент.* From Студент INner JoIN [Студент заочник]

ON Студент.[Группа]= [Студент заочник]. [Группа]

Удаляются записи в таблице Студент, для которых имеются связанные записи в таблице [Студент заочник].

Примечание. Средствами Microsoft ACCESS невозможно восстановить записи, удаленные с помощью запроса на удаление записей.

618


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

UPDATE таблица SET новое_значение WHERE условия_отбора

новое_значение указывается как имя_поля=новое значение

Пример 19.71.

UPDATE Студент SET [Группа] = "1212"

WHERE [Фамилия] LIKE 'В*' AND [Дата рождения] < = #01/01/81#

Студентов, чьи фамилии начинаются на букву В и дата рождения не превышает указанной, перевести в группу 1212.

UPDATE Студент INner JoIN [Студент заочник] ON Студент. [Группа]= [Студент заочник]. [Группа] SET [Группа]= [Группа]&"а"

В таблице Студент изменить номера групп, если они встречаются в таблице [Студент заочник], добавив букву а.

ОРГАНИЗАЦИЯ ЗАПРОСОВ К БАЗЕ ДАННЫХ НА ЯЗЫКЕ SQL

Синтаксис оператора SELECT

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

Таблица 19.9. Аргументы оператора SELECT

Аргумент

 

 

 

Назначение

 

 

 

 

Предикат

Предикаты используются для ограничения числа возвращаемых записей:

 

 

ALL – все записи;

 

 

 

 

 

 

 

 

 

DISTINCT – записи, различающиеся в указанных для вывода полях;

 

 

DISTINCTROW – полностью различающиеся записи по всем полям; ТОР

 

 

возврат заданного числа или процента записей в диапазоне,

 

 

соответствующем фразе ORDER BY

 

 

 

 

 

Таблица

Имя таблицы, поля которой формируют выходные данные

 

 

Поле1, поле2

Имена полей, используемых

при

отборе

(порядок их

следования

 

 

определяет выходную структуру выборки данных)

 

 

 

Псевдоним1,

Новые заголовки столбцов результата выборки данных

 

 

Псевдоним2

 

 

 

 

 

 

 

 

 

 

FROM

Определяет

выражение,

используемое

для

задания

источника

 

 

формирования выборки (обязательно присутствует в каждом операторе)

 

Внешняя база данных

Имя внешней базы данных источника данных для выборки

 

 

[WHERE... ]

Определяет условия отбора записей (необязательное)

 

 

[GROUP BY... ]

Указание полей (максимум – 10) для формирования групп, по которым

 

 

возможно вычисление групповых итогов; порядок их следования

 

 

определяет виды итогов (старший, промежуточный и т.п.) –

 

 

необязательное

 

 

 

 

 

 

 

 

[HAVING... ]

Определяет условия отбора записей для сгруппированных данных (задан

 

 

способ группирования GROUP BY...) – необязательное

 

 

[ORDER BY... ]

Определяет

поля,

по которым

выполняется упорядочение

выходных

 

 

записей; порядок

их следования

соответствует

старшинству ключей

 

 

сортировки. Упорядочение возможно как по возрастанию (ASC), так и по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

619


 

 

убыванию (DESC) значения выбранного поля

 

 

 

[WITH

OWNERACCESS

При работе в сети в составе защищенной рабочей группы для указания

OPTION]

 

пользователям, не обладающим достаточными правами, возможности

 

 

просматривать результат Запроса или выполнять запрос

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

Универсальный оператор SELECT имеет следующую конструкцию:

SELECT [предикат] { * | таблица.* | [таблица.]поле1 [, [таблица.]поле2.[,...]]} [AS псевдоним1 [, псевдоним2 [,...]]]

FROM выражение [,...] [IN внешняя_база_данных]

[WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY...]

[WITH OWNERACCESS OPTION]

Синтаксис оператора SELECT весьма лаконично реализует сложные алгоритмы запросов. Практическое освоение элементов постепенное методом от простого к сложному, а отладка оператора сложной конструкции может идти по частям.

Изучать оператор SELECT лучше всего на конкретных примерах. Слово SELECT определяет структуру выводимой информации, это могут быть поля таблиц, вычисляемые выражения.

Вычисляемое выражение состоит из: полей таблиц; констант; знаков операций;

встроенных функций; групповых функций SQL.

Пример 19.72.

SELECT [Имя], [Фамилия] FROM Студент

SELECT TOP 5 [Фамилия] FROM Студент

SELECT TOP 5 [Фамилия] FROM Студент ORDER BY [Группа]

В первом случае выбираются все записи таблицы Студент в составе указанных полей. Если отбираются все поля в том же самом порядке, что и в структуре таблицы, можно указать символ точки. Во втором случае отбирается 5 первых фамилий студентов, в третьем случае - выбирается 5 первых фамилий студентов, упорядочение записей осуществлено по учебным группам.

Если используются одноименные поля из нескольких таблиц, включенных в предложение FROM, следует указать перед именем такого поля имя таблицы через . (точку): [Студент заочник].[Группа] и [Студент].[Группа] – два одноименных поля из разных таблиц.

Для изменения заголовка столбца с результатами выборки используется служебное слово AS.

Пример 19.73.

В первом случае будут выведены неповторяющиеся даты рождения студентов, которые имеют новое наименование Юбилей. Во втором случае в результирующей таблице присутствуют все записи, но вместо [Дата рождения] указан Год и вместо Фамилия и Имя, соединенных вместе через пробел, –

620