Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.4.rtf
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
7.36 Mб
Скачать

Материал для подготовки к практической работе по теме:

«Добавление, удаление и изменение данных в таблицах.

Создание и модификация таблиц»

Задания:

  1. Внимательно изучите предложенный теоретический материал.

  2. Письменно ответьте на контрольные вопросы, список которых приведен в конце документа.

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

Теоретический материал для изучения:

1. Добавление, удаление и изменение данных в таблицах

Запросы, рассмотренные ранее, были направле­ны на то, чтобы получить данные, содержащиеся в существую­щих таблицах базы данных. Главным ключевым словом таких запросов на выборку данных является SELECT. Запросы на вы­борку данных всегда возвращают виртуальную таблицу, кото­рая отсутствует в базе данных и создается временно лишь для того, чтобы представить выбранные данные пользователю. При создании и дальнейшем сопровождении базы данных обычно возникает задача добавления новых и удаления ненужных запи­сей, а также изменения содержимого ячеек таблицы. В SQL для этого предусмотрены операторы INSERT (вставить), DELETE (удалить) и UPDATE (изменить). Запросы, начинающиеся с этих ключевых слов, не возвращают данные в виде виртуальной таб­лицы, а изменяют содержимое уже существующих таблиц базы данных. Запросы на модификацию (добавление, удаление и из­менение) данных могут содержать вложенные запросы на вы­борку данных из той же самой таблицы или из других таблиц, однако сами не могут быть вложены в другие запросы. Таким образом, операторы INSERT, DELETE и UPDATE в SQL-выражении могут находиться только в самом начале.

1.1. Добавление новых записей

Когда создается таблица базы данных, она не содержит никаких записей, т. е. является пустой. Чтобы наполнить таблицу данными, необходимо добавить (вставить) в нее хотя бы одну запись. Для этого служит оператор INSERT (вставить), который имеет несколь­ко форм:

- INSERT INTO имяТаблицы VALUES (списокЗначений) – вставляет пустую запись в указанную таблицу и заполняет эту запись значениями из списка, указанного за ключевым словом VALUES. При этом первое в списке значение вводится в первый столбец таблицы, второе значение - во второй столбец и т. д. Порядок столбцов задается при создании таблицы. Данная форма оператора INSERT не очень надежна, поскольку нетруд­но ошибиться в порядке вводимых значений. Более надежной и гибкой является следующая форма;

- INSERT INTO имяТаблицы (списокСтолбцов) VALUES (списокЗначений) - вставляет пустую запись в указанную таблицу и вводит в заданные столбцы значения из указанного списка. При этом в первый столбец из списокСтолбцов вводится первое значение из списокЗначений, во второй столбец- второе зна­чение и т. д. Порядок имен столбцов в списке может отличаться от их порядка, заданного при создании таблицы. Столбцы, ко­торые не указаны в списке, заполняются значением null. Ино­гда требуется просто добавить пустую запись. В этом случае первая форма оператора INSERT требует после ключевого слова VALUES указать список значений NULL, длина которого равна ко­личеству столбцов. Однако есть лучшее решение:

INSERT INTO имяТаблицы (имяЛюбогоСтолбца) VALUES (NULL);

Рекомендуется использовать именно данную форму оператора INSERT. Следующий запрос добавляет новую запись в таблицу Клиенты, при этом в столбцы Имя, Телефон и Сумма_заказа вво­дятся значения 'Петров', '444-4444' и 25300 соответственно:

INSERT INTO Клиенты (Имя, Телефон, Сумма_заказа)

VALUES ('Петров', '444-4444', 25300);

Начиная с SQL-92 появилась возможность работать со значе­ниями типа запись. Это позволяет за ключевым словом VALUES указать несколько наборов значений в круглых скобках (запи­сей), которые необходимо вставить в таблицу. Например:

INSERT INTO Клиенты (Имя, Телефон, Сумма_заказа)

VALUES

('Петров', '444-4444', 25300),

('Иванов', '555-5555', 45100),

('Сидоров', '777-7777', 1200),

('Захаров', '123-9870', 7800);

- INSERT INTO имяТаблицы (списокСтолбцов) SELECT ...- вставляет в указанную таблицу записи, возвращаемые запро­сом на выборку.

На практике нередко требуется загрузить в одну таблицу дан­ные из другой таблицы. Например, ранее созданная таблица контакты содержит имена и другие данные о клиентах, кото­рые необходимо вставить в таблицу Клиенты. Для этого в опе­раторе INSERT вместо VALUES можно использовать оператор SELECT, выбирающий записи, необходимые для вставки. Допустим, таблицы Клиенты и контакты имеют одноименные и однотипные столбцы Имя, Адрес и Телефон. Требуется доба­вить все записи из таблицы контакты в таблицу клиенты. Это можно сделать с помощью следующего запроса:

INSERT INTO Клиенты (Имя, Адрес, Телефон)

SELECT Имя, Адрес, Телефон FROM Контакты;

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

INSERT INTO Клиенты (Имя, Адрес, Телефон)

SELECT Имя, Адрес, Телефон FROM Контакты

WHERE Клиенты.Имя <> Контакты.Имя

AND

Клиенты.Адрес <> Контакты.Адрес

AND

Контакты.Имя IS NOT NULL;

Здесь в операторе WHERE применено сложное условие на слу­чай, если в таблицах окажутся однофамильцы или в таблице контакты окажутся неопределенные имена.

С помощью оператора INSERT можно добавить одну или несколь­ко записей только в одну таблицу.

Кроме того, необходимо учи­тывать следующие обстоятельства:

  • таблица может иметь столбец типа SERIAL (счетчик), имею­щий уникальные значения, которые СУБД назначает автома­тически. Это обеспечивает уникальность всех записей таблицы и, следовательно, ее соответствие 1-ой нормальной форме. Поэтому в списке столбцов в операторе INSERT не следует указывать столбцы типа SERIAL;

  • если список столбцов, указанный в операторе INSERT, содер­жит не все столбцы таблицы, то в оставшиеся столбцы (за ис­ключением столбца типа SERIAL) будут введены значения NULL (неопределенное значение), а в столбец типа SERIAL правиль­ное числовое значение введет СУБД;

  • при введении значений в столбцы новой записи необходимо следить, чтобы типы значений соответствовали типам столб­цов таблицы. При необходимости можно воспользоваться функцией преобразования типов CAST ();

  • таблица может иметь ограничения (смотри пункт 2.1). Если вводи­мые данные не удовлетворяют условиям этих ограничений, то запрос на добавление данных не будет выполнен. Так, напри­мер, если в ограничении на какой-либо столбец указано, что он не может иметь значения NULL, то попытка добавить пус­тую запись приведет к ошибке. В этом случае необходимо ис­пользовать оператор INSERT INTO с ключевым словом VALUES, чтобы сразу ввести значение, удовлетворяющее ограничениям.