В этом учебном пособии вы узнаете, как использовать Oracle оператор INSERT с синтаксисом и примерами и практическими упражнениями.
Описание
Oracle оператор INSERT используется для вставки одной записи или несколько записей в таблицу Oracle.
Синтаксис
Синтаксис Oracle оператора INSERT при вставке одной записи с помощью ключевого слова VALUES:
(column1, column2, ... column_n )
VALUES
(expression1, expression2, ... expression_n );
ИЛИ синтаксис Oracle оператора INSERT при вставке нескольких записей с помощью оператора SELECT:
(column1, column2, ... column_n )
SELECT expression1, expression2, ... expression_n
FROM source_table
[WHERE conditions];
Параметры или аргументы
table
Таблица для вставки в нее записей.
column1, column2, ... column_n
Столбцы таблицы для вставки значений
expression1, expression2, ... expression_n
Значения для столбцов таблицы. Так column1 будет присвоено значение expression1, column2 будет присвоено значение expression2, и так далее.
source_table
Исходная таблица из которой будут вставляться данные.
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для вставляемых записей.
Примечание
- При вставке записей в таблицу с помощью оператора Oracle INSERT, необходимо указать значение NOT NULL для каждого столбца.
- Вы можете опустить столбец из Oracle оператора INSERT, если столбец принимает NULL значения.
Пример использования ключевого слов VALUES
Самый простой способ создания Oracle запроса INSERT с использованием ключевого слова VALUES.
Например:
1 2 3 4 |
INSERT INTO suppliers (supplier_id, supplier_name) VALUES (5000, 'Nike'); |
Этот Oracle INSERT приведет к вставке одной записи в таблицу suppliers. Эта новая запись будет иметь supplier_id 5000 и supplier_name 'Nike'.
Пример использования SELECT
Кроме того, можно создавать более сложные Oracle предложения INSERT с помощью оператора SELECT.
Например:
1 2 3 4 5 6 |
INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM customers WHERE customer_id > 5000; |
Размещая SELECT внутри предложения INSERT, вы можете быстро выполнить многократные вставки.
С этим типом вставки, вы можете проверить количество строк, которые вставляете. Вы можете определить количество строк, которые будут вставлены, выполнив следующий SELECT, перед выполнением вставки.
1 2 3 |
SELECT count(*) FROM customers WHERE customer_id > 5000; |
Часто задаваемые вопросы
Вопрос: Я создал базу данных клиентов. Я знаю, что вы используете Oracle оператор INSERT для вставки информации в базу данных, но как я могу убедиться, что не ввел ту же информацию о клиенте снова?
Ответ: Вы можете убедиться, что не вставить повторяющуюся информацию, используя условие EXISTS.
Например, если у вас была таблица с названием clients с первичным ключом client_id, вы можете использовать следующий INSERT:
1 2 3 4 5 6 7 |
INSERT INTO clients (client_id, client_name, client_type) SELECT supplier_id, supplier_name, 'advertising' FROM suppliers WHERE NOT EXISTS (SELECT * FROM clients WHERE clients.client_id = suppliers.supplier_id); |
Это Oracle предложение INSERT вставляет несколько записей с подзапросом.
Если вы хотите вставить одну запись, вы можете использовать следующее Oracle предложение INSERT:
1 2 3 4 5 6 7 8 9 |
INSERT INTO clients (client_id, client_name, client_type) SELECT 10345, 'IBM', 'advertising' FROM dual WHERE NOT EXISTS (SELECT * FROM clients WHERE clients.client_id = 10345); |
Использование таблицы dual позволяет ввести значения в операторе select, даже если значения не хранятся в настоящее время в таблице.
Вопрос: Как я могу вставить несколько строк явных данных в одном предложении INSERT в Oracle?
Ответ: Ниже приведен пример того, как можно вставить 3 строки в таблицу suppliers в Oracle, используя оператор INSERT:
1 2 3 4 5 |
INSERT ALL INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM') INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft') INTO suppliers (supplier_id, supplier_name) VALUES (3000, 'Google') SELECT * FROM dual; |
Практическое упражнение № 1:
На основании таблицы contacts, вставить запись контакта contact_id=1000, last_name является John, first_name Smit, и address 10 Somewhere St.:
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE contacts ( contact_id number(10) not null, last_name varchar2(50) not null, first_name varchar2(50) not null, address varchar2(50), city varchar2(50), state varchar2(20), zip_code varchar2(10), CONSTRAINT contacts_pk PRIMARY KEY (contact_id) ); |
Решение для практического упражнения № 1:
Следующий Oracle оператор INSERT будет вставить эту запись в таблицу contacts:
1 2 3 4 |
INSERT INTO contacts (contact_id, last_name, first_name, address) VALUES (1000, 'John', 'Smit', '10 Somewhere St.'); |
Практическое упражнение № 2:
На основании таблицы contacts и customers, вставить в таблицу contacts всех customers, которые проживают в штате Nevada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--создаем contacts CREATE TABLE contacts ( contact_id number(10) not null, last_name varchar2(50) not null, first_name varchar2(50) not null, address varchar2(50), city varchar2(50), state varchar2(20), zip_code varchar2(10), CONSTRAINT contacts_pk PRIMARY KEY (contact_id) ); --создаем customers CREATE TABLE customers ( customer_id number(10) not null, last_name varchar2(50) not null, first_name varchar2(50) not null, address varchar2(50), city varchar2(50), state varchar2(20), zip_code varchar2(10), CONSTRAINT customers_pk PRIMARY KEY (customer_id) ); |
Решение для практического упражнения № 2:
Следующий оператор Oracle INSERT вставит запись в таблицу customers:
1 2 3 4 5 6 7 8 9 10 11 |
INSERT INTO contacts (contact_id, last_name, first_name, address, city, state, zip_code) SELECT customer_id, last_name, first_name, address, city, state, zip_code FROM customers WHERE state = 'Nevada'; |
Так как количество полей в таблицах contacts и customers одинаковы и поля перечислены в том же порядке, то вы могли бы записать решение следующим образом (хотя это, как правило, лучшая практика, перечислить весь список имен столбцов в случае изменения определения таблицы):
1 2 3 4 |
INSERT INTO contacts SELECT * FROM customers WHERE state = 'Nevada'; |