📜  PostgreSQL插入

📅  最后修改于: 2020-11-30 08:38:28             🧑  作者: Mango

PostgreSQL插入

在本节中,我们将学习PostgreSQL的insert命令和示例,使用default关键字插入日期,并在PostgreSQL pgAdmin和SQL Shell(psql)中将数据从一个表插入到另一个表。

在PostgreSQL中,INSERT命令用于将新行插入表中。我们可以一次在特定表中插入单行或多行值。

PostgreSQL插入命令的语法

INSERT INTO TABLE_NAME 
(column1, 
column2, 
column3, ……columnN)  
VALUES (value1, value2, value3, ….. valueN);  

使用默认值关键字插入一条记录

如果我们使用默认值关键字插入一条记录,则INSERT命令的语法如下:

INSERT INTO table
(column1, column2, ... )
DEFAULT VALUES;

使用子选择插入多个记录

如果我们使用子选择插入多个记录,则Insert命令的语法如下:

INSERT INTO table_name
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_table
[WHERE conditions];

下表显示了插入表语法中使用的“参数”或“参数”:

Parameter Description
Table_name It is used to represent the existing table name.
column1, column2… columnN These are the names of the columns in the table where we want to insert data.
WHERE conditions It is an optional parameter and used in the third syntax. These are the conditions that must be occurred for the records to be inserted.
DEFAULT VALUES All columns will be defined with their default values. And it is used in the second syntax.
source_table It is used when we want to insert the data from another table. And it is used in the third syntax.
expression1 | DEFAULT, expression2 | DEFAULT These are the values allocated to the columns in the table.
If expression1 is specified, then column1 would be granted the value of expression1, column2 would be given the value of expression2, and so on.
If DEFAULT is specified, the consistent column will be occupied with its default value. And it is used in the first syntax.

注意

  • 如果要使用PostgreSQL insert命令将记录插入表中,则必须提供每个NOT NULL列值。
  • 如果该列允许使用NULL值,则可以忽略PostgreSQL插入命令中的一列。

输出量

下表显示了输出消息及其含义:

Output message Description
INSERT Oid 1 If only one row was inserted and Oid is the numeric OID of the inserted row.
INSERT 0 # This message will come if more than one row was inserted, and # is the number of rows inserted.

PostgreSQL插入命令

我们可以通过两种方式执行PostgreSQL插入命令:

  • 使用UI的PostgreSQL插入语句(pgAdmin)
  • 使用SQL Shell的PostgreSQL插入语句

使用UI的PostgreSQL插入语句

让我们来看一个示例,看看如何在表中插入值。在这里,我们有一个名为Student的表。

范例1:VALUES关键字

为了创建一个PostgreSQL INSERT命令列出这些值,我们将使用VALUES关键字。

要在“学生”表中插入值,我们将遵循以下步骤:

步骤1

  • 首先,我们将选择“学生”表,然后右键单击它,然后从给定列表中选择“脚本”选项,然后从另一个列表中单击“插入脚本”选项,如下面的屏幕快照所示:

第2步

  • 单击“插入脚本”后,屏幕上将出现以下窗口:

第三步

  • 现在,我们将值插入到“?”的位置然后单击执行/刷新按钮以执行特定命令,并将记录添加到Student表中。
INSERT INTO myschema."Student"(
"St_id", "St_Name", "St_age", "St_address", "St_blood_group")
VALUES(101, 'John', 24, 'New York', 'A+')
(102, 'Mike', 22, 'Chicago', 'B-'),
(103, 'Emily', 24, 'Boston', 'A-'),
(104, 'James', 20, 'Philadelphia', 'O+'),
(105, 'Sophia', 21, 'New York', 'B+');

PgAdmin4中的SQL查询

在下面的屏幕截图中,我们可以在pgAdmin4中看到以上命令:

表结构/输出

执行Insert命令后,我们可以通过单击view table选项查看Student表的输出,如下面的屏幕快照所示:

例2

首先,我们将创建一个新表以了解PostgreSQL中insert命令的用法。

注意:我们也可以参考下面的链接在PostgreSQL中创建一个新表。

https://www.javatpoint.com/postgresql-create-table

现在,我们将在以下命令的帮助下创建一个部门表:

CREATE TABLE department (
dept_ID serial PRIMARY KEY,
Dept_name VARCHAR (255) NOT NULL,
description VARCHAR (255),
location VARCHAR(50)
);

执行完上述命令后,我们将获得以下消息,表明创建了部门表:

示例:在表中插入单行值

以下命令用于将dept_name位置值插入到Department表中:

INSERT INTO department (dept_name, location)
VALUES ('RESEARCH', 'Newyork');

我们可以使用SELECT命令检查特定表中的插入行:

SELECT * FROM department;

输出量

一旦执行了上面的select命令,我们将得到以下输出:

如果要插入字符数据,必须将其括在单引号(')中

例如,'RESEARCH'

PostgreSQL反复为serial列提供值;因此,不需要在串行列中插入值。

示例:使用子选择插入多行

在这里,我们将使用子选择将各个行的值插入到特定表中。

例如:在以下命令中,我们将在dept_name部门表的位置列中插入多行:

INSERT INTO department (dept_name, location)
VALUES ('ACCOUNTING', 'Boston'),
('OPERATIONS','Florida'),
('SALES','Chicago');

一旦执行了上述命令,我们将收到以下消息,即三个值已插入dept_nameDepartment表的location列中:

我们可以借助SELECT命令来检查特定表中的插入行:

SELECT * FROM department;

输出量

一旦执行了上面的select命令,我们将获得以下输出:

示例:使用Default关键字将日期插入表中

首先,我们将在部门表中添加一个名为last_update的新列,并将其默认值设置为current_date,如下面的命令所示:

ALTER TABLE department ADD COLUMN last_update Date;
ALTER TABLE department ALTER COLUMN last_update
SET DEFAULT CURRENT_DATE;

执行上述命令后,更改了Department表,并创建了last_column。

以下命令用于在部门表中插入新行以定义日期。

注意:在PostgreSQL中,日期格式为YYYY-MM-DD。

INSERT INTO department ( Dept_name, last_update)
VALUES ('FINANCE','2020-07-02');

输出量

执行上述命令后,我们将获得消息窗口:

为日期列或任何其他列设置默认值,我们还可以使用DEFAULT关键字,如下面的命令所示:

INSERT INTO department (Dept_name, last_update)
VALUES('HR',DEFAULT);

输出量

执行上述命令后,我们将获得以下消息窗口,其中特定值已插入到Department表中:

要检查部门表中插入的记录,我们将使用SELECT命令:

Select * from department;

输出量

执行上面的命令后,我们将得到以下结果:

示例:从另一个表插入数据

要从另一个表插入数据,我们将按照以下步骤操作:

步骤1

首先,我们创建另一个名为department_tmp的表,该表具有类似于Department表的表结构:

CREATE TABLE department_tmp (LIKE department);

在执行上述命令后,创建了department_tmp:

第2步

创建表后,将插入部门表中日期列的值不为NULL的行:

INSERT INTO department_tmp 
SELECT *
FROM
department
WHERE
last_update IS NOT NULL;

输出量

执行完上述命令后,我们将获得以下消息窗口,该窗口显示特定值已成功插入。

第三步

之后,我们将使用department_tmp表中的SELECT命令检查插入操作:

SELECT * FROM department_tmp;

输出量

执行完以上命令后,我们将得到以下输出:

如果要从部门表中获取最后插入的dept_id ,我们将执行以下过程:

将新行插入insert命令后,我们将使用RETURNING子句,这是PostgreSQL的SQL扩展。

以下命令在部门表中插入新行,并返回最后插入的Dept_id:

INSERT INTO department (dept_name, last_update)
VALUES('IT',DEFAULT)
RETURNING Dept_id;

输出量

一旦执行了以上命令,我们将获得Dept_id = 7。

之后,我们将使用Select命令来检查dept_id是否正确。

Select * from department;

输出量

一旦执行Select命令,我们可以看到,一旦创建了customer表,我们将在以下命令的帮助下将一行插入到Customer表中:Dept_id与Department表中最后插入的Dept_ id相匹配。

PostgreSQL使用psql的插入命令

在SQL Shell(psql)中,我们将首先使用以下命令在javatpoint数据库中创建一个名为Customer表的表:

CREATE TABLE Customer(
Cust_Id INT PRIMARY KEY NOT NULL,
Cust_Name TEXT NOT NULL,  
Cust_Address CHAR(30), 
Cust_Age INT NOT NULL Unique
);

创建客户表后,将在以下命令的帮助下将单行插入到客户表中:

insert into customer (Cust_Id ,cust_name, Cust_address,Cust_age)  
values(101, 'john', 'boston',22);

之后,我们将在特定表中插入多行,如下面的命令所示:

INSERT INTO Customer
(Cust_Id ,cust_name, Cust_address,Cust_age) 
VALUES (102, 'mike', 'newyork',24),
(103,'emily', 'newyork',23), 
 (104, 'harvey', 'florida',26);

我们将使用SELECT命令来检查是否在Customer表中插入了上述值。

Select* from customer;

输出量

执行完以上命令后,我们将得到以下输出: