kes加载表

使用 CREATE TABLE AS
CREATE TABLE AS 创建一个表,并且用由一个 SELECT 命令计算出来的数据填充该表。该表的列具有和 SELECT 的输出列相关的名称和数据类型(不过可以通过给出一个显式的新列名列表来覆盖这些列名)。
CREATE TABLE AS 和创建一个视图有些相似,但是实际上非常不同:它会创建一个新表并且只计算该查询一次用来初始填充新表。这个新表将不会跟踪该查询源表的后续变化。相反, 一个视图只要被查询, 它的定义 SELECT语句就会被重新计算。
创建一个新表 films_new,它只由表 “films“中最近一段时间的项组成:

CREATE TABLE films_new AS
SELECT * FROM films WHERE date_prod >= '2022-01-01';

要完全地复制一个表,也可以使用 TABLE 命令的简短形式:

CREATE TABLE films_copy AS TABLE films;

用一个预备语句创建一个新的临时表 films_new,它仅由表 films 中最近的项组成。新表将在提交时被删除:

PREPARE recentfilms(date) AS SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_new ON COMMIT DROP AS
EXECUTE recentfilms('2002-01-01');

使用 INSERT 语句
INSERT 语句允许您通过指定列值或指定从另一个现有表选择数据的子查询向表添加行。
例如,当在表之间拷贝值时,这个 OVERRIDING USER VALUE 子句就能派上用场,下面这个例子将从 tbl1 中 拷贝所有在 tbl2 中不是标识列的列,而 tbl2 中标识列的值将由与 tbl2 关联的序列产生。

INSERT INTO tbl2 OVERRIDING USER VALUE SELECT * FROM tbl1;

这个例子从表 tmp_films 中获得一些行插入到表 “films“中,两个表具有相同的列布局:

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2022-05-07'

使用 MERGE 语句
使用 MERGE 语法可合并 UPDATE 和 INSERT 语句功能。
通过 MERGE 语句,根据一张表(或视图)的连接条件对另外一张表(或视图)进行查询,连接条件匹配上的执行 UPDATE(可能含有 DELETE),无法匹配的执行 INSERT。其中数据表包括:普通表、分区表。
这个例子创建了两个表 test1 和 test2,并且进行条件匹配,将结果合并到 test2 中:

create table test1(a int, b int);
insert into test1 values(1, 1);
insert into test1 values(2, 2);
insert into test1 values(3, 3);
create table test2(x int, y int);
insert into test2 values(1, 1);
insert into test2 values(3, 3);
insert into test2 values(5, 5);
merge into test2 using test1
on (test1.a = test2.x)
when matched then
update set y = y * -1 where test1.a > 1
when not matched then
insert values(test1.a, test1.b);

执行后 test2 结果:

x | y
---+----
1 | 1
5 | 5
2 | 2
3 | -3
(4 rows)

执行后 test1 结果:

a | b
---+----
1 | 1
2 | 2
3 | 3
(3 rows)

使用 COPY 语句
COPY 语句允许您将 KingbaseES 表和标准文件系统文件之间相互转移数据。可以实现将表的内容复制到文件,也可以将文件复制数据到表,甚至复制一个 SELECT 查询结果。
• COPY TO 把一个表的内容复制到一个文件;
• COPY FROM 则从一个文件复制数据到一个表(把数据追加到表中原有数据);
• COPY TO 也能复制一个 SELECT 查询的结果。
COPY TO 只能被用于纯粹的表,不能用于视图。不过您可以写 COPY (SELECT * FROM viewname) TO… 来拷贝一个视图的当前内容。
COPY FROM 可以被用于普通表、外部表、分区表或者具有 INSTEAD OF INSERT 触发器的视图。
COPY 只处理提到的表,它不会从子表复制数据或者复制数据到子表中。例如 COPY table TO 会显示与 SELECT * FROM ONLY table 相同的数据。而 COPY (SELECT * FROM table) TO … 可以被用来转储一个继承层次中的所有数据。
1,下面的例子使用竖线(|)作为域定界符把 country 表复制到客户端:

COPY country TO STDOUT (DELIMITER '|');

2,从文件 country_data 中复制数据到 country 表中:

COPY country FROM '/usr1/proj/bray/sql/country_data';

3,只把名称以’A’ 开头的国家复制到文件 a_list_countries.copy 中:

COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO
'/usr1/proj/bray/sql/a_list_countries.copy';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值