• clickhouse--SQL语法


    SQL语法

    CREATE

    CREATE DATABASE

    用于创建指定名称的数据库,语法如下:

    CREATE DATABASE [IF NOT EXISTS] db_name
    

    如果查询中存在IF NOT EXISTS,则当数据库已经存在时,该查询不会返回任何错误。

    :) create database test;
    
     
    
    Ok.
    
     
    
    0 rows in set. Elapsed: 0.018 sec.
    

    CREATE TABLE

    对于创建表,语法如下:

    CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
    
    (
    
      name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    
      name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    
      ...
    
    ) ENGINE = engine
    

    DEFAULT expr – 默认值,用法与SQL类似。

    MATERIALIZED expr – 物化表达式,被该表达式指定的列不能被INSERT,因为它总是被计算出来的。 对于INSERT而言,不需要考虑这些列。 另外,在SELECT查询中如果包含星号,此列不会被查询。

    ALIAS expr – 别名。

    有三种方式创建表:
    
    1)直接创建
    
    :) create table t1(id UInt16,name String) engine=TinyLog
    
    2)创建一个与其他表具有相同结构的表
    
    CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
    
    可以对其指定不同的表引擎声明。如果没有表引擎声明,则创建的表将与db2.name2使用相同的表引擎。
    
    :) create table t2 as t1 engine=Memory
    
     
    
    :) desc t2
    
     
    
    DESCRIBE TABLE t2
    
     
    
    ┌─name─┬─type───┬─default_type─┬─default_expression─┐
    
    │ id  │ UInt16 │        │           │
    
    │ name  │ String │        │           │
    
    └──────┴────────┴──────────────┴────────────────────┘
    
    3)使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。
    
    语法:
    
    CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
    
    实例:
    
    先在t2中插入几条数据
    
    :) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')
    
     
    
    :) create table t3 engine=TinyLog as select * from t1
    
    :) select * from t3
    
    ┌─id─┬─name─────┐
    
    │  1 │ zhangsan │
    
    │  2 │ lisi   │
    
    │  3 │ wangwu  │
    
    └────┴──────────┘
    

    INSERT INTO

    主要用于向表中添加数据,基本格式如下:

    INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
    
    实例:
    
    :) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')
    
    还可以使用select来写入数据:
    
    INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
    
    ​	实例:
    
    :) insert into t2 select * from t3
    
    :) select * from t2
    
     
    
    ┌─id─┬─name─────┐
    
    │  1 │ zhangsan │
    
    │  2 │ lisi   │
    
    │  3 │ wangwu  │
    
    └────┴──────────┘
    

    ClickHouse不支持的修改数据的查询:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。

    ALTER

    ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本语法:

    ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...

    参数解析:

    ADD COLUMN – 向表中添加新列

    DROP COLUMN – 在表中删除列

    MODIFY COLUMN – 更改列的类型

    案例演示:

    1)创建一个MergerTree引擎的表

    create table mt_table (date Date, id UInt8, name String) ENGINE=MergeTree(date, (id, name), 8192);
    

    2)向表中插入一些值

    insert into mt_table values ('2019-05-01', 1, 'zhangsan');
    
    insert into mt_table values ('2019-06-01', 2, 'lisi');
    
    insert into mt_table values ('2019-05-03', 3, 'wangwu');
    

    3)在末尾添加一个新列age

    :)alter table mt_table add column age UInt8
    
    :)desc mt_table
    
    ┌─name─┬─type───┬─default_type─┬─default_expression─┐
    
    │ date │ Date  │        │           │
    
    │ id  │ UInt8  │        │           │
    
    │ name │ String │        │           │
    
    │ age  │ UInt8  │        │           │
    
    └──────┴────────┴──────────────┴────────────────────┘
    
    :) select * from mt_table
    
    ┌───────date─┬─id─┬─name─┬─age─┐
    
    │ 2019-06-01 │  2 │ lisi │  0 │
    
    └────────────┴────┴──────┴─────┘
    
    ┌───────date─┬─id─┬─name─────┬─age─┐
    
    │ 2019-05-01 │  1 │ zhangsan │  0 │
    
    │ 2019-05-03 │  3 │ wangwu  │  0 │
    
    └────────────┴────┴──────────┴─────┘
    

    4)更改age列的类型

    :)alter table mt_table modify column age UInt16
    
    :)desc mt_table
    
     
    
    ┌─name─┬─type───┬─default_type─┬─default_expression─┐
    
    │ date │ Date  │        │           │
    
    │ id  │ UInt8  │        │           │
    
    │ name │ String │        │           │
    
    │ age  │ UInt16 │        │           │
    
    └──────┴────────┴──────────────┴────────────────────┘
    

    5)删除刚才创建的age列

    :)alter table mt_table drop column age
    
    :)desc mt_table
    
    ┌─name─┬─type───┬─default_type─┬─default_expression─┐
    
    │ date │ Date  │        │           │
    
    │ id  │ UInt8  │        │           │
    
    │ name │ String │        │           │
    
    └──────┴────────┴──────────────┴────────────────────┘
    

    DESCRIBE TABLE

    查看表结构

    :)desc mt_table
    
    ┌─name─┬─type───┬─default_type─┬─default_expression─┐
    
    │ date │ Date  │        │           │
    
    │ id  │ UInt8  │        │           │
    
    │ name │ String │        │           │
    
    └──────┴────────┴──────────────┴────────────────────┘
    

    CHECK TABLE

    检查表中的数据是否损坏,他会返回两种结果:

    0 – 数据已损坏

    1 – 数据完整

    该命令只支持Log,TinyLog和StripeLog引擎。

  • 相关阅读:
    ES6常用语法
    nodejs中exports与module.exports的区别
    CSS animation动画
    CSS user-select文本是否可复制
    VUE 滚动插件(better-scroll)
    VUE 父组件与子组件交互
    CSS div内文字显示两行,超出部分省略号显示
    linux下使用tar命令
    linux fdisk命令使用
    关于SUID、SGID、Sticky
  • 原文地址:https://www.cnblogs.com/wyh-study/p/14978507.html
Copyright © 2020-2023  润新知