人大金仓数据库KingbaseES CREATE TABLE AS命令介绍

本文详细介绍了金仓数据库KingbaseES中的CREATETABLEAS命令,包括其语法、使用限制(如不能指定列类型和约束)、创建分区表、临时表以及复杂SQL查询的应用。
摘要由CSDN通过智能技术生成

金仓数据库KingbaseES CREATE TABLE AS命令介绍

关键字:

KingbaseES、CREATE命令、人大金仓、KingbaseES

CREAT TABLE AS语句介绍

CREATE TABLE AS语句可以使用查询的结果创建和填充表。由于CREATE TABLE AS是一个单独的建表和填充表命令。所以用户只能看到SELECT语句填充后的结果。在KingbaseES也支持了CREATE TABLE AS语句,其主要语法如下:

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name

[ (column_name [, ...] ) ]

[ partition_by_clause ]

[ USING method ]

[ WITH ( storage_parameter [= value] [, ...] ) | WITHOUT OIDS ]

[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]

[ TABLESPACE tablespace_name ]

AS query

[ WITH [ NO ] DATA ]

CREATE TABLE AS的使用

在KingbaseES中使用CREATE TBALE AS建表时只能指定列名,无法在建表的列上指定约束(例如 not null等)和列的类型。

  • 使用CREATE TABLE AS命令时,只能指定列名。

--创建表并插入相关数据,供CREATE TABLE AS命令执行

CREATE TABLE source_table(id int unique, name text);

INSERT into source_table values(1,'TOM'),(2,'john');

--CREATE TABLE AS命令使用unique关键字将无法创建表

CREATE TABLE as_table(id unique, name) as SELECT * from source_table;

-- CREATE TABLE AS命令指定列类型,同样无法创建表

CREATE TABLE as_table(id int, name) as SELECT * from source_table;

--只指定列名将创建成功

CREATE TABLE as_table(id, name) as SELECT * from source_table;

--表中已经保存了select 语句的查询结果

SELECT * from as_table;

  • KingbaseES也支持使用with no data,只保存select语句结构,不插入数据的建表语句。

--使用CREATE TABLE AS 命令创建目标表

CREATE TABLE as_no_data(id, name)as SELECT * from source_table with no data;

--表中并不存在数据

Select * from as_no_data;

  • CREATE TABLE AS 也可以建立分区表

--创建分区表

CREATE TABLE as_partition_table ( ID, NAME ) PARTITION BY list ( ID ) ( PARTITION p1 VALUES ( 1 ), PARTITION p2 VALUES ( 2 ) )

AS SELECT * FROM source_table WITH NO DATA;

--查看表结构,发现表as_partition_table拥有分区p1和p2

\d+ as_partition_table

  • CREATE TABLE AS 也可以建立临时表

--建立临时表,使临时表在commit时被drop

begin;

CREATE TEMP table as_temp_table (id, name) ON COMMIT DROP as SELECT * from source_table with no data;

--查看表结构

\d+ as_temp_table

--commit后表不存在

Commit;

\d+ as_temp_table

  • CREATE TABLE AS中可以省略列名

--使用CREATE TABLE AS创建表

CREATE table as_table_1 as SELECT * from source_table with no data;

  • CREATE TABLE AS中可以使用复杂的select语法

--在CREATE TABLE AS中使用group by

CREATE table as_group as SELECT count(*) from source_table GROUP BY id with no data;

--查看表结构

\d as_group

--在CREATE TABLE AS中使用where子句

CREATE TABLE as_where as SELECT count(*) from source_table where id=1;

--查看表中数据

Select * from as_where;

--在CREATE TABLE AS中使用having子句

CREATE table as_having as SELECT count(*) from source_table GROUP BY id HAVING count(id)>1 with no data;

--查看表结构

\d as_having

--在CREATE TABLE AS中使用limit子句

CREATE table as_limit as SELECT count(*) from source_table LIMIT 1 with no data;

--查看表结构

\d as_limit

--在CREATE TABLE AS中使用连接

CREATE table as_join as SELECT as_partition_table.id , source_table.name from source_table LEFT JOIN as_partition_table on as_partition_table.id = source_table.id LIMIT 1 with no data;

--查看表结构

\d as_join

--在CREATE TABLE AS中使用锁定子句

CREATE table as_lock as SELECT * from source_table LIMIT 1 FOR SHARE NOWAIT with no data;

--查看表结构

\d as_lock

总结

通过上述的使用介绍,我们可以发现在CREATE TABLE AS语句中无法指定列的类型和约束。在使用CREATE TABLE AS语句时,我们可以指定选择是否复制select语句中的数据。

参考资料

《KingbaseES产品手册》

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值