Основы t-sql. dml
Содержание:
- Инструкция INSERT в T-SQL
- SQL Справочник
- Инструкция INSERT в T-SQL
- Summary
- Insert Data Only in Specified Columns
- SQL Учебник
- SQL References
- Insert Multiple Records
- Добавление данных. Команда Insert
- Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
- Использование SELECT в инструкции INSERT INTO
- Insert Into Table
- INSERT INTO SELECT
- Insert Data Only in Specified Columns
- Get Inserted ID
- Demo Database
- Demo Database
Инструкция INSERT в T-SQL
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
- Перечисление конкретных значений для вставки;
- Указание набора данных в виде запроса SELECT;
- Указание набора данных в виде вызова процедуры, которая возвращает табличные данные.
Упрощённый синтаксис
   
   INSERT   (список столбцов, …)
        VALUES (список значений, …)
          Или
        SELECT запрос на выборку
          Или
        EXECUTE процедура
Где,
- INSERT INTO – это команда добавления данных в таблицу;
- Таблица – это имя целевой таблицы, в которую необходимо вставить новые записи;
- Список столбцов – это перечень имен столбцов таблицы, в которую будут вставлены данные, разделенные запятыми;
- VALUES – это конструктор табличных значений, с помощью которого мы указываем значения, которые будем вставлять в таблицу;
- Список значений – это значения, которые будут вставлены, разделенные запятыми. Они перечисляются в том порядке, в котором указаны столбцы в списке столбцов;
- SELECT – это запрос на выборку данных для вставки в таблицу. Результирующий набор данных, который вернет запрос, должен соответствовать списку столбцов;
- EXECUTE – это вызов процедуры на получение данных для вставки в таблицу. Результирующий набор данных, который вернет хранимая процедура, должен соответствовать списку столбцов.
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
SQL Справочник
SQL Ключевые слова
  ADD
  ADD CONSTRAINT
  ALTER
  ALTER COLUMN
  ALTER TABLE
  ALL
  AND
  ANY
  AS
  ASC
  BACKUP DATABASE
  BETWEEN
  CASE
  CHECK
  COLUMN
  CONSTRAINT
  CREATE
  CREATE DATABASE
  CREATE INDEX
  CREATE OR REPLACE VIEW
  CREATE TABLE
  CREATE PROCEDURE
  CREATE UNIQUE INDEX
  CREATE VIEW
  DATABASE
  DEFAULT
  DELETE
  DESC
  DISTINCT
  DROP
  DROP COLUMN
  DROP CONSTRAINT
  DROP DATABASE
  DROP DEFAULT
  DROP INDEX
  DROP TABLE
  DROP VIEW
  EXEC
  EXISTS
  FOREIGN KEY
  FROM
  FULL OUTER JOIN
  GROUP BY
  HAVING
  IN
  INDEX
  INNER JOIN
  INSERT INTO
  INSERT INTO SELECT
  IS NULL
  IS NOT NULL
  JOIN
  LEFT JOIN
  LIKE
  LIMIT
  NOT
  NOT NULL
  OR
  ORDER BY
  OUTER JOIN
  PRIMARY KEY
  PROCEDURE
  RIGHT JOIN
  ROWNUM
  SELECT
  SELECT DISTINCT
  SELECT INTO
  SELECT TOP
  SET
  TABLE
  TOP
  TRUNCATE TABLE
  UNION
  UNION ALL
  UNIQUE
  UPDATE
  VALUES
  VIEW
  WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
Инструкция INSERT в T-SQL
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
- Перечисление конкретных значений для вставки;
- Указание набора данных в виде запроса SELECT;
- Указание набора данных в виде вызова процедуры, которая возвращает табличные данные.
Упрощённый синтаксис
- INSERT INTO – это команда добавления данных в таблицу;
- Таблица – это имя целевой таблицы, в которую необходимо вставить новые записи;
- Список столбцов – это перечень имен столбцов таблицы, в которую будут вставлены данные, разделенные запятыми;
- VALUES – это конструктор табличных значений, с помощью которого мы указываем значения, которые будем вставлять в таблицу;
- Список значений – это значения, которые будут вставлены, разделенные запятыми. Они перечисляются в том порядке, в котором указаны столбцы в списке столбцов;
- SELECT – это запрос на выборку данных для вставки в таблицу. Результирующий набор данных, который вернет запрос, должен соответствовать списку столбцов;
- EXECUTE – это вызов процедуры на получение данных для вставки в таблицу. Результирующий набор данных, который вернет хранимая процедура, должен соответствовать списку столбцов.
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
Summary
There are a variety of ways of managing data to insert into SQL Server. How we generate and insert data into tables can have a profound impact on performance and maintainability! This topic is often overlooked as a beginner’s consideration, but mistakes in how we grow objects can create massive headaches for future developers and administrators.
In this article we will explore the different ways we can create and insert data into both permanent and temporary objects. Performance, syntax, documentation, and maintainability will be evaluated for each method. By delving deeper into this topic, we can improve database design, script quality, and build objects that are easier to upkeep and less likely to break due to maintenance or software releases.
Insert Data Only in Specified Columns
It is also possible to only insert data in specific columns.
The following SQL statement will insert a new record, but only insert data in the «CustomerName»,
«City», and «Country» columns (CustomerID will
be updated automatically):
Example
INSERT INTO Customers (CustomerName, City, Country)
VALUES (‘Cardinal’, ‘Stavanger’, ‘Norway’);
The selection from the «Customers» table will now look like this:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country | 
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 — 14th Ave. S. Suite 3B | Seattle | 98128 | USA | 
| 90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland | 
| 91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland | 
| 92 | Cardinal | null | null | Stavanger | null | Norway | 
❮ Previous
  Next ❯
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
SQL References
SQL Keywords
  ADD
  ADD CONSTRAINT
  ALTER
  ALTER COLUMN
  ALTER TABLE
  ALL
  AND
  ANY
  AS
  ASC
  BACKUP DATABASE
  BETWEEN
  CASE
  CHECK
  COLUMN
  CONSTRAINT
  CREATE
  CREATE DATABASE
  CREATE INDEX
  CREATE OR REPLACE VIEW
  CREATE TABLE
  CREATE PROCEDURE
  CREATE UNIQUE INDEX
  CREATE VIEW
  DATABASE
  DEFAULT
  DELETE
  DESC
  DISTINCT
  DROP
  DROP COLUMN
  DROP CONSTRAINT
  DROP DATABASE
  DROP DEFAULT
  DROP INDEX
  DROP TABLE
  DROP VIEW
  EXEC
  EXISTS
  FOREIGN KEY
  FROM
  FULL OUTER JOIN
  GROUP BY
  HAVING
  IN
  INDEX
  INNER JOIN
  INSERT INTO
  INSERT INTO SELECT
  IS NULL
  IS NOT NULL
  JOIN
  LEFT JOIN
  LIKE
  LIMIT
  NOT
  NOT NULL
  OR
  ORDER BY
  OUTER JOIN
  PRIMARY KEY
  PROCEDURE
  RIGHT JOIN
  ROWNUM
  SELECT
  SELECT DISTINCT
  SELECT INTO
  SELECT TOP
  SET
  TABLE
  TOP
  TRUNCATE TABLE
  UNION
  UNION ALL
  UNIQUE
  UPDATE
  VALUES
  VIEW
  WHERE
MySQL Functions
  String Functions
  ASCII
  CHAR_LENGTH
  CHARACTER_LENGTH
  CONCAT
  CONCAT_WS
  FIELD
  FIND_IN_SET
  FORMAT
  INSERT
  INSTR
  LCASE
  LEFT
  LENGTH
  LOCATE
  LOWER
  LPAD
  LTRIM
  MID
  POSITION
  REPEAT
  REPLACE
  REVERSE
  RIGHT
  RPAD
  RTRIM
  SPACE
  STRCMP
  SUBSTR
  SUBSTRING
  SUBSTRING_INDEX
  TRIM
  UCASE
  UPPER
Numeric Functions
  ABS
  ACOS
  ASIN
  ATAN
  ATAN2
  AVG
  CEIL
  CEILING
  COS
  COT
  COUNT
  DEGREES
  DIV
  EXP
  FLOOR
  GREATEST
  LEAST
  LN
  LOG
  LOG10
  LOG2
  MAX
  MIN
  MOD
  PI
  POW
  POWER
  RADIANS
  RAND
  ROUND
  SIGN
  SIN
  SQRT
  SUM
  TAN
  TRUNCATE
Date Functions
  ADDDATE
  ADDTIME
  CURDATE
  CURRENT_DATE
  CURRENT_TIME
  CURRENT_TIMESTAMP
  CURTIME
  DATE
  DATEDIFF
  DATE_ADD
  DATE_FORMAT
  DATE_SUB
  DAY
  DAYNAME
  DAYOFMONTH
  DAYOFWEEK
  DAYOFYEAR
  EXTRACT
  FROM_DAYS
  HOUR
  LAST_DAY
  LOCALTIME
  LOCALTIMESTAMP
  MAKEDATE
  MAKETIME
  MICROSECOND
  MINUTE
  MONTH
  MONTHNAME
  NOW
  PERIOD_ADD
  PERIOD_DIFF
  QUARTER
  SECOND
  SEC_TO_TIME
  STR_TO_DATE
  SUBDATE
  SUBTIME
  SYSDATE
  TIME
  TIME_FORMAT
  TIME_TO_SEC
  TIMEDIFF
  TIMESTAMP
  TO_DAYS
  WEEK
  WEEKDAY
  WEEKOFYEAR
  YEAR
  YEARWEEK
Advanced Functions
  BIN
  BINARY
  CASE
  CAST
  COALESCE
  CONNECTION_ID
  CONV
  CONVERT
  CURRENT_USER
  DATABASE
  IF
  IFNULL
  ISNULL
  LAST_INSERT_ID
  NULLIF
  SESSION_USER
  SYSTEM_USER
  USER
  VERSION
SQL Server Functions
  String Functions
  ASCII
  CHAR
  CHARINDEX
  CONCAT
  Concat with +
  CONCAT_WS
  DATALENGTH
  DIFFERENCE
  FORMAT
  LEFT
  LEN
  LOWER
  LTRIM
  NCHAR
  PATINDEX
  QUOTENAME
  REPLACE
  REPLICATE
  REVERSE
  RIGHT
  RTRIM
  SOUNDEX
  SPACE
  STR
  STUFF
  SUBSTRING
  TRANSLATE
  TRIM
  UNICODE
  UPPER
Numeric Functions
  ABS
  ACOS
  ASIN
  ATAN
  ATN2
  AVG
  CEILING
  COUNT
  COS
  COT
  DEGREES
  EXP
  FLOOR
  LOG
  LOG10
  MAX
  MIN
  PI
  POWER
  RADIANS
  RAND
  ROUND
  SIGN
  SIN
  SQRT
  SQUARE
  SUM
  TAN
Date Functions
  CURRENT_TIMESTAMP
  DATEADD
  DATEDIFF
  DATEFROMPARTS
  DATENAME
  DATEPART
  DAY
  GETDATE
  GETUTCDATE
  ISDATE
  MONTH
  SYSDATETIME
  YEAR
Advanced Functions
  CAST
  COALESCE
  CONVERT
  CURRENT_USER
  IIF
  ISNULL
  ISNUMERIC
  NULLIF
  SESSION_USER
  SESSIONPROPERTY
  SYSTEM_USER
  USER_NAME
MS Access Functions
  String Functions
  Asc
  Chr
  Concat with &
  CurDir
  Format
  InStr
  InstrRev
  LCase
  Left
  Len
  LTrim
  Mid
  Replace
  Right
  RTrim
  Space
  Split
  Str
  StrComp
  StrConv
  StrReverse
  Trim
  UCase
Numeric Functions
  Abs
  Atn
  Avg
  Cos
  Count
  Exp
  Fix
  Format
  Int
  Max
  Min
  Randomize
  Rnd
  Round
  Sgn
  Sqr
  Sum
  Val
Date Functions
  Date
  DateAdd
  DateDiff
  DatePart
  DateSerial
  DateValue
  Day
  Format
  Hour
  Minute
  Month
  MonthName
  Now
  Second
  Time
  TimeSerial
  TimeValue
  Weekday
  WeekdayName
  Year
Other Functions
  CurrentUser
  Environ
  IsDate
  IsNull
  IsNumeric
SQL Quick Ref
Insert Multiple Records
To insert more than one record, make an array containing the values, and
insert a question mark in the sql, which will be replaced by the value array:
Example
Fill the «customers» table with data:
  var mysql = require(‘mysql’);var con = mysql.createConnection({ 
  host: «localhost»,  user: «yourusername», 
  password: «yourpassword»,  database: «mydb»});
  con.connect(function(err) {  if (err) throw err; 
  console.log(«Connected!»);  var sql = «INSERT INTO customers (name,
  address) VALUES ?»;  var values = ,    ,   
  ,    ,   
  ,    ,   
  ,    ,   
  ,    ,   
  ,    ,   
  ,     
  ];  con.query(sql, , function (err, result)
  {    if (err) throw err;    console.log(«Number
  of records inserted: » + result.affectedRows);  });});
Save the code above in a file called «demo_db_insert_multple.js», and run the file:
Run «demo_db_insert_multiple.js»
C:\Users\Your Name>node demo_db_insert_multiple.js
Which will give you this result:
Connected!Number of records inserted: 14
Добавление данных. Команда Insert
Последнее обновление: 13.07.2017
Для добавления данных применяется команда INSERT, которая имеет следующий формальный синтаксис:
INSERT имя_таблицы VALUES (значение1, значение2, ... значениеN)
Вначале идет выражение INSERT INTO, затем в скобках можно указать список столбцов через запятую, в которые надо добавлять данные, и
в конце после слова VALUES скобках перечисляют добавляемые для столбцов значения.
Например, пусть ранее была создана следующая база данных:
CREATE DATABASE productsdb; GO USE productsdb; CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL )
Добавим в нее одну строку с помощью команды INSERT:
INSERT Products VALUES ('iPhone 7', 'Apple', 5, 52000)
После удачного выполнения в SQL Server Management Studio в поле сообщений должно появиться сообщение «1 row(s) affected»:
Стоит учитывать, что значения для столбцов в скобках после ключевого слова VALUES передаются по порядку их объявления. Например, в выражении
CREATE TABLE выше можно увидеть, что первым столбцом идет Id. Но так как для него задан атрибут IDENTITY, то значение этого столбца автоматически генерируется, и его можно не указывать.
Второй столбец представляет ProductName, поэтому первое значение — строка «iPhone 7» будет передано именно этому столбцу.
Второе значение — строка «Apple» будет передана третьему столбцу Manufacturer и так далее. То есть значения передаются столбцам
следующим образом:
- 
ProductName: ‘iPhone 7’ 
- 
Manufacturer: ‘Apple’ 
- 
ProductCount: 5 
- 
Price: 52000 
Также при вводе значений можно указать непосредственные столбцы, в которые будут добавляться значения:
INSERT INTO Products (ProductName, Price, Manufacturer) 
VALUES ('iPhone 6S', 41000, 'Apple')
Здесь значение указывается только для трех столбцов. Причем теперь значения передаются в порядке следования столбцов:
- 
ProductName: ‘iPhone 6S’ 
- 
Manufacturer: ‘Apple’ 
- 
Price: 41000 
Для неуказанных столбцов (в данном случае ProductCount) будет добавляться значение по умолчанию, если задан атрибут DEFAULT, или
значение NULL. При этом неуказанные столбцы должны допускать значение NULL или иметь атрибут DEFAULT.
Также мы можем добавить сразу несколько строк:
INSERT INTO Products 
VALUES 
('iPhone 6', 'Apple', 3, 36000),
('Galaxy S8', 'Samsung', 2, 46000),
('Galaxy S8 Plus', 'Samsung', 1, 56000)
В данном случае в таблицу будут добавлены три строки.
Также при добавлении мы можем указать, чтобы для столбца использовалось значение по умолчанию с помощью ключевого слова DEFAULT или значение NULL:
INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price)
VALUES ('Mi6', 'Xiaomi', DEFAULT, 28000)
В данном случае для столбца ProductCount будет использовано значение по умолчанию (если оно установлено, если его нет — то NULL).
Если все столбцы имеют атрибут DEFAULT, определяющий значение по умолчанию, или допускают значение NULL, то можно для всех столбцов вставить
значения по умолчанию:
INSERT INTO Products DEFAULT VALUES
Но если брать таблицу Products, то подобная команда завершится с ошибкой, так как несколько полей не имеют атрибута DEFAULT и при этом не допускают значение NULL.
НазадВперед
Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
Очень часто возникает необходимость добавлять много данных в таблицу, например, на основе запроса на выборку, т.е. SELECT. Для этого вместо VALUES нам всего лишь нужно указать запрос.
 
В данном примере мы написали запрос SELECT, который возвращает данные из таблицы TestTable, но не все, а только те, у которых идентификатор больше 2. А результат вставили все в ту же таблицу TestTable.
В качестве примера того, как можно добавлять записи в таблицу без указания списка столбцов, давайте напишем еще один запрос на вставку данных, который сделает равно то же самое что и запрос выше, только в нем не будет перечисления столбцов для вставки.
 
В данном случае мы уверены в том, что в таблице TestTable первый столбец это ProductName, а второй Price, поэтому мы можем позволить себе написать именно так. Но, снова повторюсь, на практике лучше указывать список столбцов.
Если Вы заметили, я во всех примерах не указывал столбец Id, а он у нас есть, ошибки не возникло, так как данный столбец со свойством IDENTITY, он автоматически генерирует идентификаторы, поэтому в такой столбец вставить данные просто не получится.
Использование SELECT в инструкции INSERT INTO
Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.
Использование этого оператора аналогично использованию INSERT INTO. Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT:
Вставка всех столбцов таблицы: можно скопировать все данные таблицы и вставить их в другую таблицу.
Синтаксис:
INSERT INTO первая_таблица SELECT * FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы.
Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.
Вставка отдельных столбцов таблицы. Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.
Синтаксис:
INSERT INTO первая_таблица(имена_столбцов1) SELECT имена_столбцов2 FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы. имена_столбцов1: имена столбцов, разделенные запятой(,) для таблицы 1. имена_столбцов2: имена столбцов, разделенные запятой(,) для таблицы 2.
Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию INSERT INTO MySQL SELECT для их вставки в первую таблицу.
Копирование определенных строк из таблицы. Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия WHERE с оператором SELECT. В этом случае нужно использовать соответствующее условие в WHERE.
Синтаксис:
INSERT INTO таблица1 SELECT * FROM таблица2 WHERE условие; таблица1: имя первой таблицы. таблица2: имя второй таблицы. условие: условие для выбора строк.
Таблица 2: LateralStudent
| ROLL_NO | NAME | ADDRESS | PHONE | Age | 
| 7 | SOUVIK | DUMDUM | 9876543210 | 18 | 
| 8 | NIRAJ | NOIDA | 9786543210 | 19 | 
| 9 | SOMESH | ROHTAK | 9687543210 | 20 | 
Запросы:
Способ 1 (вставка всех строк и столбцов):
INSERT INTO Student SELECT * FROM LateralStudent;
Результат:
Этот запрос вставит все данные таблицы LateralStudent в таблицу Student. После применения INSERT INTO SQL 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 (вставка отдельных столбцов):
INSERT INTO Student(ROLL_NO,NAME,Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;
Результат:
Этот запрос вставит данные из столбцов ROLL_NO, NAME и Age таблицы LateralStudent в таблицу Student. Для остальных столбцов таблицы Student будет задано значение null. После применения SQL 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 | Null | null | 18 | 
| 8 | NIRAJ | Null | null | 19 | 
| 9 | SOMESH | Null | null | 20 | 
Выбор определенных строк для вставки:
INSERT INTO Student SELECT * FROM LateralStudent WHERE Age = 18;
Результат:
Этот запрос выберет только первую строку из таблицы 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 | 
Insert Into Table
To fill a table in MySQL, use the «INSERT INTO» statement.
Example
Insert a record in the «customers» table:
  var mysql = require(‘mysql’);var con = mysql.createConnection({ 
  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,
    database: «mydb»
  });con.connect(function(err) {  if (err) throw err;  console.log(«Connected!»);  var sql = «INSERT INTO customers (name, address)
  VALUES (‘Company Inc’, ‘Highway 37’)»; 
  con.query(sql, function (err, result) {    if (err) throw err;    console.log(«1 record inserted»);  });});
Save the code above in a file called «demo_db_insert.js», and run the file:
Run «demo_db_insert.js»
C:\Users\Your Name>node demo_db_insert.js
Which will give you this result:
Connected!1 record inserted
INSERT INTO SELECT
The  command copies data
from one table and inserts it into another table.
The following SQL copies «Suppliers» into «Customers» (the columns
that are not filled with data, will contain NULL):
Example
 INSERT INTO Customers (CustomerName,
  City, Country)
 SELECT SupplierName, City, Country FROM Suppliers;
The following SQL copies «Suppliers» into «Customers» (fill all
columns):
Example
  INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
  Country)SELECT SupplierName, ContactName, Address, City, PostalCode,
  Country FROM Suppliers;
The following SQL copies only the German suppliers into «Customers»:
Example
 INSERT INTO Customers (CustomerName,
  City, Country)
 SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’;
Insert Data Only in Specified Columns
It is also possible to only insert data in specific columns.
The following SQL statement will insert a new record, but only insert data in the «CustomerName»,
«City», and «Country» columns (CustomerID will
be updated automatically):
Example
INSERT INTO Customers (CustomerName, City, Country)
VALUES (‘Cardinal’, ‘Stavanger’, ‘Norway’);
The selection from the «Customers» table will now look like this:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country | 
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 — 14th Ave. S. Suite 3B | Seattle | 98128 | USA | 
| 90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland | 
| 91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland | 
| 92 | Cardinal | null | null | Stavanger | null | Norway | 
❮ Previous
  Next ❯
Get Inserted ID
For tables with an auto increment id field, you can get the id of the row you
just inserted by asking the result object.
Note: To be able to get the inserted id, only one row can be inserted.
Example
Insert a record in the «customers» table, and return the ID:
  var mysql = require(‘mysql’);var con = mysql.createConnection({ 
  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,
    database: «mydb»
  });con.connect(function(err) {  if (err) throw err;  var sql = «INSERT INTO customers (name, address)
  VALUES (‘Michelle’, ‘Blue Village 1’)»; 
  con.query(sql, function (err, result) {    if (err) throw err;    console.log(«1 record inserted,
  ID: » + result.insertId);  });});
Save the code above in a file called «demo_db_insert_id.js», and run the file:
Run «demo_db_insert_id.js»
C:\Users\Your Name>node demo_db_insert_id.js
Which will give you something like this in return:
1 record inserted, ID: 15
❮ Previous
Next ❯
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the «Customers» table:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country | 
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany | 
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico | 
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico | 
And a selection from the «Suppliers» table:
| SupplierID | SupplierName | ContactName | Address | City | Postal Code | Country | 
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK | 
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA | 
| 3 | Grandma Kelly’s Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA | 
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the «Customers» table:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country | 
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany | 
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico | 
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico | 
And a selection from the «Suppliers» table:
| SupplierID | SupplierName | ContactName | Address | City | Postal Code | Country | 
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK | 
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA | 
| 3 | Grandma Kelly’s Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA | 
 
							 
							 
							 
							 
							 
							 
							 
							 
							