ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.07.2024
Просмотров: 1505
Скачиваний: 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 |