oracle 是目前流行的数据库,中文注册商标是 甲骨文
  基础概念:
  数据库:存储数据的数据库,Oracle一般只有一个全局数据库 XE,ORCL。
  表空间:是Oracle存储数据的地方,由若干个数据文件组成,*.dbf。
  模式和模式对象:模式是用户,模式对象是数据库对象的集合,比如表、视图、索引、存储过程。
  卸载Oracle的注意事项:
  0:需要先备份重要数据
  1:得合法删除(通过程序自带的卸载工具卸载,如360,程序和功能)
  2:卸载完成后,需要手动移除安装文件夹
  3:查看系统服务,如果有Oracle开始的服务,删除服务
  打开服务快捷方式:window+R(services.msc)
  安装Oracle的注意事项:
  1.安装目录中不能有中文目录,好不要有空格
  2.好不要安装到系统盘,怕数据丢失
  Oracle:8i/9i-->Oracle10g/11g-->Oracle12C
  版本:
  企业版 (enterprise Edition)
  个人版 (Express Edition)
  占用端口号:1521 和 8080 ,tomcat换端口号,否则登录Oracle数据库
  SSH:Struts+Spring+Hibernate
  SSI:SpringMVC+Spring+IBatis
  配置监听器:
  Oracle..Listener
  OracleService<SID>
  如何配置监听器:主机名和listener里的不一样
  Oracle的基本概念:
  1.数据库:存储数据的仓库,数据一般只有一个(个人版XE,企业版orcl)
  2.用户(模式 schema):Oracle是通过不同的用户来区分数据库对象
  3.模式(用户/数据库)对象:指的是这个用户所拥有的表/视图/索引/过程...
  4.表空间:是Oracle存储数据的地方,一个表空间对应一个或者多个的数据文件*.dbf
  如何登陆Oracle数据库
  1.pl/sql developer
  sqlplus:
  系统用户:sys(只能以sysdba,sysoper的身份登陆) system(normal身份)
  登陆/切换用户的sql命令:conn 用户/密码 [as sysdba];
  Oracle 的sql应用
  1>查询不重复的列值:stuName,stuAge()
  select distinct stuName,stuAge from student;
  select stuName,stuAge from student group by stuName,stuAge having count(1)=1;
  2>如何起别名?(空格 或者 as)如何排序?如何添加条件?
  select stuName as 姓名,stuAge as "年 龄" from student;
  order by 列名 asc | desc;
  where
  3>如何根据现有表创建一个新表
  create table 表名
  as
  select * from student[where 1=2];
  创建新表并添加一列
  create table 表名
  as
  select s.*,'T113' as cname from student s;
  常用的sql命令:
  1.show user:显示当前登录的用户 中括号里的超级管理员才加
  2.conn 用户名/密码[as sysdba]:切换用户,登录数据库
  3.desc :描述表结构
  在Oracle中增删改语句会自动开启事务,必须提交事务
  查看表:
  select * from 表名;
  查看表结构:
  desc 表名;
  sql语句的分类:4类
  数据操纵语音(DML):insert update delete select
  事务控制语音(TCL):commit rollback savepoint
  数据定义语音(DDL):create drop alter truncate
  数据控制语音(DCL):grant revoke
  在editor中编辑,点击齿轮运行:么事别乱敲回车,check约束可以直接写,选tables可以直接添加数据
  失效后,更改:
  tools-->pre..-->key conf..-->reset to default-->ok
  Oracle常用的数据类型有哪些?
  char varchar2 number date lob(blob clob)
  标准日期格式:(1-6月 2016) to_date(2016-6-1,'yyyy-MM-dd')date'2016-6-1' 或者直接编辑 选择myobject,tables ,edit data
  分析函数:rank() over (partition by 列名 order by 列名 )
  查询平均工资大于3000的部门
  /*select * from dept d
  where (select avg(sal) from employee e where e.deptno = d.deptno)>3000;*/
  创建表空间注意事项:
  1.数据文件不要放在容易看到和删除的地方(比如桌面,磁盘根目录)
  2.表空间不能非法删除,否则数据库无法启动
  修改表空间大小:
  1.修改数据文件大小
  alter database datafile
  'd:datad.dbf'
  resize 10M;
  2.添加数据文件
  alter datafile
  'd:datad2.dbf'
  size 5M
  autoextend on;
  3.修改表空间为只读状态
  alter tablespace hello read only;
  alter tablespace hello read write;
  删除表空间
  drop tablespace hello
  including contents and datafiles;连带文件夹和数据一同删除
  创建用户
  create user zhao
  identified by sa
  default tablespace hello;
  privilege 权限
  expire:密码定期过期
  授权:
  系统权限:
  grant connect,resource to zhao;
  revoke connect,resource from zhao;
  grant create synonym to zhao;
  grant create public synonym to zhao;
  grant select on dept to public;
  对象权限:
  grant all on emp to zhao;
  revoke all on emp from zhao;
  创建序列:
  create sequence seq_dept
  start with 50
  increment by 10;
  1.添加数据
  insert into dept(列名) values (seq_dept.nextval);
  2.查看当前序列值
  select seq_dept.currval from dual;
  3.drop sequence 名
  创建同义词:在其他用户中创建Scott的同义词;
  create or replace synonym emp for Scott.emp;
  创建公有同义词:表是谁的谁创建(前提条件,其他用户得有权限访问同义词对应的对象)
  create public synonym emp for Scott;
  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  查询工资总额大于1000的部门信息(2种方式)
  1. 分组:
  select * from dept
  where deptno in (select deptno from emp group by deptno having sum(sal) > 1000)
  2. 子查询
  select * from dept d
  where (select sum(sal) from emp e where e.deptno=d.detpno) > 1000;
  --删除数据库不删除结构
  /*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:位图索引用于取值较少的(主键不适合)
  --表分区范围分区