Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по бд.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
4.79 Mб
Скачать

Обновление нескольких столбцов в одной или нескольких записях

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

update имя_таблицы set столбец1 = 'значение'[, столбец2 = 'значение']

[, столбец3 = 'значение'] [where условие];

Обратите внимание на использование ключевого слова SET – оно одно, а описаний столбцов – несколько. Описания столбцов разделяются запятыми. К этому моменту вы, должно быть, уже почувствовали логику SQL. В операторах SQL запятая обычно используется для разделения различного типа аргументов.

UPDATE ORDERS_TBL SET QTY = 1, CUST_ID = '221' WHERE ORD_NUM = '23A16';

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

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

Удаление данных из таблиц

Для удаления данных из таблиц используется команда DELETE. Команда DELETE предназначена не для того, чтобы удалять значения отдельных столбцов, а для того, чтобы удалять целые записи. Оператор DELETE следует применять с осторожностью – слишком уж «безотказно» он работает.

Чтобы удалить одну или несколько записей из таблицы, используйте следующий синтаксис оператора DELETE:

delete from имя_схемы.имя_таблицы [where условие];

DELETE FROM ORDERS_TBL WHERE ORD_NUM = '23A16';

Здесь следует обратить внимание на выражение с ключевым словом WHERE. При удалении строк из таблицы это выражение представляет собой очень важную часть оператора DELETE. Оператор DELETE без ключевого слова WHERE может понадобиться вам крайне редко. Если вы им воспользуетесь, результат будет подобен следующему:

DELETE FROM ORDERS_TBL;

Если ключевое слово WHERE в операторе DELETE опущено, будут удалены все строки таблицы. Поэтому примите за правило всегда использовать ключевое слово WHERE в операторе DELETE.

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

DML в InterBase

DELETE

DELETE определяет одну или более строк, чтобы удалить из таблицы или редактируемого (updatable) вида. DELETE – одна из привилегий, которые контролируются инструкциями GRANT и REVOKE.

Для определения строк, которые следует удалить, может быть использовано факультативное предложение WHERE.

Предостережение: Если не используется предложение WHERE, удалены все строки из таблицы.

Синтаксис

DELETE FROM table [WHERE <search_condition>];

Аргумент

Описание

table

Имя таблицы из которой удаляются строки.

<search_condition>

Условия поиска, которые определяют строки для удаления. Если это предложение не используется, DELETE воздействует на все строки в определенной таблице или виде.

Примеры

Следующая инструкция удаляет все строки из таблицы:

DELETE FROM EMPLOYEE_PROJECT;

Следующая инструкция удаляет строку для служащего #141:

DELETE FROM SALARY_HISTORY WHERE EMP_NO = 141;

Обратите внимание: EMP_NO это PRIMARY KEY для таблицы EMPLOYEE и по этому гарантирует уникальную идентификацию строки.

INSERT

INSERT добавляет одну или более новых строк данных к существующей таблице или виду. INSERT – одна из привилегий базы данных, которая контролируется инструкциями GRANT и REVOKE.

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

Если факультативный список столбцов упущен, предложение VALUES должно содержать значения для всех столбцов таблицы.

Чтобы вставить одну строку данных, должно присутствовать предложение VALUES и содержать определенный список значений.

Чтобы вставить несколько строк данных, определите <select_expr>, которое возвращает уже существующие данные из другой таблицы. Выбранные строки должны соответствовать списку столбцов.

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

Синтаксис

INSERT INTO <object> [(col [, col ...])] {VALUES (<val> [, <val> ...]) | <select_expr>};

<object> = tablename | viewname

<val> = {<constant> | <expr>| <function> | NULL | USER } [COLLATE collation]

Обратите внимание: Предложение COLLATE не может быть использовано для BLOB значений.

<constant> = num | "string" | charsetname "string"

<expr> = Допустимое выражение SQL, которое возвращает в одиночное значение столбца.

<function> = {CAST (<val> AS <datatype>) | UPPER (<val>) | GEN_ID (generator, <val>) }

<select_expr> = SELECT возвращающий ноль или более строк, где число столбцов в каждой строке такое же, как число элементов, которые должны быть вставлены.

Аргумент

Описание

INTO <object>

Имя существующей таблицы или вида, в которую вставляются данные.

col

Имя существующего столбца в таблице или виде, в который вставляются значения.

VALUES (<val> [, <val> ...]

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

<select_expr>

Запрос, который возвращает значения, для вставки в целевые столбцы.

Примеры

Следующая инструкция добавляет строку в таблицу, присваивает значения двум столбцам:

INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (52, "DGPII");

Следующая инструкция определяет значения, чтобы вставить в таблицу, используя инструкцию SELECT:

INSERT INTO PROJECTS SELECT * FROM NEW_PROJECTS WHERE NEW_PROJECTS.START_DATE > "6-JUN-1994";

UPDATE

UPDATE изменяет одну или более существующих строк в таблице или виде. UPDATE – одна из привилегий базы данных контролируемых GRANT и REVOKE.

Факультативное предложение WHERE может быть использовано, чтобы ограничить UPDATE к некоторому подмножеству строк таблицы. Модификации не могут модифицировать секторы массива.

Предупреждение: Если предложение WHERE упущено, UPDATE изменяет все строки в таблице.

Обратите внимание: Когда модифицируются BLOB столбцы, UPDATE заменяет весь BLOB целиком новым значением.

Синтаксис

UPDATE {table | view} SET col = <val> [, col = <val> ...] [WHERE <search_condition>;

<val> = {col [<array_dim>] | <constant> | <expr> | <function> | NULL | USER }

<array_dim> = [x:y [, x:y ...]]

Обратите внимание: Внешние скобки (выделено жирным) должны присутствовать в ссылке на массив.

<constant> = num | "string" | charsetname "string"

<expr> = Допустимое выражение SQL, которое возвращает одиночное значение.

<function> = {CAST (<val> AS <datatype>) | UPPER (<val>) | GEN_ID (generator, <val>) }

<search_condition> = Смотри CREATE TABLE, для полного описания.

Аргумент

Описание

table | view

Имя существующей таблицы или вида для модификации.

SET col = <val>

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

WHERE <search_cond>

Модифицировать только найденное. Определяет условия, которым строка должна удовлетворять, чтобы изменится.

Примеры

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

UPDATE CITIES SET POPULATION = POPULATION * 1.03;

Следующая инструкция использует предложение WHERE, чтобы ограничить модификацию столбцов подмножеством строк:

UPDATE COUNTRY SET CURRENCY = "USDollar" WHERE COUNTRY = "USA";

Тесты

Используйте таблицу EMPLOYEE_TBL.

Что случится, если выполнить следующие операторы?

  • insert into employee_tbl '('JACKSON', 'STEVE', '313546078', '3178523443');

  • insert into employee_tbl values ('JACKSON’, 'STEVE', '313546078', '3178523443');

  • insert into employee_tbl values ('MILLER', 'DANIEL', '230980012', NULL);

  • insert into employee_tbl values ('TAYLOR', NULL, '445761212', '3179221331');

  • delete from employee_tbl;

  • delete from employee_tbl where last_name = 'SMITH';

  • delete from employee_tbl where last_name = 'SMITH' and first_name = 'JOHN';

  • update employee_tbl set last_name = 'CONRAD';

  • update employee_tbl set last_name = 'CONRAD' where last_name = 'SMITH';

  • update employee_tbl set last_name = 'CONRAD', first_name = 'LARRY';

  • update employee_tbl set last_name = 'CONRAD' first_name = 'LARRY' where ssn = '313546078';

Упражнения

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

  • Измените SSN для служащего по имени Billy Pierce на 310239857.

  • Добавьте информацию о служащем по имени Ben Moore, тел. 317-5649880, SSN равен 313456789.

  • Служащий по имени John Smith уволился, удалите соответствующую запись.