/*
  CREATE TABLE SALES1
  (
  SALES_ID NUMBER,
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE NOT NULL
  )
  PARTITION BY RANGE (SALES_DATE)
  (
  PARTITION P1 VALUES LESS THAN (to_date('2013-04-1', 'yyyy-mm-dd')),
  PARTITION P2 VALUES LESS THAN (to_date('2013-07-1', 'yyyy-mm-dd')),
  PARTITION P3 VALUES LESS THAN (to_date('2013-10-1', 'yyyy-mm-dd')),
  PARTITION P4 VALUES LESS THAN (to_date('2014-01-1', 'yyyy-mm-dd')),
  PARTITION P5 VALUES LESS THAN (maxvalue)
  );
  --要查看在第三季度的数据
  SELECT * FROM SALES1 partition(P3);
  --要删除第三季度的数据
  DELETE FROM SALES1 partition(P3);*/
  --间隔分区
  --创建间隔分区表
  CREATE TABLE SALES2
  (
  SALES_ID NUMBER,
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE NOT NULL
  )
  PARTITION BY RANGE(SALES_DATE)
  INTERVAL(NUMTOYMINTERVAL(3,'MONTH'))
  (PARTITION P1 VALUES LESS THAN (to_date('2013-04-1','yyyy/mm/dd')));
  --插入数据
  INSERT INTO sales2 VALUES (1,'a',to_date('2013-08-1'),10,'1');
  --获得分区情况
  SELECT table_name,partition_name
  FROM user_tab_partitions
  WHERE table_name=UPPER('sales2');
  --查询输出结果,系统自动根据输入数据情况创建新分区“SYS_P82”
  TABLE_NAME PARTITION_NAME
  ----------------------------
  SALES2 P1
  SALES2 SYS_P82
  --查询分区数据
  SELECT * FROM sales2 PARTITION(sys_P82);
  /*
  ===========================================================
  | 利用间隔分区将开始创建时没有分区的表创建为新的间隔分区表
  ============================================================
  */
  /*准备工作*/
  --1.创建普通SALES表
  CREATE TABLE SALES
  (
  SALES_ID NUMBER,
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE NOT NULL
  );
  --删除数据库不删除结构
  /*truncate table dept;*/
  --查询所有
  /*select * from dept;*/
  --添加列
  /*alter table dept add(looc varchar2(10));*/
  --删除列
  /*alter table dept drop column looc;*/
  --添加数据
  /*insert into dept values('40','accp4','邯郸4');*/
  --选择无重复的数据查询
  /*select distinct dname,loc from dept;*/
  --升序排列
  /*select * from dept order by loc ASC;*/
  --降序排序
  /*select * from dept order by loc DESC;*/
  --用别名显示
  /*select depton as '学号', dname as '课程', loc '地区', FROM dept;*/
  --复制个表出来吧数据,和结构,复制过来
  /*create table dept2
  as
  select * from dept;*/
  ----复制个表出来不复制数据,只结构,复制i过来
  /*create table dept3
  as
  select * from dept where 1=2;*/
  --查看表中的函数
  /*select count(1) from dept;*/
  --查看表中的函数(效率低)
  /*select count(*) from dept;*/
  --取出列不重复的数据
  /*select dname,loc
  from dept
  group by dname,loc
  having(count(dname||loc)<2);*/
  --事务控制语句
  --commit 提交事务
  --rollback 回滚事务
  --savepoint 在事务中创建节点
  -----------------------------
  /*commit;
  insert into dept2 values('01','accp01','邯郸01');
  /*savepoint a;
  insert into dept values('4000','accp400','邯郸400');
  rollback to savepoint a;
  select * from dept;
  ;
  select * from dept;**/
  ------------------------------
  --分页查询
  /*SELECT *
  FROM (SELECT e.*,rownum rn
  FROM (SELECT *
  FROM employee
  ORDER BY sal DESC
  ) e
  )
  WHERE rn>=5 AND rn<=9;*/
  -------------------------
  --SQL操作符
  --1.算数操作符号 +-*/加减乘除
  --2.比较运算符 = <= >= AND IN LIKE
  --3.逻辑运算符 or and not 或者,和,非
  --4.集合操作符 nuion(联合) unionall(联合所有) intersect(交集) minus(减级)
  --union 联合查询两个(不重复)的数据
  /*select * from dept
  union
  select * from dept2;*/
  --union联合查询排序
  /*select loc from dept
  union
  select loc from dept2
  order by loc;*/
  --union all 查询所有的数据
  /*select * from dept
  union all
  select * from dept2;
  */
  --intersect 交集 返回两个都有的行
  /*select * from dept
  intersect
  select * from dept2;*/
  --minus 查询第一个中在第二个里面没有的行
  /*select * from dept
  miuns
  select * from dept2;*/
  --链接操作符
  --链接运算符||用于将两个或者多个字符串合并成一个字符串,或者将一个字符与一个数值合并在一起
  /*select dname||'_'||loc from dept;*/
  --主键
  /*alter table dept
  add constraint depton PRIMARY KEY (depton);*/
  --自增
  --sql函数
  --to_char把时间转换为varchar2数据
  /*select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"HH24:MI:ss')from dual;*/
  --将数值转换为字符串并且用货币当为前缀
  /*select to_char(1210.7,'$9,999.00') from dual;*/
  /*select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"hh:mi:ss') from dual;*/
  /*select to_char(1200.2,'$9,999.00') from dual;*/
  /*select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"HH24:MI:SS') from dual;
  select to_char(123.1,'$9,999.00') from dual;*/
  --将char varchar2转换为日期函数
  /*select to_date('2017-01-01','yyyy-mm-dd') from dual;*/
  --nvl 的用法如果money2是个null 那么什么和它想加都是null了,nvl意思是如果money2是个null把它换成0
  --select stuname,money+nvl(money2,0) from stuinfo;
  --判断money2如果money2不是null返回money+money2,如果是null返回money.
  /*select stuname,nvl2(money2,money+money2,money) from stuinfo;*/
  --转换date和java中的switch语句条件如果是01是一月 如果02二月 else是后十月
  /*select decode(to_char(day,'fmmm'),'01','一月','02','二月','后十月') from stuinfo;*/
  --插入数据
  /*insert into emp values(1111,'雷老虎','管理',2,to_date('1991-01-02','yyyy/mm/dd'),1000,1000,12);*/
  -----------------------------------------------------
  --分析函数
  --rank
  /*select empno,ename,sal,DENSE_rank() over(order by sal desc) as 排名 from emp;*/
  /*select empno,ename,sal,ROW_NUMBER() over(order by sal desc) from emp;*/
  ---------------------------------------------------------------------------
  --SQL综合练习
  --显示员工的职年度
  --使用round对年份四舍五入
  /*select empno,ename,hiredate, to_char(round(hiredate,'mm'),'YYYY')||'年份' from emp;*/
  --列出只有3个雇员的部门having 是在group by 后面使用
  /*select deptno,count(1)from emp
  group by deptno
  having count(1)>3;
  */
  --查看是不是后入职的
  /*select ename, hiredate,last_day(hiredate) from emp where hiredate=last_day(hiredate);*/
  --创建个表空间
  /*create tablespace EPET
  datafile'D:orcaleappOracleoradataXEEPET.DBF'
  size 5m
  autoextend on;*/
  --删除表空间数据文件需要手动删除
  /*drop tablespace EPET;*/
  --删除表空间数据文件一起删除
  /*drop tablespace EPET including contents and datafiles;*/
  --修改表空间的大小 改变数据文件的大小
  /*alter database
  datafile 'D:orcaleapporacleoradataXEEPET.DBF'
  resize 10m;*/
  --表空间只读
  /*alter tablespace EPET read only;*/
  --表空间可读可写
  /*alter tablespace EPET read write;*/
  --创建用户
  /*create user li
  identified by yapeng
  default tablespace epet;--默认表空间*/
  --删除用户
  /*drop user li cascade;*/
  --用户授权
  /*grant resource to li;*/
  --撤销权限
  /*revoke resource from li;*/
  --授权查询
  /*grant select on emp to li;*/
  --序列
  /*create table toys
  (
  toyid number not null,
  toyname varchar2(10),
  toydate date
  );*/
  /*create sequence se
  start with 0
  increment by 1
  maxvalue 2000
  nocycle
  cache 30; */
  /* insert into toys (toyid,toyname,toydate)
  values(se.nextval,'李逵',to_date('2012/01/01','YYYY,MM,dd')); */
  --查看当前序列的值
  /*select se.currval from toys;
  */
  --更改序列
  /*--dba给予创建同义词权限
  grant create synonym to T111;*/
  --创建同义词
  /*create or replace synonym emp for system.emp;*/
  --dba给予创建公共同义词权限
  /*grant create public synonym to system;*/
  --创建公共同义词
  /*create or replace public synonym d for emp;*/
  --把查询权限给所有人
  /*grant select on emp to public;*/
  --查看用户有哪些同义词
  /*select * from user_synonyms;*/
  --索引
  --1:B树索引 是Oracle的标准索引用于数值,适用于高基数列
  --2: 反向键索引,主要解决IO瓶颈问题的
  --3:位图索引用于取值较少的(主键不适合)
  --表分区范围分区
  /*
  CREATE TABLE SALES1
  (
  SALES_ID NUMBER,
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE NOT NULL
  )
  PARTITION BY RANGE (SALES_DATE)
  (
  PARTITION P1 VALUES LESS THAN (to_date('2013-04-1', 'yyyy-mm-dd')),
  PARTITION P2 VALUES LESS THAN (to_date('2013-07-1', 'yyyy-mm-dd')),
  PARTITION P3 VALUES LESS THAN (to_date('2013-10-1', 'yyyy-mm-dd')),
  PARTITION P4 VALUES LESS THAN (to_date('2014-01-1', 'yyyy-mm-dd')),
  PARTITION P5 VALUES LESS THAN (maxvalue)
  );
  --要查看在第三季度的数据
  SELECT * FROM SALES1 partition(P3);
  --要删除第三季度的数据
  DELETE FROM SALES1 partition(P3);*/
  --间隔分区
  --创建间隔分区表
  CREATE TABLE SALES2
  (
  SALES_ID NUMBER,
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE NOT NULL
  )
  PARTITION BY RANGE(SALES_DATE)
  INTERVAL(NUMTOYMINTERVAL(3,'MONTH'))
  (PARTITION P1 VALUES LESS THAN (to_date('2013-04-1','yyyy/mm/dd')));
  --插入数据
  INSERT INTO sales2 VALUES (1,'a',to_date('2013-08-1'),10,'1');
  --获得分区情况
  SELECT table_name,partition_name
  FROM user_tab_partitions
  WHERE table_name=UPPER('sales2');
  --查询输出结果,系统自动根据输入数据情况创建新分区“SYS_P82”
  TABLE_NAME PARTITION_NAME
  ----------------------------
  SALES2 P1
  SALES2 SYS_P82
  --查询分区数据
  SELECT * FROM sales2 PARTITION(sys_P82);
  /*
  ===========================================================
  | 利用间隔分区将开始创建时没有分区的表创建为新的间隔分区表
  ============================================================
  */
  /*准备工作*/
  --1.创建普通SALES表
  CREATE TABLE SALES
  (
  SALES_ID NUMBER,
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE NOT NULL
  );