Oracle的安装
1.先安装Oracle,网上下载安装包,安装(点下一步,注意路径即可)
若安装失败:找到并删除所有已经安装文件(使用Everything),找到Oracle对应的注册表(有点麻烦,但是不难,自行百度),重启电脑,再次安装
2.安装Oracle的开发工具(比较简单)
Select
1.查询列(字段)
select distinct *|字段|表达式 as 别名 from 表 表别名
1.1字符串
使用单引号表示字符串(不能使用双引号),拼接使用||
select 'my' from emp;sql
select ename||'a'||'-->' info from emp;
1.2伪列
不存在的列,构建虚拟的列
select empno, 1*2 as count,'cmj' as name,deptno from emp;
--比如sal*1.2这个值在表中不存在,但是你可以显示在表上
1.3虚表
用于计算表达式,显示单条记录的值
select 1+1 from dual;
1.4null
null遇到数字参与运算的结果为null,遇到字符串为空串
nvl内置函数,判断是否为null,如果为空,取默认值0,否则取字段实际值
select 1+null from dual;
select '1'||null from dual;
select 1||'2'||to_char(null) from dual;
select nvl(comm,0) + sal from emp;
2.查询行(记录)
where过滤行记录条件,条件有
a)、= 、 >、 <、 >=、 <=、 !=、 <>、 between and
b)、and 、or、 not、 union、 union all、 intersect 、minus
c)、null :is null、 is not null、 --not is null
d)、like :模糊查询 % _ escape('单个字符')
f)、in 、 exists(难点) 及子查询
2.1集合操作
Union、Union All、Intersect、Minus
Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排
序;
Minus,差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序
2.2like:模糊查询
模糊查询,使用通配符:
%:零个及以上的(任意个数)的字符
_ : 一个字符
遇到内容中包含%_使用escape(‘单个字符’)指定转义符
2.3in与exists
1.in相当于使用or的多个等值,定值集合 ,如果存在 子查询,确保 类型相同、字段数为1,如果记录多,效
率不高,用于 一些 少量定值判断上
2.exists条件为true,存在记录则返回结果,后续不再继续 比较查询,与查询的字段无关,与记录有关
函数
1.单行函数
1.1日期函数(天数±)
--两天后的时刻
select sysdate+2 from dual;
1.2 修改月份
--当前5个月后的时间
select add_months(sysdate,5) from dual; --雇佣日期 2个月的时间
select ename,hiredate, add_months(hiredate,2) after from emp;
1.3 月份之差
--雇佣日期 距离现在的 月份数
select ename, months_between(sysdate , hiredate) from emp;
1.4 最后一天
--返回雇佣日期 当月最后一天的时间
select ename, last_day(hiredate) d from emp;
1.5 下一个星期的时间
--下一个星期二
select next_day(sysdate, '星期二') from dual;
1.6 转换函数
to_date(c,m) -> 字符串以指定格式转换为日期
to_char(d,m) -> 日期以指定格式转换为字符串
2.多行函数
avg 、sum、 min、max、count、having、group by、order by
2.1行转列
--找出课程名(表头)
select distinct course from tb_student;
--数据(行记录) 分组(学生+行转列 decode)
select * from tb_student;
--1、行转列 decode
select name,
decode(course, '语文', score) 语文,
decode(course, '数学', score) 数学,
decode(course, '英语', score) 英语
from tb_student;
--2、分组
select name,
min(decode(course, '语文', score)) 语文,
min(decode(course, '数学', score)) 数学,
min(decode(course, '英语', score)) 英语
from tb_student
group by name;
2.2rowid 与 rownum
ROWID 是 ORACLE 中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情
况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID 它是一个伪列,它并不实际存在于表
中。它是ORACLE 在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根
据一行数据的ROWID 能找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作
都是通过ROWID 来完成的,而且使用ROWID 来进行单记录定位速度是最快的。我们可以将其用于删除
重复数据。
ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。排序后的结果集的顺序号,每一个
结果集 都有自己顺序号 ,不能直接查询大于 1 的数。利用ROWNUM,我们可以生产一些原先难以实现
的结果输出。 例如实现分页操作。
ps: oracle 中 索引从 1 开始,java 程序 从 0 开始
2.2.1 rowid :实现重复记录的删除
要求:删除重复记录,一条记录只保留一次
思路 --> 将所有记录按照某种特定规律分组(相同的记录为一组),保留下每组中的一条记录即可,其
他记录删除
--1、找出重复数据 :哪个学生 哪门课重复了
select name,course,count(1) from tb_student group by name,course; select
name,course,count(1) from tb_student group by name,course having count(1)>1;
--2、删除重复数据 :删除重复记录
--每条记录的唯一标识
select s.* , rowid from tb_student s;
--找出保留的rowid
select min(rowid) from tb_student group by name,course;
--删除
delete from tb_student where rowid not in (select min(rowid) from tb_student
group by name,course);
2.2.2 rownum :1、必须排序 2、不能直接取大于 1 的数
--最底层 rownum 数据库默认顺序号 -->没有用的
select emp.*, rownum
from emp;
select emp.*, rownum from emp order by sal;
--自己 排序后结果集的顺序号
select e.*, rownum from (select * from emp order by sal desc) e;
--取出工资前5名
select e.*, rownum
from (select * from emp order by sal desc) e
where rownum <= 5;
--取出 工资 3-5 名
select e.*, rownum
from (select * from emp order by sal desc) e
where rownum <= 5
and rownum >= 3;
--三层模板 (分页)
select e.*
from (select e.*, rownum rn
from (select * from emp order by sal desc) e
where rownum <= 5) e
where rn >= 3;
/*
select 字段列表 from (select e.*,rownum rn from (select from 表 order by 字段) e
where rownum<= 最大值)
where rn>=最小值
*/
select e.*
from (select e.*, rownum rn
from (select * from emp order by sal desc) e
where rownum <= 10) e
where rn >= 6;
表连接
92标准
1.笛卡尔积
2.等值连接(在笛卡尔积基础上 取条件列相同的值)
3.非等值连接 > < != <>between and
4.自连接: 特殊的等值连接 (来自于同一张表)
5.外连接:看逗号, 主表在,的左边就叫左外连接主表在,的右边叫右连接
99标准
1.交叉连接 cross join --->笛卡尔积
2.自然连接(主外键、同名列) natural join -->等值连接
3.join using连接(同名列) -->等值连接
4.[inner]join on 连接 -->等值连接 非等值 自连接 (解决一切) 关系列必须区分
5.left|right [outer] join on|using -->外连接
6.full join on|using -->全连接 满足直接匹配,不满足 相互补充null ,确保 所有表的记录 都至少出
现一次
DML
DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操
作的单位是记录。
DML 的主要语句(操作)
语句 | 作用 |
---|---|
Insert | 向数据表张插入一条记录 |
Delete | 删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作 对象仍是记录 |
Update | 用于修改已存在表中的记录的内容 |
11.1truncate:
截断所有的数据 ,如果截断的是主表,结构不能存在外键关联,截断数据同时从结构上检查
截断数据与删除数据区别 truncate 与delete 区别:
1、truncate -->ddl ,不涉及事务,就不能回滚
delete -->dml ,涉及事务,可以回滚
2、truncate 截断所有的数据 delete 可以删除全部 或者部分记录
3、truncate从结构上检查是否存在主外键,如果存在,不让删除
delete 从记录上检查是否存在主外键,如果存在,按参考外键约束进行删除。
事务
1.事务有一下四个特点:(ACID)
-
原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。
-
一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事
务进行的所有数据修改,必须在所有相关的表中得到反映。 -
隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。
-
持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢
失。
2.事务的结束:
- 成功
正常执行完成的 DDL 语句:create、alter、drop
正常执行完 DCL 语句 GRANT、REVOKE
正常退出的 SQLPlus 或者 SQL Developer 等客户端
如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
手动提交 :使用 commit - 失败
rollback ,手动回滚
非法退出 意外的断电
rollback 只能对未提交的数据撤销,已经 Commit 的数据是无法撤销的,因为 commit 之后已经持久化 到数据库中。
DDL
DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本
身,以及数据库对象,像:表、视图等等,DDL 对这些对象和属性的管理和定义具体表现在 create、
drop 和 alter 上。特别注意:DDL 操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小
也比记录大个层次。以表举例:create 创建数据表,alter 可以更改该表的字段,drop 可以删除这个
表,从这里我们可以看到,DDL 所站的高度,他不会对具体的数据进行操作。
语句 | 作用 |
---|---|
create | 可以创建数据库和数据库的一些对象 |
drop | 可以删除数据表、索引、条件约束等 |
alter | 修改数据表定义及属性 |