1.oracle的安装和卸载
- 百度上有很多资料
2.基本概念(以下都只是简单提纲,并不是具体内容)
Oracle服务器(Oracle Database)的基本概念:
- 定义:是一个数据管理系统(RDBMS),它提供开放的,全面的,近乎完整的信息管理
- 由Oracle实例和数据库组成
- 数据库是一个物理概念,当我们安装好oracle后,在我们的安装目录下会有oracle下会有
集群:
- 定义:
- 优点:
- 失败迁移
- 负载均衡
3.sql语句
sql语句的注意点:
基本查询语句:
- 当前用户下的表 select * from tab;
- tab数据字典(管理员提供的表) desc emp
- 查询系统参数 select * from v$nls_parameters;
- 查询所有员工的所有信息 select * from emp;
- DISTINCT 去掉重复的记录 select deptno from emp;
- concat 连接字符串 select concat('Hello',' World') from dual;
- 连接符 select 'Hello'||' World' from dual;
- 注意点:
过滤和筛选:
- 查询10号部门员工 select * from emp where deptno=10;
- between ..and 在。。。之间
- 语句: select * from emp where sal between 1000 and 2000;
- 包含边界,小值在前,大值在后
- in: 在集合中
- 语句: select * from emp where deptno in (10,20);
- 包含的集合中不能有null值
- like 模糊查询 % select * from emp where ename like '%_%';
- 逻辑运算符 and 和 or
- 解析顺序从左到右
where condition1 and condition2
where condition1 and condition2 是不一样的,有利于sql优化
where condition1 or condition2 也是同理,尽量把为真的放左边
- 排序 select * from emp order by sal;
- 默认为升序,desc为降序
- order by后面可以跟多列:作用于后面所有的列
- 查询中的条件是字符串,为大小写敏感
- 日期格式敏感
- Oracle 9i之前,日期格式为 DD-MON-YY
- Oracle 9i之前,日期格式为 DD-MON-RR
- 可以用select * from v$nls_parameters 查看日期格式
- 因为v$nls_parameters是一张数据字典表,所以可以修改日期的格式
- alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
单行函数:(列举了一些我认为比较常用或者重要或者不熟悉的)
- lower()字符串转为小写,upper()字符串转为大些,initcap()字符串首字母大写
- ROUND(a,b) ,使a保留小数,如果a为负数,保留到使a四舍五入到倒数-b位
- 例子:select ROUND(45.926,2) 一,ROUND(45.926,1) 二,0) 三,-1) 四,-2) 五 from dual;
一 二 三 四 五
---------- ---------- ---------- ---------- ----------
45.93 45.9 46 50 0
- TRUNC(a,b) 与ROUND类似,但是TRUNC不是四舍五入,是直接取
一 二 三 四 五
---------- ---------- ---------- ---------- ----------
45.92 45.9 45 40 0
- to_char() 转换成字符串,to_number() 转换成数字,to_date() 转换成日期
- nvl(a,b) 获取某个值,若nvl为null,返回b
- nvl2(a,b,c) 获取某个值,若nvl为null,返回c,否者返回b
- decode(a,c
d,e,
......
f)
- 和java中的if-else相似,如果a的值为b,返回c,为d,返回e,否者返回f
组函数:作用于一组数据,并对一组数据返回一个值
- avg():求平均值
- count():求数量
- max():求最大值
- min():求最小值
- sum():求和
- 熟练使用group by函数
- group by多列:先按照第一列分;如果第一列相同,再按照第二列分
- having 过滤分组 与where有点相似
- 先执行where在实行分组,所以尽量使用where 例外:如果条件中含义组函数,只能使用having
null的注意点:
- 查询的时候判断null,要用is或者is not: where id is null
- 表达式中包含null值的返回值都为null select sal*12+nvl(comm,0) 年收入 from emp;
- 如果集合中含义null值,不能使用not in操作符;但可以使用in
- 组函数会自动过滤为空,可以在组函数中嵌套滤空函数,来屏蔽组函数的滤空功能
- select count(*),count(comm) from emp; 的结果不同
- select count(*),count(nvl(comm,0)) from emp; 的结果相同
多表查询
- 以笛卡儿积为基础,尽量避免出现笛卡尔全集(即没有连接条件)
- 以连接条件的不同,可以分为 等值连接,不等值连接,外连接,自连接
- 外连接解决的问题:当条件不成立时,任然希望在结果中包含不成立记录
- 左外连接 where d.deptno=e.deptno(+)
- 右外连接 where d.deptno(+)=e.deptno
- 自连接:利用表的别名,将同一张表视为多张表
- 自连接不太适合操作大表
- 层次查询: 对同一张表的前后两次操作,进行连接 connect by prior empno=mgr start with