SQL INSERT INTO SELECT, заявление
С помощью SQL можно скопировать информацию из одной таблицы в другую.
INSERT INTO SELECT, заявление копирует данные из одной таблицы и вставляет его в существующую таблицу.
Заявление SQL INSERT INTO SELECT,
INSERT INTO SELECT, оператор выбирает данные из одной таблицы и вставляет его в существующую таблицу. Любые существующие строки в целевой таблице не изменяются.
SQL INSERT INTO SELECT, Синтаксис
Мы можем скопировать все столбцы из одной таблицы в другую, существующую таблицу:
INSERT INTO table2
SELECT * FROM table1;
Или же мы можем скопировать только те столбцы, которые мы хотим в другую, существующую таблицу:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
Демо-версия базы данных
В этом уроке мы будем использовать хорошо известную базу данных Борей.
Ниже приводится подборка из «Customers» таблицы:
Пользовательский ИД | Имя Клиента | Контактное лицо | Адрес | город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitucion 2222 | Mexico D.F. | 05021 | Mexico |
3 | Antonio Moreno Taqueria | Antonio Moreno | Mataderos 2312 | Mexico D.F. | 05023 | Mexico |
И выбор из «Suppliers» таблицы:
SupplierID | Наименование поставщика | Контактное лицо | Адрес | город | Почтовый индекс | Страна | Телефон |
---|---|---|---|---|---|---|---|
1 | Экзотические Liquid | Шарлотта Купер | 49 Гилберта St. | Londona | EC1 4SD | Великобритания | (171) 555-2222 |
2 | Новый Орлеан Cajun наслаждений | Shelley Берк | PO Box 78934 | Жители Нового Орлеана | США | (100) 555-4822 | |
3 | Homestead Бабушка Келли | Regina Мерфи | 707 Oxford Rd. | Ann Arbor | 48104 | США | (313) 555-5735 |
SQL INSERT INTO SELECT, Примеры
Копирование только несколько столбцов из «Suppliers» Into «Customers» :
пример
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers;
Копирование только немецких поставщиков в «Customers» :
пример
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers
WHERE Country=’Germany’;
Insert into sql пример несколько строк – Тарифы на сотовую связь
Информация актуальна! Страница была обновлена 16.12.2019
Инструкция SQL INSERT INTO и INSERT SELECT используются для вставки новых строк в таблицу. Существует два способа использования инструкций:
- Только значения : Первый метод предусматривает указание только значений данных, которые нужно вставить без имен столбцов.
- Имена столбцов и значения : При втором методе указываются имена столбцов и значения строк для вставки:
Запросы :
Способ 1 ( вставка только значений ):
После использования INSERT INTO SELECT таблица Student теперь будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
5 | HARSH | WEST BENGAL | 8759770477 | 19 |
Способ 2 ( вставка значений только в указанные столбцы ):
Таблица Student теперь будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
5 | PRATIK | null | null | 19 |
Обратите внимание, что для столбцов, значения для которых не указаны, задается null .
Использование SELECT в инструкции INSERT INTO
Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.
Использование этого оператора аналогично использованию INSERT INTO . Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT :
- Вставка всех столбцов таблицы : можно скопировать все данные таблицы и вставить их в другую таблицу.
Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.
- Вставка отдельных столбцов таблицы . Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.
Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию MySQL INSERT INTO SELECT для их вставки в первую таблицу.
- Копирование определенных строк из таблицы . Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия WHERE с оператором SELECT . В этом случае нужно использовать соответствующее условие в WHERE .
Таблица 2: LateralStudent
ROLL_NO | NAME | ADDRESS | PHONE | Age |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | SOMESH | ROHTAK | 9687543210 | 20 |
Способ 1 ( вставка всех строк и столбцов ):
Этот запрос вставит все данные таблицы LateralStudent в таблицу Student . После применения SQL INSERT INTO SELECT таблица Student будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | SOMESH | ROHTAK | 9687543210 | 20 |
Способ 2 ( вставка отдельных столбцов ):
Этот запрос вставит данные из столбцов ROLL_NO , NAME и Age таблицы LateralStudent в таблицу Student .
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
7 | SOUVIK | Null | null | 18 |
8 | NIRAJ | Null | null | 19 |
9 | SOMESH | Null | null | 20 |
- Выбор определенных строк для вставки :
Этот запрос выберет только первую строку из таблицы LateralStudent для вставки в таблицу Student . После применения INSERT SELECT таблица будет выглядеть следующим образом:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Delhi | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAON | 9562431543 | 18 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
Данная публикация представляет собой перевод статьи « SQL INSERT INTO Statement » , подготовленной дружной командой проекта Интернет-технологии.ру
Изучаем SQL
- 1. Введение в SQL
- 2. Запросы на выборку
- 3. Условия в запросах
- 4. Cортировка данных
- 5. Вставка записи
- 6. Вставка нескольких записей
- 7. Изменение записи
Помимо вставки одной записи, SQL позволяет выполнить запрос для добавления сразу группы строк в таблицу. Такой запрос будет выполняться гораздо быстрее, чем последовательное добавление по одной записи.
Этот запрос выглядит подобно запросу добавления одной записи. Отличие только в том, что указывается несколько групп данных для вставки в таблицу разделенных запятой:
INSERT INTO
таблица ( список полей )
VALUES
( список добавляемых значений 1 ),
( список добавляемых значений 2 ),
.
( список добавляемых значений N )
Каждая из таких групп указывается в отдельных скобках.
Например, вставка товаров в таблицу:
INSERT INTO
goods ( title, price )
VALUES
( «Вилка», 25 ),
( «Столовая ложка», 35 ),
( «Чайная ложка», 30 )
Такой запрос добавит в таблицу три записи с соответствующими значениями.
Все остальные правила, такие как порядок указания или обязательность полей сохраняются так же, как и для вставки одной записи в таблицу БД.
Всем привет! В данной статье речь пойдет о том, как можно добавлять данные в таблицу в Microsoft SQL Server, если Вы уже хоть немного знакомы с языком T-SQL, то наверно поняли, что сейчас мы будем разговаривать об инструкции INSERT, а также о том, как ее можно использовать для добавления данных в таблицу.
Начнем по традиции с небольшой теории.
Инструкция INSERT в T-SQL
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
- Перечисление конкретных значений для вставки;
- Указание набора данных в виде запроса SELECT;
- Указание набора данных в виде вызова процедуры, которая возвращает табличные данные.
Упрощённый синтаксис
- INSERT INTO – это команда добавления данных в таблицу;
- Таблица – это имя целевой таблицы, в которую необходимо вставить новые записи;
- Список столбцов – это перечень имен столбцов таблицы, в которую будут вставлены данные, разделенные запятыми;
- VALUES – это конструктор табличных значений, с помощью которого мы указываем значения, которые будем вставлять в таблицу;
- Список значений – это значения, которые будут вставлены, разделенные запятыми. Они перечисляются в том порядке, в котором указаны столбцы в списке столбцов;
- SELECT – это запрос на выборку данных для вставки в таблицу. Результирующий набор данных, который вернет запрос, должен соответствовать списку столбцов;
- EXECUTE – это вызов процедуры на получение данных для вставки в таблицу. Результирующий набор данных, который вернет хранимая процедура, должен соответствовать списку столбцов.
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
Исходные данные
Для того чтобы добавлять данные в таблицу, нам нужна соответственно сама таблица, давайте ее создадим, и уже в нее будем пробовать добавлять записи.
Примечание! Все примеры будут выполнены в Microsoft SQL Server 2016 Express.
Наша тестовая таблица, будет содержать перечень товаров с ценой.
Также в примерах мы будем использовать процедуру, которая возвращает табличное значение, для добавления данных в таблицу, поэтому давайте ее тоже создадим.
Для примера она у нас будет возвращать данные из только что созданной таблицы TestTable.
Примечание!
Как Вы понимаете, чтение данного материала подразумевает наличные определенных знаний по языку T-SQL, поэтому если Вам что-то непонятно, рекомендую ознакомиться со следующими материалами:
Пример 1 – Добавляем новую запись в таблицу с использованием конструктора табличных значений
Сначала давайте попробуем добавить одну запись и сразу посмотрим на результат, т. е. напишем запрос на выборку.
Вы видите, что мы после названия таблицы перечислили через запятую имена столбцов, в которые мы будем добавлять данные, затем мы указали ключевое слово VALUES и в скобочках также, в том же порядке, через запятую написали значения, которые мы хотим вставить.
После инструкции INSERT я написал инструкцию SELECT и разделил их командой GO.
А теперь давайте представим, что нам нужно добавить несколько строк. Мы для этого напишем следующий запрос.
В данном случае мы добавили три записи, т.е. три строки. После VALUES значения каждой новой строки указаны в скобочках, разделили мы их запятыми.
Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
Очень часто возникает необходимость добавлять много данных в таблицу, например, на основе запроса на выборку, т.е. SELECT. Для этого вместо VALUES нам всего лишь нужно указать запрос.
В данном примере мы написали запрос SELECT, который возвращает данные из таблицы TestTable, но не все, а только те, у которых идентификатор больше 2. А результат вставили все в ту же таблицу TestTable.
В качестве примера того, как можно добавлять записи в таблицу без указания списка столбцов, давайте напишем еще один запрос на вставку данных, который сделает равно то же самое что и запрос выше, только в нем не будет перечисления столбцов для вставки.
В данном случае мы уверены в том, что в таблице TestTable первый столбец это ProductName, а второй Price, поэтому мы можем позволить себе написать именно так. Но, снова повторюсь, на практике лучше указывать список столбцов.
Если Вы заметили, я во всех примерах не указывал столбец Id, а он у нас есть, ошибки не возникло, так как данный столбец со свойством IDENTITY, он автоматически генерирует идентификаторы, поэтому в такой столбец вставить данные просто не получится.
Пример 3 – Добавляем новые записи в таблицу с использованием хранимой процедуры
Сейчас давайте вставим в таблицу данные, которые нам вернёт хранимая процедура. Смысл здесь такой же, вместо VALUES и вместо запроса мы указываем вызов процедуры. Но как Вы понимаете, порядок и количество столбцов, возвращаемых процедурой, должен строго совпадать со списком столбцов для вставки (даже если список столбцов не указан).
Надеюсь, данный материал помог Вам разобраться с инструкцией INSERT INTO, а у меня все, пока!
INSERT INTO | Документация ClickHouse
- Справка по SQL
- Выражения
INSERT
Добавление данных.
Базовый формат запроса:
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
Вы можете указать список столбцов для вставки, используя синтаксис (c1, c2, c3)
. Также можно использовать выражение cо звездочкой и/или модификаторами, такими как APPLY, EXCEPT, REPLACE.
В качестве примера рассмотрим таблицу:
SHOW CREATE insert_select_testtable
┌─statement────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE insert_select_testtable
(
`a` Int8,
`b` String,
`c` Int8
)
ENGINE = MergeTree()
ORDER BY a │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
INSERT INTO insert_select_testtable (*) VALUES (1, 'a', 1)
Если вы хотите вставить данные во все столбцы, кроме ‘b’, вам нужно передать столько значений, сколько столбцов вы указали в скобках:
INSERT INTO insert_select_testtable (* EXCEPT(b)) Values (2, 2)
SELECT * FROM insert_select_testtable
┌─a─┬─b─┬─c─┐
│ 2 │ │ 2 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 1 │
└───┴───┴───┘
В этом примере мы видим, что вторая строка содержит столбцы a
и c
, заполненные переданными значениями и b
, заполненный значением по умолчанию.
Если список столбцов не включает все существующие столбцы, то все остальные столбцы заполняются следующим образом:
- Значения, вычисляемые из
DEFAULT
выражений, указанных в определении таблицы. - Нули и пустые строки, если
DEFAULT
не определены.
В INSERT можно передавать данные любого формата, который поддерживает ClickHouse. Для этого формат необходимо указать в запросе в явном виде:
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set
Например, следующий формат запроса идентичен базовому варианту INSERT … VALUES:
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ...
ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными. Рекомендуем при формировании запроса переносить данные на новую строку после операторов запроса (это важно, если данные начинаются с пробелов).
Пример:
INSERT INTO t FORMAT TabSeparated
11 Hello, world!
22 Qwerty
С помощью консольного клиента или HTTP интерфейса можно вставлять данные отдельно от запроса. Как это сделать, читайте в разделе «Интерфейсы».
Ограничения (constraints)
Если в таблице объявлены ограничения, то их выполнимость будет проверена для каждой вставляемой строки. Если для хотя бы одной строки ограничения не будут выполнены, запрос будет остановлен.
Вставка результатов
SELECT
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
Соответствие столбцов определяется их позицией в секции SELECT. При этом, их имена в выражении SELECT и в таблице для INSERT, могут отличаться. При необходимости выполняется приведение типов данных, эквивалентное соответствующему оператору CAST.
Все форматы данных кроме Values не позволяют использовать в качестве значений выражения, такие как now()
, 1 + 2
и подобные. Формат Values позволяет ограниченно использовать выражения, но это не рекомендуется, так как в этом случае для их выполнения используется неэффективный вариант кода.
Не поддерживаются другие запросы на модификацию части данных: UPDATE
, DELETE
, REPLACE
, MERGE
, UPSERT
, INSERT UPDATE
.
Вы можете удалять старые данные с помощью запроса ALTER TABLE ... DROP PARTITION
.
Для табличной функции input() после секции SELECT
должна следовать
секция FORMAT
.
Замечания о производительности
INSERT
сортирует входящие данные по первичному ключу и разбивает их на партиции по ключу партиционирования. Если вы вставляете данные в несколько партиций одновременно, то это может значительно снизить производительность запроса INSERT
. Чтобы избежать этого:
- Добавляйте данные достаточно большими пачками. Например, по 100 000 строк.
- Группируйте данные по ключу партиционирования самостоятельно перед загрузкой в ClickHouse.
Снижения производительности не будет, если:
- Данные поступают в режиме реального времени.
- Вы загружаете данные, которые как правило отсортированы по времени.
Оригинальная статья
Запросы SQL добавления данных (INSERT)
Добавление одной или вставка нескольких записей в таблицу БД выполняется командой INSERT. В таком запросе указываются сведения о том, в какую таблицу (в какие ее поля) какие сведения должны быть внесены. В основном виде такой запрос выглядит так:
INSERT INTO таблица(список полей) VALUES (список добавляемых значений)
Здесь, INSERT – это команда языка SQL, определяющая что запрос будет добавлять новую запись;
INTO – после этой команды указывается таблица, в которую будут добавлены данные, после указания которой в скобках перечисляются соответствующие поля этой таблицы;
VALUES – команда, после которой в скобках указываются значения, которые нужно добавить.
Например, для внесения новой записи в таблицу «Товары» (использована для примера в уроке «SQL запросы на выборку (SELECT)»), нужно будет выполнить следующий запрос:
INSERT INTO goods VALUES (5, "Вилка", 25)
В этом примере, указываются значения для всех полей таблицы в том же порядке, в котором они идут в самой таблице. Такой вариант равносилен следующему запросу, где явно указаны названия всех полей:
INSERT INTO goods (num, title, price) VALUES (5, "Вилка", 25)
Не указывать названия полей таблицы стоит только в случае, если вносимые данные будут содержать значения для всех полей том же порядке, что и таблице. Однако, чаще всего, для удобства внесения и просто для большей понятности запроса, название полей указываются. При этом можно указывать их в произвольном порядке:
INSERT INTO goods (price, title, num) VALUES (25, "Вилка", 5)
Если поле «num» таблицы содержит атрибут «auto_increment» (т.е. настроено автозаполнение новым значением, которое каждую вставку увеличивается на единицу), то можно сократить код, не указывая явно значение для этого поля:
INSERT INTO goods (title, price) VALUES ("Вилка", 25)
Так же, если какое-то поле не нужно заполнять запросом, можно не указывать его. При этом оно получит либо определенное настройками таблицы значение по умолчанию, либо нулевое значение.
Следующий запрос добавит в таблицу только запись содержащую название товара, а так же автоматически будет добавлен код товара (если поле кода товара содержит атрибут «auto_increment»):
INSERT INTO goods (title) VALUES ("Вилка")
При этом, не указанное поле «price» будет содержать нулевое значение.
При добавлении нескольких строк в БД, в запросе указывается несколько групп данных, разделенных запятой. Подробней об этом в следующей статье.
значений SQL NULL — ЕСТЬ NULL и НЕ ЯВЛЯЕТСЯ NULL
Что такое значение NULL?
Поле со значением NULL — это поле без значения.
Если поле в таблице является необязательным, можно вставить новую запись или обновить запись без добавления значения в это поле. Тогда поле будет сохраняется со значением NULL.
Примечание: ПУСТОЕ значение отличается от нулевого значения или поля, которое содержит пробелы. Поле со значением NULL — это поле, оставленное пустым. при создании записи!
Как проверить значения NULL?
Невозможно проверить значения NULL с помощью операторов сравнения, таких как =, <или <>.
Вместо этого нам придется использовать операторы IS NULL и IS NOT NULL.
IS NULL Синтаксис
ВЫБРАТЬ имена_столбцов
ИЗ имя_таблицы
ГДЕ имя_столбца ЕСТЬ NULL;
IS NOT NULL Синтаксис
ВЫБРАТЬ имена_столбцов
ИЗ имя_таблицы
ГДЕ имя_столбца НЕ ПУСТО;
Демо-база данных
Ниже представлен выбор из таблицы «Клиенты» в примере Northwind. база данных:
Идентификатор клиента | Имя клиента | ContactName | Адрес | Город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
1 | Альфредс Футтеркисте | Мария Андерс | Обере, ул. 57 | Берлин | 12209 | Германия |
2 | Ana Trujillo Emparedados y helados | Ана Трухильо | Avda. de la Constitución 2222 | México D.F. | 05021 | Мексика |
3 | Антонио Морено Такерия | Антонио Морено | Матадерос 2312 | Мексика Д.F. | 05023 | Мексика |
4 | Вокруг Рога | Томас Харди | 120 Ганновер пл. | Лондон | WA1 1DP | Великобритания |
5 | Berglunds snabbköp | Кристина Берглунд | Berguvsvägen 8 | Лулео | С-958 22 | Швеция |
Оператор IS NULL
Оператор IS NULL используется для проверки пустых значений (значений NULL).
Следующий SQL перечисляет всех клиентов со значением NULL в поле «Адрес»:
Пример
ВЫБЕРИТЕ CustomerName, ContactName, Address
FROM Customers
WHERE Address
НУЛЕВОЙ;
Совет: Всегда используйте IS NULL для поиска значений NULL.
Оператор IS NOT NULL
Оператор IS NOT NULL используется для проверки непустых значений (NOT NULL значения).
Следующий SQL перечисляет всех клиентов со значением в поле «Адрес»:
Пример
ВЫБЕРИТЕ CustomerName, ContactName, Address
FROM Customers
WHERE Address
НЕ ПУСТО;
Оператор SQL INSERT INTO — с примерами
Как добавить новые записи в таблицу?
Оператор INSERT INTO используется для добавления новых данных в базу данных.
INSERT INTO добавляет новую запись в таблицу.
INSERT INTO может содержать значения для некоторых или всех своих столбцов.
INSERT INTO можно комбинировать с SELECT для вставки записей.
Синтаксис SQL INSERT INTO
Общий синтаксис:
INSERT INTO имя-таблицы (имена-столбцов) ЗНАЧЕНИЯ (значения)
КЛИЕНТ |
---|
Идентификатор |
Имя |
Фамилия |
Город |
Страна |
Телефон |
Примеры SQL INSERT INTO
Проблема : Добавить нового клиента в базу данных
ВСТАВИТЬ клиента (имя, фамилия, город, страна, телефон) ЦЕННОСТИ («Крейг», «Смит», «Нью-Йорк», «США», 1-01-993 2800)
Результат: Добавлена 1 новая запись
КЛИЕНТ |
---|
Идентификатор |
Имя |
Фамилия |
Город |
Страна |
Телефон |
Проблема : Добавить нового клиента по имени Анита Коутс в базу данных
ВСТАВИТЬ клиента (имя, фамилия) ЦЕННОСТИ («Анита», «Пальто»)
Результат: Добавлена 1 новая запись
SQL INSERT в сочетании с SELECT
Общий синтаксис:
INSERT INTO имя-таблицы (имена-столбцов) ВЫБЕРИТЕ имена столбцов ОТ имя-таблицы ГДЕ условие
ПОСТАВЩИК |
---|
Идентификатор |
Название компании |
Контактное имя |
Город |
Страна |
Телефон |
Факс |
ЗАКАЗЧИК | Id
---|
Имя |
Фамилия |
Город |
Страна |
Телефон |
SQL INSERT INTO
с SELECT Пример
Проблема : Поставщик пивоварни Bigfoot имеет
также стать клиентом. Добавить клиента
запись со значениями из таблицы поставщиков.
ВСТАВИТЬ клиента (имя, фамилия, город, страна, телефон) ВЫБРАТЬ ВЛЕВО (ContactName, CHARINDEX ('', ContactName) - 1), ПОДСТРОКА (ContactName, CHARINDEX ('', ContactName) + 1, 100), Город, Страна, Телефон ОТ поставщика ГДЕ CompanyName = 'Bigfoot Breweries'
Примечание. ContactName разбирается на FirstName и LastName.
Парсинг происходит с помощью встроенных функций: LEFT, SUBSTRING и CHARINDEX.
Результат: Добавлена 1 новая запись
SQL INSERT — вставить одну или несколько строк в таблицу
Сводка : в этом руководстве вы узнаете, как использовать оператор SQL INSERT для вставки данных в таблицы.
Оператор INSERT
вставляет одну или несколько строк в таблицу.Оператор INSERT
иногда называют оператором INSERT INTO
.
Оператор SQL INSERT — вставить одну строку в таблицу
Ниже показан оператор INSERT
, который вставляет одну строку в существующую таблицу.
INSERT INTO table (column1, column2, …) VALUES (value1, value2, …); |
Чтобы вставить строку в таблицу, вам нужно указать три вещи:
- Во-первых, таблица, в которую вы хотите вставить новую строку, в предложении
INSERT INTO
. - Во-вторых, список столбцов в таблице, разделенных запятыми, в круглых скобках.
- В-третьих, разделенный запятыми список значений, заключенный в круглые скобки в предложении
VALUES
.
Список столбцов должен иметь такое же количество элементов, что и список значений, в противном случае ядро базы данных выдаст ошибку.
Давайте взглянем на следующую таблицу отправителей
:
Следующая инструкция
INSERT
вставляет новую строку в таблицу отправителей : INSERT INTO отправители (название компании, телефон)
ЦЕННОСТИ («Грузоотправители Альянса», «1-800-222-0451»);
Две константы, 'Alliance Shippers'
и '1-800-222-0451'
указаны в пункте VALUES
. Механизм базы данных вставил их в столбцы companyname
и phone
соответственно.
После выполнения оператора сервер базы данных возвращает сообщение, чтобы указать количество затронутых строк. В этом случае мы получаем сообщение «1 строка затронута», сообщающее, что новая строка была успешно вставлена.
Обратите внимание, что мы не указали столбец shipperID
в списке столбцов, поскольку столбец shipperID
является столбцом AUTO INCREMENT
, механизм базы данных автоматически генерирует следующую последовательность для него всякий раз, когда новая строка вставляется в стол.
Чтобы помочь вам писать меньше кода, SQL предоставляет более короткую форму инструкции INSERT
следующим образом:
INSERT INTO table
VALUES (value1, value2, ...)
В этой форме список значений должен иметь тот же порядок, что и список столбцов в таблице. Если вы используете эту форму инструкции INSERT
, вы должны указать значения для всех столбцов, кроме столбца AUTO INCREMENT
.
Рекомендуется использовать имена столбцов в инструкции INSERT
, чтобы упростить сопровождение кода.
Следующий оператор INSERT
имеет тот же эффект, что и предыдущий:
INSERT INTO shippers
VALUES («Alliance Shippers», «1-800-222-0451»);
Оператор SQL INSERT - вставить несколько строк в таблицу
Оператор INSERT
также позволяет вставлять несколько строк в таблицу с помощью одного оператора, как показано ниже:
INSERT INTO имя_таблицы (столбец1, столбец2…)
ЗНАЧЕНИЯ (значение1, значение2,…),
(значение1, значение2,…),
…
В этой форме необходимо предоставить несколько списков значений, каждый список разделяется запятой.
Следующий оператор INSERT
вставляет две строки в таблицу
shippers:INSERT INTO shippers (companyName, phone) VALUES (‘UPS’, ‘1-800-782-7892’ ), (‘DHL’, ‘1-800-225-5345’) |
Оператор SQL INSERT — копирование данных таблицы
Вместо указания списка значений вы можете использовать оператор SELECT для выбора значений из другой таблицы и передайте их в оператор INSERT
.Это позволяет копировать данные из таблицы в другую таблицу.
Следующий оператор показывает, как скопировать данные из another_table
в таблицу
:
INSERT INTO table (column1, column2, …) SELECT column1, column2 ,. .. FROM another_table WHERE condition |
Список столбцов в предложении SELECT
должен соответствовать списку столбцов в предложении INSERT INTO
. Если вы хотите скопировать только частичные данные, вам необходимо указать условие в предложении WHERE.
Предположим, у вас есть временная таблица с именем shippers_tmp
, которая имеет ту же структуру, что и таблица shippers
. Чтобы скопировать данные из таблицы shippers
в таблицу shippers_tmp
, используйте следующую инструкцию:
INSERT INTO shippers_tmp (shipperid, name, phone) SELECT shipperid, companyName, phoneName ОТ грузоотправителей |
В этом руководстве вы узнали, как использовать оператор INSERT
для вставки одной или нескольких строк в таблицу.Кроме того, вы также узнали, как копировать данные из таблицы в другую таблицу с помощью оператора INSERT SELECT INTO
.
- Было ли это руководство полезным?
- Да Нет
Заявление SQL INSERT
Оператор SQL INSERT добавляет новые записи в таблицы или вставляет данные в таблицы SQL. Синтаксис оператора INSERT в SQL Server —
.- синтаксис SQL Server INSERT ВСТАВИТЬ В [Таблицу назначения] ([Столбец1], [Столбец2] ,..., [СтолбецN]) ЗНАЧЕНИЯ ([Column1_Value], [Column2_Value], ..., [ColumnN_Value])
- Таблица назначения: Полностью соответствует имени таблицы для вставки записей
- Столбец1… ..ColumnN: Выберите количество столбцов из таблиц.
- Column1_Value… ..ColumnN_Value: Значения, которые вы хотите вставить. Например, Column1_Value вставлено для Column1. Если вы опускаете имена полей, вы должны указать column_values (значения полей) в порядке, определенном структурой целевой таблицы
Мы можем записать этот оператор вставки сервера Sql как,
- синтаксис SQL Server INSERT ВСТАВИТЬ В [Таблицу назначения] ЗНАЧЕНИЯ ([Column1_Value], [Column2_Value] ,..., [ColumnN_Value])
Эта таблица содержит две записи, и мы будем выполнять операции вставки над ней.
Пример инструкции SQL INSERT
Этот пример инструкции Insert вставляет новую запись в таблицу [SQL Insert] более традиционным способом. Здесь мы не вставили значение идентификатора, потому что это столбец идентификатора, и он будет обновлен автоматически
- Пример вставки SQL Server ИСПОЛЬЗУЙТЕ [Учебное пособие по SQL] ИДТИ INSERT INTO [dbo]. [SQL Insert] ( [Имя], [Фамилия], [Род занятий], [Годовой доход], [Продажи]) ЦЕННОСТИ («Учебник», «Шлюз», «Образование», 10000, 200)
Если мы вставляем данные для всех столбцов, то мы можем игнорировать имена столбцов целевой таблицы (синтаксис 2).Это означает, что приведенный выше оператор вставки SQL Server может также записываться как:
- Пример инструкции вставки SQL INSERT INTO [dbo]. [SQL Insert] ЗНАЧЕНИЯ ('SQL', 'Программирование', 'База данных', 50000, 1800)
СОВЕТ: Игнорировать имена столбцов — не лучшая практика. Поэтому всегда указывайте имена столбцов в SQL Server.
Приведенный выше запрос T-SQL вставляет данные в столбцы [FirstName], [LastName], [Occupation], [YearlyIncome] и [Sales]. Всякий раз, когда вы опускаете имена полей, вы должны указывать column_values (значения полей) в порядке, определенном структурой целевой таблицы.Это означает, что значение SQL будет вставлено в столбец [FirstName] и т. Д.
Как вставить несколько записей в таблицу?
Этот пример инструкции вставки сервера Sql вставляет несколько записей в таблицу [SQL Insert] более традиционным способом.
- Пример инструкции вставки SQL Server INSERT INTO [dbo]. [SQL Insert] ЦЕННОСТИ («Вират», «Кохли», «Крикет», 15700, 800) INSERT INTO [dbo]. [SQL Insert] ЦЕННОСТИ ('Рохит', 'Шарма', 'Крикет', 15000, 500)
Самый старый способ вставить несколько записей в таблицу [SQL Insert].
- Пример инструкции вставки SQL Server INSERT INTO [dbo]. [SQL Insert] ВЫБЕРИТЕ 'John', 'Levi', 'Professional', 75700, 1900 СОЮЗ ВСЕ ВЫБЕРИТЕ «Доу», «Мартин», «Менеджмент», 95000, 5600
Здесь мы используем самый популярный способ вставки нескольких записей в таблицу [SQL Insert]. Этот оператор вставки SQL будет работать в SQL Server 2008 и более поздних версиях
.- Пример инструкции вставки SQL INSERT INTO [dbo]. [SQL Insert] ЦЕННОСТИ (Имран, Хан, Опытный профессионал, 15900, 100) , ('Лань', 'Лара', 'Менеджмент', 15000, 60) , («Рамеш», «Кумар», «Профессионал», 65000, 630)
Как вставить несколько записей в таблицу?
В этом примере инструкции Sql Server Insert мы вставляем несколько записей в таблицу [SQL Insert].Помните, что когда вы вставляете несколько записей в таблицу, вы должны указать имена столбцов.
- Пример инструкции вставки SQL Server INSERT INTO [dbo]. [SQL Insert] ( [Имя], [Профессия], [Продажи]) ЗНАЧЕНИЯ ('Insert', 'SQL Tutorials', 1225)
Запрос на вставку вышеупомянутого оператора вставляет данные в столбцы [Имя], [Занятие] и [Продажи]. В оставшиеся столбцы вставляются значения NULL.
Sql Insert в операторе Select
Таблица Employ, которую мы используем для запроса Insert Statement
В этом примере инструкции Insert мы выбираем строки из таблицы Employ и вставляем их в целевую таблицу. Здесь мы ограничиваем строки с помощью предложения WHERE.
- Пример инструкции вставки SQL Server INSERT INTO [dbo]. [SQL Insert] ВЫБЕРИТЕ [Имя], [Фамилия], [Род занятий], [Годовой доход], [Продажи] ИЗ [Учебное пособие по SQL]. [Dbo]. [Employ] ГДЕ ID> 2
Над запросом вставьте столбцы [FirstName], [LastName], [Occupation], [YearlyIncome] и [Sales] из исходной таблицы, где значение [ID] больше 2, в таблицу [SQL Insert].
См. Статью INSERT INTO Select Statement.Давайте посмотрим, вставил ли оператор INSERT INTO выбранные данные в целевую таблицу или нет
Оператор SQL INSERT INTO SELECT
В этой статье мы объясним оператор SQL INSERT INTO SELECT на примерах.
Вы могли использовать оператор «select» и оператор «insert into» в SQL отдельно. Оператор select используется для выборки данных из базы данных, тогда как оператор «вставить в» вставляет данные в таблицу. В этом конкретном примере мы изучим использование вставки в оператор select
в SQL.
1. Об операторе SQL INSERT INTO SELECT
Оператор Insert Into Select используется для копирования данных из одной таблицы (назовем ее исходной таблицей) в другую таблицу (назовем ее целевой таблицей).
Примечание:
- Этот оператор работает только в том случае, если типы данных исходной и целевой таблиц совпадают.
- Уже существующие данные в целевой таблице не будут изменены после того, как вставка в оператор выбора будет применена к целевой таблице.
2. Синтаксис INSERT INTO SELECT
Если вы хотите выбрать все столбцы из исходной таблицы и скопировать их в целевую таблицу, то будет работать следующий синтаксис.
ВСТАВИТЬ В destinationTableName (columnNames) ВЫБРАТЬ * ОТ sourceTableName ГДЕ условие
Если вы хотите выбрать определенные столбцы в целевой таблице, будет работать следующий синтаксис. Обратите внимание, что columnNames будет списком столбцов, разделенных запятыми.
ВСТАВИТЬ В destinationTableName (columnNames) ВЫБЕРИТЕ columnNames ОТ sourceTableName ГДЕ условие
3.
INSERT INTO SELECT, примерМы будем использовать командную строку MySQL, чтобы показать, как используется оператор Insert Into Select. Вы также можете сделать то же самое либо с помощью компилятора MySQL, доступного в Интернете, либо с помощью MySQL Workbench. Используя оператор Insert Into Select, мы будем копировать данные из исходной таблицы в целевую.
3.1 Создание двух демонстрационных таблиц — исходной и целевой
В качестве примера были созданы две таблицы, а именно: STUDENT,
и VOLUNTEER.
Таблица STUDENT состоит из 3 столбцов, которые включают studentId, studentName и страну.Точно так же таблица VOLUNTEER также состоит из 3 столбцов, которые включают volunteerId, volunteerName и country.
3.2 Вставка данных в две таблицы
Некоторые образцы данных были вставлены в две таблицы STUDENT и VOLUNTEER с помощью команды insert
.
Примечание: Если в типах данных для соответствующих значений будет сделана какая-либо ошибка, это приведет к ошибке и вставка не будет успешной. Итак, убедитесь, что строка заключена в одинарные кавычки.
Рис. 2. Данные, вставленные в студента и добровольца Давайте посмотрим, как выглядят данные после вставки строк в таблицы. Мы использовали команду select
для выборки данных в обеих таблицах. Вы можете видеть, что 3 строки успешно вставлены в таблицу учеников, а также 3 строки в таблице добровольцев.
3.3 Использование вставки в оператор выбора
Теперь мы собираемся использовать вставку в оператор выбора для копирования сведений об индийских студентах из таблицы студентов в таблицу добровольцев. .
Вы можете ясно видеть, что перед использованием вставки в оператор select таблица волонтеров имеет 3 строки. Когда используется оператор выбора Insert Into, добавляется 1 строка (последняя строка в обновленной таблице добровольцев).
Итак, вы можете видеть, что этот оператор не влияет ни на существующие данные в целевой таблице , ни на исходную таблицу
.
4. Итоги
В этом примере мы узнали:
- Функциональность и использование оператора Insert Into Select.
- Реализация функциональности с помощью клиента командной строки MySQL.
5. Загрузите сценарий SQL
Загрузите сценарий SQL, состоящий из команд, использованных в примере.
SQL INSERT, UPDATE, DELETE - Ой!
Операторы SQL INSERT
, UPDATE
и DELETE
- о чем они все? Если вы инженер по обработке данных, администратор базы данных или даже обычный любитель данных, парень или девушка, однажды вы обнаружите, что база данных станет вашим «ребенком».«Заряженный этим особенным набором радости, вам нужно будет накормить и изменить этого маленького парня. Да, мы все еще говорим о базах данных! INSERT
, UPDATE
и DELETE
- все это функции в SQL, которые помогают обеспечить актуальность ваших данных и очистить их от ненужной или устаревшей информации.
INSERT
, UPDATE
и DELETE
, а также SELECT и MERGE известны как операторы языка манипулирования данными (DML), которые позволяют пользователям SQL просматривать данные и управлять ими.Хотя данные, конечно, часто обновляются самим приложением, они регулярно требуют ручного ввода или обслуживания, а это требует не только хорошего понимания основ SQL, но и того, как INSERT
, UPDATE
и DELETE
в SQL.
Детская больница Микки Мауса - пример из базы данных
Давайте посмотрим на эти триплеты SQL один за другим и поймем, как они работают.
Мы будем использовать образец базы данных, чтобы продемонстрировать каждый из трех.Продолжая тему ребенка, допустим, вы являетесь администратором данных в детской больнице, если быть точным, «Детская больница Микки Мауса». Больница ведет учет всех своих маленьких пациентов, включая их возраст, вес, результаты анализов крови - вы получаете очаровательную картину.
Обычно врачи вводят и обновляют эту информацию в систему больницы каждый раз, когда они видят своих пациентов, и большая часть вставки, обновления и удаления записей в базе данных выполняется системой.Но часто есть вещи, которые нужно исправить вручную, и, как администратору резидентной базы данных, вам пора проявить себя!
Вы также можете прочитать: Обзор инструкции SQL Delete
В статье ниже мы используем три разные таблицы, чтобы продемонстрировать три разных утверждения.
Образец таблицы номер один показывает истории болезни пациентов и их основную информацию:
Столик пациента
Идентификатор пациента | Фамилия | Имя | DOB | Секс | Вес | Высота | Привиты |
---|---|---|---|---|---|---|---|
15223 | Смит | Дениз | 31. 12.2018 | F | 21.4 | 29,2 | Y |
15224 | Агарвал | Арджун | 29.08.2017 | M | 28,1 | 34,2 | Y |
15225 | Адамс | Мак | 14.02.2015 | F | 34,0 | 39,2 | N |
15226 | Джонсон | Тьерра | 15.08.2019 | F | 14.6 | 24,5 | Y |
15227 | Кхури | Мохаммед | 30.03.2014 | M | 41,5 | 44,1 | Y |
15228 | Джонс | Бен | 04.04.2011 | M | 70,1 | 52,2 | Y |
15229 | Ковальчик | Александра | 27. 08.2019 | F | 15.2 | 23,9 | Y |
Образец таблицы номер два содержит различные отделения больницы, а также группы и категории, к которым относятся эти отделения:
Отделение стол
DepartmentID | Название отдела | Имя группы | Категория Название |
---|---|---|---|
1 | Кардиология | Сердечный центр | Клинический |
2 | Центральное отделение интенсивной терапии | Скорая помощь | Клинический |
3 | Скорая помощь | Скорая помощь | Клинический |
4 | Связь | Администрация | Работает |
5 | Онкология | Внутренняя медицина | Клинический |
6 | Неврология | Внутренняя медицина | Клинический |
7 | Кадры | Администрация | Работает |
8 | Патология | Сервис | Технический |
9 | Радиология | Сервис | Технический |
10 | Аптека | Сервис | Технический |
11 | Исполнительный совет | Администрация | Работает |
12 | Урология | Хирургия | Клинический |
13 | Гематология | Внутренняя медицина | Клинический |
14 | Монтана Уорд | Палата | Работает |
15 | Чикаго Уорд | Палата | Работает |
16 | Линкольн Уорд | Палата | Работает |
17 | Йеллоустонский приход | Палата | Работает |
18 | Brooklyn Ward | Палата | Работает |
Образец таблицы номер три записывает посещения пациентов за разные годы:
Стол для приема пациентов
Идентификатор пациента | Последний допуск | Последний разряженный |
---|---|---|
33 | 29. 12.1952 | 05.01.1953 |
34 | – | – |
35 | 01.08.2004 | 08.04.2004 |
36 | 28.07.2011 | 30.07.2011 |
37 | 27.05.1950 | 30.05.1950 |
38 | – | – |
39 | 11.10.1970 | 20.10.1970 |
Вооружившись этими образцами таблиц, давайте перейдем к мельчайшим деталям: INSERT
, UPDATE
и DELETE
.
ВСТАВИТЬ данные с использованием SQL
Как и у младенцев, каждую минуту рождаются новые данные. При наличии множества продуманных систем часто эти данные легко добавляются в намеченные базы данных. Однако во многих случаях вам придется добавить его вручную, и именно здесь на помощь приходит инструкция INSERT
в SQL.
INSERT
- это ваш помощник для добавления одной или нескольких строк в таблицу. INSERT
также может помочь с добавлением строк из одной таблицы в другую.
Давайте посмотрим на базовую структуру оператора SQL INSERT
:
Во-первых, нам нужно определить таблицу, в которую мы хотим вставить строки. Затем мы указываем столбцы, которые хотим заполнить. Наконец, мы оговариваем значения, которые нам нужно добавить. Это основная форма функции INSERT
, и она довольно интуитивно понятна.
Чтобы дать этой структуре какое-то реальное применение, вот пример из нашего тематического исследования.
У одного из врачей детской больницы Микки Мауса есть новорожденный пациент, имя которого еще не названо.Врачу необходимо немедленно внести ребенка в базу данных, чтобы получить доступ к испытанию препарата для больного ребенка, но система не позволит отправить файл ребенка без имени. Врач хочет, чтобы пациент был добавлен с использованием его номера пациента, оставив его имя пустым до более поздней даты. Вам, как администратору, нужно будет вручную ввести пациента в базу данных.
Вот как будет выглядеть инструкция INSERT
:
Как видите, мы даем не только имя таблицы, в которую нужно вставить, но также имена столбцов и значений, которые мы хотим добавить.Мы не указываем PatientID в списке столбцов, поскольку он заполняется автоматически как столбец идентификации.
Так как мы хотим оставить имя пациента пустым, мы пишем NULL для столбцов имени.
После того, как мы запустим эту команду, она создаст следующее дополнение к базе данных:
Вставка нескольких строк
Чтобы вставить более одной строки данных с помощью одного оператора, используйте круглые скобки и запятые, чтобы указать отдельные новые строки.
Совет! Используйте транзакцию, чтобы проверить свою вставку без фиксации и постоянного изменения таблицы. Для этого начните с BEGIN TRANSACTION
и завершите транзакцию либо COMMIT
, если вы хотите сохранить изменения, либо ROLLBACK
, если вы хотите отменить то, что вы сделали. Ниже показано, как мы добавляем транзакцию в приведенный выше пример:
Начать транзакцию
Вставка из одной таблицы в другую
Необходимо вставить одну или несколько строк данных из одной таблицы в другую таблицу? Вы можете использовать инструкцию INSERT INTO SELECT
.
Допустим, несколько наших молодых пациентов принимают участие в испытании нового препарата, а вы устанавливаете новую таблицу для регистрации их участия. Базовая структура этого отчета:
Заявление для нашего примера испытания лекарственного средства будет выглядеть так:
Вы также можете написать пример как общее табличное выражение (CTE). Среди прочего, CTE можно использовать для создания временного набора результатов, который можно повторно использовать во время запроса. Вот как будет выглядеть та же команда, написанная как CTE:
Совет! Если вы используете SELECT
для добавления данных из одной таблицы в другую, в качестве начального шага рекомендуется запустить только инструкцию SELECT
- просто чтобы убедиться, что возвращаются правильные строки и что вас устраивает результат!
ОБНОВЛЕНИЕ данных с использованием SQL
Оператор SQL UPDATE
- еще одна распространенная задача, которую используют инженеры по обработке данных и администраторы баз данных. Используйте его, чтобы изменить значение столбца для одной или нескольких строк.
Вот как обычно структурирован оператор SQL UPDATE
:
Как и в случае с оператором SQL INSERT
, сначала нам нужно определить таблицу, которую мы хотим обновить. Затем мы используем предложение SET
, в котором подробно описаны столбцы, которые мы хотим обновить. Наконец, мы используем предложение WHERE
, чтобы точно определить, какие строки мы хотим включить в обновление.
Совет! Поскольку новое значение столбца может повлиять на более чем одну строку, убедитесь, что вы довольны масштабом своего обновления, прежде чем совершать фиксацию! Как и INSERT
, SQL UPDATE
может быть записан как транзакция, что означает, что вы можете либо COMMIT
, либо ROLLBACK
для обновления, в зависимости от того, довольны ли вы изменениями.
Вот пример из нашего тематического исследования. Наше отделение неотложной помощи переименовывается в отделение «Травмы и неотложная хирургия», поэтому его название необходимо изменить в базе данных. Чтобы обновить это имя, вы можете выполнить этот оператор:
Вот как будет выглядеть обновленное название отдела в нашей таблице:
При использовании оператора SQL UPDATE
убедитесь, что в предложении WHERE
точно указано, какие строки вы хотите обновить.Если вы сомневаетесь, запишите заявление как транзакцию, которую затем можно откатить, если вас не устраивают изменения - никакого вреда!
Чтобы убедиться, что вы выбираете правильные данные для обновления в первую очередь, вы можете провести тест, используя SELECT
, чтобы убедиться, что вы выбираете правильные строки.
Обновить несколько строк
Если вам нужно обновить несколько строк данных, это легко сделать с помощью оператора UPDATE
. Предложение WHERE
- ваш друг.
Представьте, что вы хотите изменить категорию всех стационарных отделений из «Палаты» в «Палаты» в столбце группы.
Что изменит таблицу, чтобы она выглядела так:
УДАЛИТЬ данные с помощью SQL
SQL DELETE
- это изменение подгузников в мире SQL. Есть что-то, что тебе не нужно? Удалите это!
DELETE
удаляет одну или несколько строк из таблицы, но будьте осторожны! Вы должны убедиться, что знаете, что удаляете, прежде чем переходить к заявлению!
Вот как выглядит ваш средний оператор SQL DELETE
:
Это всего лишь две части: указание таблицы и указание ГДЕ
- строки, которые вы хотите удалить.
Если вы знаете первичный ключ строки, которую хотите удалить, ваша работа проста. Вы хотите удалить Lincoln Ward со своего стола? Это просто:
Удаление нескольких строк
Возвращаемся в детскую больницу Микки Мауса. Допустим, диспетчер данных больницы хочет удалить все истории болезни тех, кто не посещал больницу с 1969 года. Вот как можно написать выписку DELETE
:
Результат? Это таблица перед…
… и вот как это выглядит после того, как мы запустим этот скрипт:
Однако лучше всего перед запуском этого оператора DELETE
было бы проверить результат с помощью команды SELECT
.Это вернет все строки, которые вы собирались удалить, поэтому вы можете сначала проверить, удаляете ли вы правильные строки!
Чтобы запустить этот тест, введите:
Предупреждение! Если вы используете DELETE
без добавления предложения WHERE
, вы удалите каждую строку из своей таблицы.
Заключение
После того, как вы освоите основы SQL, операторы SQL INSERT
, UPDATE
и DELETE
станут вашим следующим шагом к славе базы данных!
Дополнительная литература
Обзор инструкции вставки SQL
Как использовать SQL UPDATE. ВОЗВРАЩЕНИЕ к более эффективной работе с DML
Работа с оператором INSERT в SQL Server
Оператор INSERT позволяет добавлять одну или несколько строк в таблицу или представление в базе данных SQL Server. Этот оператор является одним из операторов основного языка модификации данных (DML), доступных в Transact-SQL, наряду с UPDATE, MERGE и DELETE. Вы можете использовать оператор INSERT для добавления данных, которые вы определяете специально, или вы можете добавить данные, которые вы извлекаете из других таблиц или представлений. Вы также можете включить предложение OUTPUT в свой оператор INSERT, чтобы фиксировать результаты оператора для целей аудита или проверки.
В этой статье я объясню, как использовать оператор INSERT для добавления данных в таблицы SQL Server. Примеры, которые я показываю, основаны на образце базы данных AdventureWorks2008, установленном на локальном экземпляре SQL Server 2008. Однако вы можете запустить большинство этих примеров в базе данных AdventureWorks в SQL Server 2005 с небольшими изменениями, такими как изменение имени базы данных. . При необходимости я отмечаю, какие функции не поддерживаются в 2005 году.
ПРИМЕЧАНИЕ. Одно из представлений, на которые я ссылаюсь в базе данных AdventureWorks2008 (представление SalesPerson), включает столбец BusinessEntityID.Этот столбец называется столбцом SalesPersonID в базе данных AdventureWorks.
В базовом операторе INSERT вы должны указать имя целевой таблицы и значения данных, которые вы хотите вставить в эту таблицу. При необходимости вы должны дополнить это имя таблицы именем сервера, базы данных или схемы.
Чтобы продемонстрировать, как создать базовый оператор INSERT, я сначала использовал следующий код для создания таблицы SalesStaff1 в базе данных AdventureWorks2008:
ЕГЭ AdventureWorks2008; ЕСЛИ OBJECT_ID ('SalesStaff1', 'U') НЕ НУЖЕН ТАБЛИЦА ОТДАВЛЕНИЯ SalesStaff1; СОЗДАТЬ ТАБЛИЦУ SalesStaff1 ( StaffID INT NOT NULL PRIMARY KEY, FirstName NVARCHAR (30) NOT NULL, LastName NVARCHAR (30) NOT NULL ); |
Сама таблица довольно проста, как и оператор INSERT, необходимый для добавления строки данных. Для этого оператора требуется ключевое слово INSERT, имя целевой таблицы, ключевое слово VALUES и значения для вставки, как показано в следующем примере:
ВСТАВИТЬ В ЗНАЧЕНИЯ SalesStaff1 (1, «Стивен», «Цзян»); |
Обратите внимание, что оператор начинается с ключевого слова INSERT, за которым следует ключевое слово INTO. Ключевое слово INTO необязательно. Часто вы увидите, что это используется.Часто вы этого не сделаете. После ключевого слова INSERT и необязательного ключевого слова INTO вы указываете имя целевой таблицы, которой в данном случае является SalesStaff1.
Затем вы указываете ключевое слово VALUES, а затем сами значения. Обратите внимание, что значения заключены в круглые скобки и разделены запятыми. Кроме того, строковые значения заключаются в одинарные кавычки. Значения вставляются в таблицу в том порядке, в котором они указаны в предложении. Это означает, что значения должны быть в том же порядке, что и столбцы, определенные в таблице. В этом случае 1 вставляется в первый столбец таблицы (StaffID), Stephen вставляется во второй столбец (FirstName), а Jiang вставляется в третий столбец (LastName).
Вот и все, что нужно для вставки строки в таблицу. Однако, как это часто бывает, вы можете захотеть добавить несколько строк в таблицу в одном операторе. До SQL Server 2008 это было невозможно, но теперь оператор INSERT позволяет указать несколько строк, как показано в следующем примере:
ВСТАВИТЬ SalesStaff1 ЗНАЧЕНИЯ (2, «Майкл», «Блайт»), (3, «Линда», «Митчелл»), (4, «Джиллиан», «Карсон»), (5, «Гарретт», «Варгас»); |
Как видите, вы все равно должны указать ключевое слово INSERT, имя целевой таблицы и ключевое слово VALUES.Однако вместо одного набора круглых скобок теперь у вас есть набор для каждой строки, которую нужно вставить в таблицу. Затем наборы значений разделяются запятыми. Теперь, когда вы запустите инструкцию, все четыре строки будут добавлены в таблицу SalesStaff1.
Примеры в предыдущем разделе - это простейшие операторы INSERT. Они предполагают, что вы добавите одно значение в каждый столбец таблицы для каждой строки, которую планируете вставить. Однако это не всегда так просто. Во многих случаях вам нужно вставить значения в определенные столбцы, но не во все столбцы.Например, если у вас есть столбец IDENTITY, вы можете не захотеть вставлять в него значение, а вместо этого разрешите механизму базы данных автоматически сгенерировать следующее значение. Однако для оператора INSERT, использованного в предыдущих примерах, требуется одно значение для каждого столбца. Если вы не укажете подходящее значение для каждого столбца, вы получите ошибку.
Чтобы решить эту проблему, оператор INSERT поддерживает дополнительный компонент, который позволяет указать, какие столбцы должны принимать значения.Указанные вами значения затем вставляются в эти столбцы. Предполагается, что столбцы, которые не указаны, генерируют свои собственные значения, как в случае со столбцами IDENTITY, вычисляемыми столбцами или столбцами, для которых было определено значение по умолчанию.
Например, следующий код создает таблицу SalesStaff2, которая включает столбцы, для которых не требуется явно добавлять значения:
ЕГЭ AdventureWorks2008; ЕСЛИ OBJECT_ID ('SalesStaff2', 'U') НЕ ПУСТОЙ ТАБЛИЦА ОТДАВЛЕНИЯ SalesStaff2; СОЗДАТЬ ТАБЛИЦУ SalesStaff2 ( StaffID INT NOT NULL IDENTITY PRIMARY KEY, StaffGUID UNIQUEIDENTIFIER NULL, Имя NVARCHAR Последнее (30) NOT NULL, NVARCHAR (30) NOT NULL, 9000CHAR (FirstName + '' + LastName),ModifiedDate DATETIME NOT NULL DEFAULT GETDATE () ); |
Как видите, StaffID - это столбец IDENTITY, FullName - это вычисляемый столбец, а ModifiedDate был определен со значением по умолчанию (полученным с помощью функции GETDATE). Теперь давайте посмотрим на оператор INSERT, который предоставляет значения для трех других столбцов: StaffGUID, FirstName, LastName:
.ВСТАВИТЬ В SalesStaff2 (StaffGUID, FirstName, LastName) VALUES (NEWID (), 'Stephen', 'Jiang'); ВЫБРАТЬ StaffID, StaffGUID, FullName, ModifiedDate FROM SalesStaff2; |
Обратите внимание, что я добавляю список столбцов после того, как укажу ключевые слова INSERT INTO и имя целевой таблицы.Столбцы заключаются в круглые скобки и разделяются запятыми. Данные, которые я указываю в предложении VALUES, должны соответствовать этим столбцам. В этом случае предложение VALUES включает три значения. Первая - это функция NEWID, которая генерирует GUID для столбца StaffGUID. Второе значение, Стивен, , вставляется в столбец FirstName, а третье значение, Jiang, вставляется в столбец LastName.
Как видите, я не включаю имена или значения столбцов ни в один из столбцов, значения которых генерируются автоматически. Я могу включить значение для столбца StaffID, если база данных настроена так, чтобы я мог переопределять значения IDENTIY. Я также могу включить значение, чтобы переопределить значение ModifiedDate по умолчанию. В любом случае я должен включить имя столбца после предложения INSERT и включить значение в предложение VALUES в правильном порядке.
Как вы, несомненно, заметили, я добавил оператор SELECT после оператора INSERT в приведенном выше примере. Оператор возвращает значения, которые были автоматически сгенерированы, когда я вставлял строки, как показано в следующих результатах:
StaffID | StaffGUID | FullName | Изменено Дата |
1 | C96716E5-2DEE-4887-80C9-F0C3A1D38B98 | Стивен Цзян | 21 сентября 2010 г. , 07:56:59.487 |
Вот и все, что нужно для добавления данных в определенные столбцы. Вы просто указываете имена столбцов, которые должны принимать значения, а затем указываете эти значения. Вы можете указать имена столбцов в любом порядке. Просто убедитесь, что данные в предложении VALUES соответствуют порядку столбцов. А теперь давайте посмотрим, что происходит, когда вы не определяете явно свои ценности.
В предыдущих примерах предложение VALUES включает набор значений, заключенных в круглые скобки и разделенных запятыми.Но необязательно указывать значения явно. Вместо этого вы можете получить значения с помощью оператора SELECT или хранимой процедуры. Чтобы продемонстрировать, как это работает, я сначала создал таблицу SalesStaff3, показанную в следующем коде:
ЕГЭ AdventureWorks2008; ЕСЛИ OBJECT_ID ('SalesStaff3', 'U') НЕ НУЖЕН ТАБЛИЦА ОТДАВЛЕНИЯ SalesStaff3; СОЗДАТЬ ТАБЛИЦУ SalesStaff3 ( StaffID INT NOT NULL PRIMARY KEY, FullName NVARCHAR (60) NOT NULL, ModifiedDate DATETIME NOT NULL DEFAULT GETDATE ) ; |
Предположим, я хочу вставить данные в таблицу SalesStaff3, которую я получаю из Sales. представление vSalesPerson в базе данных AdventureWorks2008. Вместо указания предложения VALUES я могу указать оператор SELECT, который извлекает данные непосредственно из представления vSalesPerson, как показано в следующем примере:
ВСТАВИТЬ SalesStaff3 (StaffID, FullName) SELECT TOP 5 BusinessEntityID, FirstName + '' + LastName AS FullName FROM Sales.vSalesPerson ORDER BY BusinessEntityID; ВЫБРАТЬ * ОТ SalesStaff3; |
Вы можете заменить предложение VALUES любым допустимым оператором SELECT, который возвращает соответствующие данные.В этом случае я получаю значения BusinessEntityID и имена пяти ведущих продавцов на основе BusinessEntityID. После оператора INSERT я запускаю оператор SELECT, чтобы подтвердить, что данные были вставлены в таблицу SalesStaff3, как показано в следующих результатах:
StaffID | FullName | Изменено Дата |
274 | Стивен Цзян | 21 сентября 2010, 08:15:48. 927 |
275 | Майкл Блайт | 21.09.2010 08:15: 48.927 |
276 | Линда Митчелл | 21.09.2010 08:15: 48.927 |
277 | Джиллиан Карсон | 21.09.2010 08:15: 48.927 |
278 | Гаррет Варгас | 21 сентября 2010, 08:15:48.927 |
Оператор SELECT, используемый в операторе INSERT, может ссылаться на общее табличное выражение (CTE), а также на таблицу или представление, если это CTE предшествует оператору INSERT (в отличие от того, чтобы быть частью самого оператора SELECT ). Например, в следующем примере я сначала определяю CTE, а затем определяю оператор INSERT, который извлекает данные из CTE с помощью оператора SELECT:
С cteSalesStaff (StaffID, FullName) AS ( SELECT BusinessEntityID, FirstName + '' + LastName AS FullName ИЗ отдела продаж. vSalesPerson ГДЕ BusinessEntityID МЕЖДУ 279 И 283 ) ВСТАВИТЬ SalesStaff3 (StaffID, FullName) SELECT StaffID, FullName FROM cteSalesStaff; ВЫБРАТЬ * ОТ SalesStaff3 ГДЕ StaffID МЕЖДУ 279 И 283; |
Обратите внимание, что CTE получает данные из представления vSalesPerson. Оператор SELECT в операторе INSERT затем извлекает содержимое CTE, как если бы он извлекал данные непосредственно из таблицы.Затем эти данные вставляются в таблицу SalesStaff3. Последний оператор SELECT подтверждает, что данные были добавлены, как показано в следующих результатах:
StaffID | FullName | Изменено Дата |
279 | Цви Рейтер | 2010-09-21 08: 26: 04.340 |
280 | Памела Ансман-Вулф | 21 сентября 2010 г. , 08:26:04.340 |
281 | Шу Ито | 2010-09-21 08: 26: 04.340 |
282 | Хосе Сараива | 2010-09-21 08: 26: 04.340 |
283 | Дэвид Кэмпбелл | 2010-09-21 08: 26: 04.340 |
Вместо использования оператора SELECT для извлечения данных вы можете вызвать хранимую процедуру в своем операторе INSERT.Например, следующая хранимая процедура spSalesStaff извлекает данные из представления vSalesPerson:
ЕГЭ AdventureWorks2008; ЕСЛИ OBJECT_ID ('spSalesStaff', 'P') НЕ ПУСТОЙ ПРОЦЕДУРА УДАЛЕНИЯ spSalesStaff; GO СОЗДАТЬ ПРОЦЕДУРУ spSalesStaff AS SELECT BusinessEntityID, FirstName + '' + LastName AS FullName FROM Sales. vSalesPerson ГДЕ BusinessEntityID МЕЖДУ 284 И 288; |
Затем я могу вызвать эту хранимую процедуру из оператора INSERT, как показано в следующем примере:
ВСТАВИТЬ SalesStaff3 (StaffID, FullName) EXEC spSalesStaff; ВЫБРАТЬ * ОТ SalesStaff3 ГДЕ StaffID МЕЖДУ 284 И 288; |
Обратите внимание, что вместо предложения VALUES или оператора SELECT я включил оператор EXECUTE (EXEC), который вызывает хранимую процедуру spSalesStaff.Когда я запускаю оператор INSERT, процедура выполняется, и возвращенные данные вставляются в таблицу SalesStaff3. Следующие результаты подтверждают, что данные были вставлены:
StaffID | FullName | Изменено Дата |
284 | Тете Менса-Аннан | 21 сентября 2010, 08:36:30. 207 |
285 | Сайед Аббас | 21.09.2010 08: 36: 30.207 |
286 | Линн Цофлиас | 21.09.2010 08: 36: 30.207 |
287 | Эми Альбертс | 21.09.2010 08: 36: 30.207 |
288 | Рэйчел Вальдес | 21 сентября 2010, 08:36:30.207 |
Как видите, вставка данных с помощью оператора SELECT или хранимой процедуры обеспечивает простой способ добавления нескольких строк в таблицу без необходимости явно определять каждое значение.
Начиная с SQL Server 2005, операторы DML поддерживают предложение OUTPUT, которое позволяет вывести измененную таблицу в другую таблицу или переменную. В случае оператора INSERT вы можете использовать предложение OUTPUT для отслеживания данных, которые вставляются в вашу таблицу.Например, следующий оператор INSERT использует предложение OUTPUT для вывода вставленных значений в табличную переменную:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 18 19 | DECLARE @InsertOutput TABLE ( StaffID INT, FullName VARCHAR (60) ); ВСТАВИТЬ В SalesStaff3 (StaffID, FullName) ВЫВОД ВСТАВЛЕН.StaffID, INSERTED.FullName INTO @InsertOutput SELECT BusinessEntityID, FirstName + '' + LastName AS FullName FROM Sales.vSalesPerson WHERE BusinessEntity>; ВЫБРАТЬ * ОТ SalesStaff3 ГДЕ StaffID> 288; ВЫБРАТЬ * ИЗ @InsertOutput; |
Сначала я объявляю переменную @InsertOutput и настраиваю ее с двумя столбцами: StaffID и FullName. Эти два столбца соответствуют тем же двум столбцам в таблице SalesStaff3, которые использовались в примерах в предыдущем разделе.
После объявления переменной я определяю оператор INSERT, который использует оператор SELECT для извлечения данных из представления vSalesPerson. Оператор INSERT также включает предложение OUTPUT, которое следует за предложением INSERT и списком столбцов. Предложение OUTPUT захватывает данные, вставленные в столбцы StaffID и FullName, и сохраняет их в переменной @InsertOutput.
ПРИМЕЧАНИЕ: Для полного обсуждения предложения OUTPUT см. Статью Simple-Talk «Реализация предложения OUTPUT в SQL Server 2008» (http://www.simple-talk.com/sql/learn-sql-server / реализация-предложение-вывода-в-sql-server-2008 /).
После оператора INSERT я включаю оператор SELECT, чтобы убедиться, что данные были вставлены в таблицу SalesStaff3. Оператор возвращает следующие результаты:
StaffID | FullName | Изменено Дата |
289 | Джэ Пак | 21.09.2010, 08:49:03.983 |
290 | Ранджит Варки Чудукатил | 21.09.2010 08:49: 03.983 |
Я также включаю второй оператор SELECT для извлечения содержимого @InsertOutput после того, как выведенные данные были сохранены в переменной. В следующей таблице показано содержимое переменной:
StaffID | FullName |
289 | Джэ Пак |
290 | Ранджит Варки Чудукатил |
Вот и все, что нужно для реализации предложения OUTPUT в вашем операторе INSERT.Фактически, это все, что нужно для работы с оператором INSERT. Однако обратите внимание, что оператор INSERT поддерживает несколько других функций.