В этом учебном пособии вы узнаете, как использовать Oracle оператор UPDATE с синтаксисом, примерами и практическими упражнениями.
Описание
Oracle оператор UPDATE используется для обновления существующих записей в таблице в базе данных Oracle. Есть 2 синтаксиса для UPDATE в Oracle в зависимости от того, что вы выполняете, традиционное обновление или обновление одной таблицы с данными из другой таблицы.
Синтаксис
Синтаксис оператора UPDATE при обновлении одной таблицы в Oracle/PLSQL:
SET column1 = expression1,
column2 = expression2,
...
column_n = expression_n
[WHERE conditions];
ИЛИ
Синтаксис Oracle оператора UPDATE при обновлении одной таблицы с данными из другой таблицы:
SET column1 = (SELECT expression1
FROM table2
WHERE conditions)
[WHERE conditions];
Параметры или аргументы
column1, column2, ... column_n
Столбцы, которые вы хотите обновить.
expression1, expression2, ... expression_n
Новые значения присвоенные для column1, column2, ... column_n. Так column1 будет присвоено значение expression1, column2 будет присвоено значение expression2, и так далее.
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для обновления столбцов. Если не предусмотрено никаких условий, то все записи в таблице будут обновлены.
Пример обновления одного столбца
Рассмотрим очень простой пример Oracle UPDATE.
1 2 3 |
UPDATE customers SET last_name = 'Anderson' WHERE customer_id = 5000; |
Этот Oracle UPDATE будет обновлять last_name в 'Anderson' в таблице customers, где customer_id = 5000.
Пример обновления нескольких столбцов
Рассмотрим Oracle пример UPDATE, где вам потребуется обновить более одного столбца с одним оператором UPDATE.
1 2 3 4 |
UPDATE customers SET state = 'Nevada', customer_rep = 32 WHERE customer_id > 100; |
Если вы хотите обновить несколько столбцов, вы можете сделать это путем разделения пары столбец / значение запятыми.
Этот пример Oracle UPDATE может обновить state в 'Nevada' и customer_rep в 32, где customer_id больше 100.
Пример обновления таблицы данными из другой таблицы
Рассмотрим Oracle пример UPDATE, который показывает, как обновить таблицу данными из другой таблицы.
1 2 3 4 5 |
UPDATE customers SET c_details = (SELECT contract_date FROM suppliers WHERE suppliers.supplier_name = customers.customer_name) WHERE customer_id < 1000; |
В этом примере, UPDATE будет обновлять все записи только таблицы customers, где customer_id меньше 1000. Когда supplier_name таблицы suppliers соответствует customer_name из таблицы customers, данные contract_date из таблицы suppliers будут скопированы в поле c_details в таблице customers.
Пример использования условия EXISTS
Вы также можете выполнять более сложные обновления в Oracle.
Вы можете обновлять записи в одной таблице на основе значений другой таблицы. Поскольку вы не можете перечислить более одной таблицы в операторе Oracle UPDATE, то вы можете использовать Oracle условие EXISTS.
Например:
1 2 3 4 5 6 7 |
UPDATE suppliers SET supplier_name = (SELECT customers.customer_name FROM customers WHERE customers.customer_id = suppliers.supplier_id) WHERE EXISTS (SELECT customers.customer_name FROM customers WHERE customers.customer_id = suppliers.supplier_id); |
В этом Oracle примере UPDATE, всякий раз, когда supplier_id соответствует значение customer_id, то supplier_name будет перезаписано в customer_name из таблицы customers.
Практическое упражнение № 1:
На основании таблицы suppliers заполненной следующими данными, обновите city на 'Denver' для всех записей, чьё supplier_name является 'INTEL'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CREATE TABLE suppliers ( supplier_id number(10) not null, supplier_name varchar2(50) not null, city varchar2(50), CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) ); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5001, 'Microsoft', 'Chicago'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5002, 'INTEL', 'Chicago'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5003, 'Red Hat', 'Detroit'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5004, 'NVIDIA', 'New York'); |
Решение для практического упражнения № 1:
Следующий оператор UPDATE будет выполнять это обновление в Oracle.
1 2 3 |
UPDATE suppliers SET city = 'Denver' WHERE supplier_name = 'INTEL'; |
Таблица suppliers будет выглядеть следующим образом:
SUPPLIER_ID | SUPPLIER_NAME | CITY |
---|---|---|
5001 | Microsoft | Chicago |
5002 | INTEL | Denver |
5003 | Red Hat | Detroit |
5004 | NVIDIA | New York |
Практическое упражнение № 2:
На основании таблицы suppliers и customers, заполненной следующими данными, обновите city в таблице suppliers значением поля city в таблице customers, когда supplier_name таблицы suppliers соответствует customer_name в таблице customers.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
CREATE TABLE suppliers ( supplier_id number(10) not null, supplier_name varchar2(50) not null, city varchar2(50), CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) ); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5001, 'Microsoft', 'New York'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5002, 'IBM', 'Chicago'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5003, 'Red Hat', 'Detroit'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES (5005, 'NVIDIA', 'LA'); CREATE TABLE customers ( customer_id number(10) not null, customer_name varchar2(50) not null, city varchar2(50), CONSTRAINT customers_pk PRIMARY KEY (customer_id) ); INSERT INTO customers (customer_id, customer_name, city) VALUES (7001, 'Microsoft', 'San Francisco'); INSERT INTO customers (customer_id, customer_name, city) VALUES (7002, 'IBM', 'Toronto'); INSERT INTO customers (customer_id, customer_name, city) VALUES (7003, 'Red Hat', 'Newark'); |
Решение для практического упражнения № 2:
Следующий оператор UPDATE будет выполнять это обновление в Oracle.
1 2 3 4 5 6 7 |
UPDATE suppliers SET city = (SELECT customers.city FROM customers WHERE customers.customer_name = suppliers.supplier_name) WHERE EXISTS (SELECT customers.city FROM customers WHERE customers.customer_name = suppliers.supplier_name); |
Таблица suppliers будет выглядеть следующим образом:
SUPPLIER_ID | SUPPLIER_NAME | CITY |
---|---|---|
5001 | Microsoft | San Francisco |
5002 | IBM | Toronto |
5003 | Red Hat | Newark |
5004 | NVIDIA | LA |