VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

DELETE

功能描述

DELETE语句用于从指定的表里删除满足 WHERE 子句的行。如果 WHERE 子句不存在,将删除表中所有行,结果只保留表结构。

Vastbase在SQL Server兼容模式下,支持DELETE的各类关联操作语法,包括FROM中的JOIN功能:内部连接(INNER JOIN)、左外部连接(LEFT [OUTER] JOIN)、右外部连接(RIGHT [OUTER] JOIN)、完全连接(FULL [OUTER] JOIN)。

本文档只介绍DELETE语句兼容SQL Server的特性,原Vastbase的DELETE语法未做删除和修改,详见DELETE

注意事项

该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。

语法格式

DELETE FROM first_table <join_type> second_table [ON (join_condition)];

其中join_type包括:

{
    INNER JOIN |
    LEFT [OUTER] JOIN |
    RIGHT [OUTER] JOIN |
    FULL [OUTER] JOIN
}

本文档仅列出部分语法,更多DELETE语法和参数说明请参考DELETE

参数说明

  • first_table

    用于指定连接的表名称,应为已存在的表。连接类别由join_type指定。

  • second_table

    用于指定连接的表名称,应为已存在的表。连接类别由join_type指定。

  • join_condition

    定义用于对每一对连接进行求值的谓词。

示例

1、创建测试表 employees 和 salaries 并插入数据。

create database testdb;
\c testdb
CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100),position_level INT);
INSERT INTO employees (name, position_level)VALUES ('John', 1), ('Jane', 2), ('Mike', 3);
CREATE TABLE salaries (employee_id INT,salary DECIMAL(10, 2));
INSERT INTO salaries (employee_id, salary)VALUES (1, 5000.00), (2, 7000.00), (3, 9000.00);

2、查询删除前的表数据。

select a.*,b.salary FROM salaries b inner join employees a on b.employee_id = a.id order by id;

返回结果如下:

 id | name | position_level | salary
----+------+----------------+--------
  1 | John |              1 |   5000
  2 | Jane |              2 |   7000
  3 | Mike |              3 |   9000
(3 rows)

3、删除测试表 salaries ,并查询表数据。

begin;
delete salaries FROM salaries inner join employees on salaries.employee_id = employees.id where employees.position_level >= 2;
select a.*,b.salary FROM salaries b inner join employees a on b.employee_id = a.id order by id;
rollback;

回显结果如下:

 id | name | position_level | salary
----+------+----------------+--------
  1 | John |              1 |   5000
(1 row)