PostgreSQL 插入


PostgreSQL 插入

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

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

PostgreSQL 插入命令的语法

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

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

如果我们使用 default values 关键字插入单个记录,则INSERT 命令的语法如下:

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

使用子选择插入多条记录

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

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

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

范围 描述
表名 它用于表示现有的表名。
第 1 列、第 2 列…第 N 列 这些是表中我们要插入数据的列的名称。
WHERE 条件 它是一个可选参数,用于第三种语法。这些是插入记录必须发生的条件。
默认值 所有列都将使用其默认值进行定义。它用于第二种语法。
源表 当我们想从另一个表插入数据时使用它。它用于第三种语法。
表达式1 \ 默认,表达式 2 \ 默认 这些是分配给表中列的值。 如果指定了expression1,则column1将被赋予expression1的值,column2将被赋予 expression2 的值,依此类推。 如果指定了DEFAULT,则一致性列将被其默认值占用。它用于第一种语法。

**笔记

  • 如果我们使用PostgreSQL insert命令将记录插入到表中,我们必须提供每个NOT NULL列值。
  • 如果列允许 NULL 值,我们可以忽略来自 PostgreSQL 插入命令的列。

输出

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

输出消息 描述
插入 Oid 1 如果只插入了一行并且 Oid 是插入行的数字 OID。
插入 0 # 如果插入了多行,则会出现此消息,#是插入的行数。

PostgreSQL 插入命令

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

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

使用 UI 的 PostgreSQL 插入语句

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

示例 1:VALUES 关键字

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

PostgreSQL 插入

要在Student\表中插入值,我们将按照以下步骤操作:

步骤1

  • 首先,我们将选择Student 表,然后右键单击它,然后从给定的列表中选择Script选项,然后从另一个列表中单击INSERT Script选项,如下面的屏幕截图所示:

PostgreSQL 插入

第2步

  • 一旦我们点击Insert Script,下面的窗口就会出现在屏幕上:

PostgreSQL 插入

Step3

  • 现在,我们在'?'的位置插入值。然后单击执行/刷新按钮以执行特定命令,并将记录添加到学生\表中。
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 中看到上面的命令:

PostgreSQL 插入

表结构/输出

执行插入命令后,我们可以通过单击查看表选项来查看学生\表的输出,如下面的屏幕截图所示:

PostgreSQL 插入

例2

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

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

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

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

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

PostgreSQL 插入

示例:在表中插入一行值

下面的命令用于将dept_name、location值插入到部门表中:

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

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

SELECT * FROM department;

输出

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

PostgreSQL 插入

如果我们想插入字符数据,我们必须将它括在单引号 (') 中

例如, 'RESEARCH'。

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

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

在这里,我们将使用 sub-select 将各种行值插入到特定表中。

例如:在下面的命令中,我们将在部门表的dept_name、location 列中插入多行

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

执行上述命令后,我们将收到以下消息,表明三个值已插入到dept_name部门表的位置列中:

PostgreSQL 插入

我们可以在SELECT命令的帮助下检查特定表中插入的行:

SELECT * FROM department;

输出

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

PostgreSQL 插入

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

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

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

执行上述命令后,部门\表被修改,last_column已经创建。

PostgreSQL 插入

下面的命令用于插入一个新行来定义部门\表中的日期。

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

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

输出

执行完上面的命令后,我们会得到消息窗口:

PostgreSQL 插入

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

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

输出

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

PostgreSQL 插入

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

Select * from department;

输出

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

PostgreSQL 插入

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

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

步骤1

首先,我们创建另一个表,名为Department_tmp,它具有与部门表类似的表结构:

CREATE TABLE department_tmp (LIKE department);

执行上述命令后,department_tmp\已经创建完毕:

PostgreSQL 插入

第2步

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

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

输出

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

PostgreSQL 插入

Step3

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

SELECT * FROM department_tmp;

输出

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

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

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

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

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

输出

一旦我们执行了上面的命令,我们就会得到 Dept_id=7。

PostgreSQL 插入

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

Select * from department;

输出

一旦我们执行Select命令,我们可以看到,一旦我们创建的客户表,我们将插入一个行对客户表下面命令的帮助:DEPTID比赛**最后插入Dept ID部门**表。

PostgreSQL 插入

PostgreSQL 插入命令使用 psql

在 SQL shell(psql) 中,我们将首先借助以下命令在javatpoint 数据库中创建一个名为Customer table 的表

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;

输出

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

PostgreSQL 插入