欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HANA常用语法

程序员文章站 2022-05-02 23:40:05
SQL语句 --1.查看当前日期 select current_date "date" from dummy; --查看当前日期零时零分 se...

SQL语句

--1.查看当前日期
select current_date "date" from dummy; 

--查看当前日期零时零分
select to_timestamp(to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd')) from dummy;

select CURRENT_DATE from dummy;
--2.查找雇员的姓名及雇员的年薪。P1526659201为schema
select ename,sal*12 from  P1526659201.emp;  
--3.像oracle一样任何含空值的数学表达式是空值:
select ename,sal*12+comm  from  P1526659201.emp;
--4.其中||相当于把sal全部转换成字符串
select ename||sal from emp; 
--5.表示字符串的方法
select ename||' ename' from  emp; 
--6.如果字符串中包含有' 用''替换它
select ename||''' ename' from emp; 
--7.取出emp表的前5条记录
select top 5 * from emp; 
--8.取出emp表的全部记录
select all * from emp; 
--9.去除两个字段重复的数据
select distinct deptno,job from emp;
--10.取ASCII码
SELECT ASCII('Ant') "ascii" FROM DUMMY;

/*行表适用于如下一些场景:
     * 一次处理一条记录的情况
     * 应用需要访问完整记录或记录的大部分(即一条记录中的所有字段或大多数字段)
     * 不需要压缩率
     * 没有或很少的聚集、分组等复杂操作
     * 表中的记录行数不是很多
*/
--下面是创建行表的一些列子:

--例1
CREATE TABLE accounts
    ( act_no CHAR(18), 
      act_name NVARCHAR(100),
      balance DECIMAL(15,2),
      PRIMARY KEY (act_no)
    ) 
--例2
CREATE TABLE R 
    (A INT PRIMARY KEY, 
     B NVARCHAR(10)
    ); 

CREATE TABLE F 
    (FK INT, B NVARCHAR(10),
     UNIQUE (FK, B),  
     FOREIGN KEY(FK) REFERENCES R ON UPDATE CASCADE
    )  NO LOGGING;

/*依据某个已经存在的表创建另外的新表。HANA SQL提供了两类方法*/:
--方法一:创建的表与源表数据类型、约束完全相同。例如:
CREATE TABLE T_ACCOUNTS LIKE ACCOUNTS WITH NO DATA      
--方法二:创建的表字段类型和NULL/NOT NULL属性相同
CREATE TABLE T_ACCOUNTS1 AS (SELECT * FROM  ACCOUNTS) WITH DATA


/*列表适用于如下一些场景:
    * 通常只是在一个或少量列上执行计算操作
    * 表在进行搜索时通常基于少量列上的值
    * 表有很多列
    * 表有很多行,并且通常进行的是列式操作(比如:聚集计算和where中字段值查找)
    * 需要很高的压缩率。
*/
--例1
CREATE COLUMN TABLE tpch.nation
    (n_nationkey INT NOT NULL,
     n_name CHAR(25),
     n_regionkey INT,
     n_comment VARCHAR(152),
     PRIMARY KEY(n_nationkey)
    )

--例2(分区,只适用于列表,分区键必须是主键的一部分)
CREATE COLUMN TABLE tpch.lineitem
    (l_orderkey INT NOT NULL,l_partkey INT,
     l_suppkey INT,l_linenumber INT NOT NULL,
     l_quantity DECIMAL(10,2),l_extendedprice DECIMAL(10,2),
     l_discount DECIMAL(10,2),l_tax DECIMAL(10,2),
     l_returnflag CHAR(1),l_linestatus CHAR(1),
     l_shipdate DATE,l_commitdate DATE,l_receiptdate DATE,
     l_shipinstruct CHAR(25),l_shipmode CHAR(10),
     l_comment VARCHAR(44),
     PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
    )
    PARTITION BY HASH (l_orderkey,l_linenumber) PARTITIONS 4,
    RANGE (l_shipdate) (    
       PARTITION '2011/01/01'<= VALUES <'2011/04/01',
       PARTITION '2011/04/01'<= VALUES <'2011/07/01',
       PARTITION '2011/07/01'<= VALUES <'2011/10/01',
       PARTITION OTHERS)  

--HANA支持行表转换为列表,或者列表转换为行表。示例如下:
ALTER TABLE accounts COLUMN THREADS 10 BATCH 10000  --行转列
ALTER TABLE accounts  ROW THREADS 10   --列表转为行表

索引

--SAP HANA的索引都是保存在内存中。
--创建索引:
--语法:CREATE [UNIQUE] [BTREE | CPBTREE] INDEX  ON  (, ...) [ASC | DESC]
--创建测试表:
create row table test_index (id INT,name nvarchar(10), remark nvarchar(10));
create index indextest1 on test_index(name);
CREATE CPBTREE INDEX indextest2 ON test_index(id, name DESC);
--创建唯一键索引:
create unique index indextest4 on test_index(id);
create unique index indextest3 on test_index(name,remark);
--删除索引:
DROP INDEX 
drop index indextest2;删除索引indextest2
--查询索引:
select * from indexes where table_name ='EMP';  --查询员工表中使用的索引
select * from index_columns  where table_name ='EMP'; --查询索引列
select * from m_rs_indexes  where table_name = 'EMP' ;--查询索引的统计信息(B-tree and CPB-tree)
select * from FULLTEXT_INDEXES where table_name = 'EMP'; --查询Fulltext 索引
select * from M_FULLTEXT_QUEUES; --查看fulltext 索引队列的状态

Schema

--创建schema.
--语法:
CREATE SCHEMA  [OWNED BY ]
/*OWNED BY:指定schema的拥有者,如果省略。当前用户将是这个shema的拥有者*/
create schema my_schema;
create schema my_schema OWNED BY system.
--删除schema:
--语法:
DROP SCHEMA  []
drop_option: CASCADE | RESTRICT
/*默认的drop_option为:RESTRICT(限制约束)
RESTRICT:直接删除没有依赖的对象,如果对象有依赖关系,会抛出错误信息。
CASCADE:直接删除所有对象。*/
CREATE SCHEMA my_schema;
CREATE TABLE my_schema.t (a INT);
DROP SCHEMA my_schema CASCADE;
select * from tables  where schema_name='P1526659201'  --查询schema:P1526659201下的所有表