目录
-
概念
- 创始人: 拉里 埃里森
-
oracle安装与连接
- 我们作为java程序员, 只需要知道如何安装就行了
- 连接软件
- PLSQL Developer
- 不能单独使用, 必须在oracle官方推荐的instantclie软件之上使用
-
体系结构
- 数据库
- 实例
- 用户
- 管理表的基本单位
- 在MySQL中, 管理表的基本单位就是数据库
- 表空间
- 是一个逻辑单位
- 一个表空间可以有多个数据文件
- 一个表空间可以有多个用户
- 数据文件
- 真正的实体的物理存储文件
-
创建表空间 创建用户 用户授权
-
oracle中常用角色
- connect 连接角色 基本角色
- resource 开发者角色
- dba 超级管理员角色
-
--创建表空间 create tablespace test01 datafile 'c:\test01.dbf' size 100m autoextend on next 10m; --删除表空间 drop tablespace test01; --create user create user lq01 identified by liqian0519 default tablespace test01; --给用户授权 --connect --resource --dba grant dba to lq01;
-
-
oracle数据类型
-
varchar varchar2
- varchar2
- 常用
- 可以自动截取多余长度, 但不能自动扩展长度
- varchar2
-
NUMBER
- 常用
- 可以表示整数, 也可以表示小数
-
DATA
- 常用
- 日期
-
CLOB
- 不常用
- 存储大文本类型
-
BLOB
- 不常用
- 存储二进制类型
-
-
修改表结构
-
--添加一列 alter table person add (gender number(1)); --修改某一列的数据类型 --当修改的列数比较多的时候, 可以用括号括起来 alter table person modify (gender char(1)); --修改列名 alter table person rename column gender to sex; --删除列 alter table person drop column sex;
-
-
CRUD操作
-
--查询 select * from person; --添加一条记录 insert into person(pid,pname) values(2,'lq'); --修改一条记录 update person set pname='李乾' where pid = 2; --三个删除 --删除表中全部记录 delete from person; --删除表结构 drop table person; --先删除表, 再创建表 truncate table person; --在数据量大的情况下, 尤其表中带有索引的, 该操作执行效率高 --而所有可以提高查询效率, 但是会影响增删改的效率
-
-
序列
- 作用
- 可以用于实现id值的自增长
- 序列不真的属于任何一张表, 但是可以逻辑和表绑定
- dual
- 是一个虚表, 没有任何意义, 只是为了补全语法
-
--序列 create sequence s_person; select s_person.nextval from dual; insert into person(pid,pname) values(s_person.nextval,'lq');
- 作用
-
scott用户
-
概念
- 新手必须了解的用户
- 它可以帮你模拟出各种各样的查询, 可以用于学习, 里面预置了好多张表
-
默认是锁定的
- 解锁
-
--解锁scott用户 alter user scott account unlock; --解锁scott用户密码 (也可以用户重置密码) alter user scott identified by liqian0519; --切换到scott用户
-
-
单行函数
-
概念
- 作用于一行, 返回一个值
- 比如: 4舍5入 字符串转换 大小写转换
- 作用于一行, 返回一个值
-
--单行函数 --字符函数 select upper('qwe') from dual; select lower('qwe') from dual; --数值函数 --四舍五入 select round(12.523123) from dual; select round(12.523123, 2) from dual; select round(11236782.523123, -3) from dual; --日期函数 select ename , round(months_between(sysdate, hiredate)) weeks from emp; --转换函数 select empno, ename, to_char(hiredate, 'yyyy') year, to_char(hiredate, 'mm') month, to_char(hiredate, 'dd') day from emp; select empno, ename, to_char(hiredate, 'fm yyyy-mm-dd hh24:mi:ss') from emp; --日期转换函数 select to_date('2020-02-01','yyyy-mm-dd') from dual; --通用函数 --空值处理nvl select ename, sal*12+nvl(comm, 0) from emp; --decode函数, 类似于swtich函数 select ename, decode(job, 'CLERK','业务员', 'SALESMAN','销售', 'MANAGER','分析', 'MANAGER','经理', '无业') from emp;
-
-
多行函数
- 概念
- 作用于多行, 返回一个值
- 比如: 取最大值 取平均值 求和
- 聚合查询
- 作用于多行, 返回一个值
- 概念
-
条件表达式
-
一共有两种
-
Decode
- oracle专用
-
when ... then ...
- 通用
- 以后更多使用的也是这个, 讲究代码可适用性
-
- oracle中, 除了起别名, 其他所有地方都要使用单引号
- 起别名也可以使用双引号
- 当你起的别名中包含了空格, 那么你需要使用双引号来把别名括起来
- 起别名也可以使用双引号
-
-
分组查询(group by)
-
having
- 可以出现聚合函数
- 过滤分组后的数据
- 必须出现在group by之后
-
where
- 不能出现聚合函数
- 过滤分组前的数据
- 必须出现在group by之前
-
-
多表查询
- 推荐使用等值连接
- Oracle专用的外连接
- 在哪边写加号就保留哪边
-
select * from emp e, dept d where e.deptno(+) = d.deptno;
-
子查询
-
--子查询 --查询出工资和scott一样的员工信息 select * from emp where sal in (select e.sal from emp e where e.deptno=10); --查询出工资和10号部门任意员工工资一样的员工信息 select * from emp where sal = (select e.sal from emp e where e.ename='SCOOT1'); --查询出每个部门最低工资 最低工资员工姓名 以及该员工所在部门名称 select e.ename,e.sal,d.dname from emp e, (select min(sal) msal, deptno from emp group by deptno) t, dept d where e.sal=t.msal and e.deptno=t.deptno and t.deptno=d.deptno
-
-
分页查询
-
rownum
- 行号
- rownum不能大于一个正数
-
select是优先于order by 先执行的
- 如果想要显示排序之后的行号的话, 先要排序, 然后再加入行号
-
select rownum, t.* from (select * from emp order by sal desc) t
-
分页查询标准代码
- oracle的分页查询和MySQL的分页查询使用的sql语句是不一样的
-
--将emp表倒序排序后, 每页5条记录, 查询第2页 select * from (select rownum rn, t1.* from (select * from emp order by sal desc) t1 where rownum < 11) t2 where t2.rn > 5
-