1.oracle的安装和卸载
百度上有很多资料
2.基本概念(以下都只是简单提纲,并不是具体内容)
Oracle服务器(Oracle Database)的基本概念:
定义:是一个数据管理系统(RDBMS),它提供开放的,全面的,近乎完整的信息管理
由Oracle实例和数据库组成
数据库是一个物理概念,当我们安装好oracle后,在我们的安装目录下会有oracle下会有
oradata,里面就存在着我们的创建的数据库文件
实例是逻辑概念,是把我们的数据库文件中的文件读到内存中
引出 集群 的概念,先了解概念
oracle体系结构,引出二次提交
从大到小:实例》表空间》段》区》数据块
集群:
定义:
优点:
失败迁移
负载均衡
3.sql语句
sql语句的注意点:
sql语言大小写不敏感
关键字不能缩写也不能分行
各个子句一般要分开写
要使用缩进,分行 提高语句的可读性(一般的sql都非常非常长)
sqlplus语句:sqlplus是用来执行sql语句的地方(比如dos命令窗口下的sqlplus)
基本查询语句:
当前用户下的表 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;
注意点:
dual是伪表,由管理员创建,用来操作一些没有和表没有关系的操作
查询的时候尽量使用列名代替* (Oracle 9i之后,可以认为是一样)
过滤和筛选:
查询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
基础部分已经大致结束,当然上述的所有内容都是伪逻辑,有些代码还需要大家修改一下才能使用,当然新手可以把上面的知识看作条目,逐一了解。若是有数据库经验的可以看看那些知识自己还没有掌握,弥补一下漏洞。
下一节,主要复习sql的简单查询的
触发器和视图方面的知识
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。