SQL INSERT查询
SQL INSERT INTO语句
SQL INSERT INTO语句 用于向数据库表中添加新的数据行。几乎所有的关系数据库管理系统都提供这个SQL查询来添加记录到数据库表中。
使用此语句插入表中的记录时,每个值都应该与相应列的数据类型相同,并满足列的约束条件(如果有)。使用插入语句传递的值应该与表中的列数相匹配,或者与当前查询中指定的列数相匹配。如果不满足这些条件之一,该语句将生成错误。
语法
SQL INSERT INTO语句 有两种基本语法,如下所示。
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
在这里,column1, column2, column3, … columnN是你想要插入数据的表的列名。
还有一种INSERT INTO语句的语法,你可以只指定列值而不指定列名。但是,请确保值的顺序与表中的列顺序相同。
以下是SQL INSERT查询的第二种语法-
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
示例
要查看示例,让我们使用CREATE TABLE语句在MySQL数据库中创建一个名为 CUSTOMERS 的表,如下所示-
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
以下SQL INSERT INTO语句将在空的CUSTOMERS表中创建三条记录。
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
我们还可以使用以下查询一次插入 多行 ,如下所示:
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 );
以下查询使用第二种语法在 CUSTOMERS 表中添加了另一条记录,如下所示−
INSERT INTO CUSTOMERS VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );
验证
要检查记录是否插入到CUSTOMERS表中,请使用SELECT查询-
SELECT * FROM CUSTOMERS;
表格将显示其中包含的所有记录。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
插入数据时使用另一个表
有时候,你只需要将一个现有表中的数据复制到同一个数据库中的另一个表中。SQL提供了方便的方法来实现这一点 –
- 使用INSERT…SELECT
- 使用INSERT…TABLE
INSERT…SELECT语句
您可以通过select语句将数据填充到表中,使用已经存在的另一个表;前提是另一个表有一组字段,这些字段是用来填充第一个表的。
以下是语法 –
INSERT INTO first_table_name [(column1, column2, ... columnN)]
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];
示例
以下语句将创建另一个名为 BUYERS 的表,其结构与CUSTOMERS表相同:
CREATE TABLE BUYERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在使用INSERT… INTO语句,让我们将 CUSTOMERS 表中的所有记录插入到 BUYERS 表中。
INSERT INTO BUYERS (ID, NAME, AGE, ADDRESS, SALARY) SELECT * FROM CUSTOMERS;
输出
输出将会显示为 –
Query OK, 7 rows affected (0.07 sec)
Records: 7 Duplicates: 0 Warnings: 0
验证
要验证记录是否被正确插入,请使用以下SELECT查询:
SELECT * FROM BUYERS;
表格将显示与“Customers”相同的记录-
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
INSERT… TABLE 语句
如果你有两个结构完全相同的表,那么你可以使用 INSERT…TABLE 语句将一个表的内容插入到另一个表中,而不需要选择特定的列。
以下是该语法:
INSERT INTO first_table_name TABLE second_table_name;
示例
在这个例子中,让我们使用前面例子中创建的相同的CUSTOMERS表,并将其内容复制到另一个名为SHOPPERS的表中。为此,让我们创建具有与CUSTOMERS表相同结构的表SHOPPERS。
CREATE TABLE SHOPPERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在使用以下语句将 CUSTOMERS 表中的所有记录插入到 SHOPPERS 表中 –
INSERT INTO SHOPPERS TABLE CUSTOMERS;
输出
此查询将生成以下输出 –
Query OK, 7 rows affected (0.13 sec)
Records: 7 Duplicates: 0 Warnings: 0
验证
如果你使用下面显示的SELECT语句验证SHOPPERS表的内容 –
SELECT * FROM SHOPPERS;
表格将显示新插入的值,如下所示 –
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
只在指定列中插入数据
你可以从一个表中选择特定的列插入到另一个表中。以下SQL语句将从CUSTOMERS表中的”ID”、”NAME”和”AGE”插入一条新记录到BUYERS表中。
我们只能跳过未定义为NOT NULL的字段,但是如果我们将一列定义为NOT NULL,那么我们必须为该列提供一个值,否则将引发错误并且记录不会被插入。
在继续之前,让我们按照以下方式清除BUYERS表中的所有记录:
DELETE FROM BUYERS;
现在我们有一个空的BUYERS表,让我们使用以下SQL语句:
INSERT INTO BUYERS (ID, NAME, AGE) SELECT ID, NAME, AGE FROM CUSTOMERS;
输出结果
这个查询将生成以下输出结果−
Query OK, 7 rows affected (0.13 sec)
Records: 7 Duplicates: 0 Warnings: 0
验证
如果使用下面显示的SELECT语句验证BUYERS表的内容 –
SELECT * FROM BUYERS;
表格将显示为新插入的值如下 –
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | ||
2 | Khilan | 25 | ||
3 | kaushik | 23 | ||
4 | Chaitali | 25 | ||
5 | Hardik | 27 | ||
6 | Komal | 22 | ||
7 | Muffy | 24 |