Oracle笔记

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)andornotunionunion allintersect 、minus
            c)null :is nullis not null--not is null
            d)like :模糊查询 % _ escape('单个字符')
            f)inexists(难点) 及子查询
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 区别:

1truncate -->ddl ,不涉及事务,就不能回滚
delete -->dml ,涉及事务,可以回滚
2truncate 截断所有的数据 delete 可以删除全部 或者部分记录
3truncate从结构上检查是否存在主外键,如果存在,不让删除
delete 从记录上检查是否存在主外键,如果存在,按参考外键约束进行删除。

事务

1.事务有一下四个特点:(ACID)
  1. 原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。

  2. 一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事
    务进行的所有数据修改,必须在所有相关的表中得到反映。

  3. 隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。

  4. 持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢
    失。

2.事务的结束:
  1. 成功
    正常执行完成的 DDL 语句:create、alter、drop
    正常执行完 DCL 语句 GRANT、REVOKE
    正常退出的 SQLPlus 或者 SQL Developer 等客户端
    如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
    手动提交 :使用 commit
  2. 失败
    rollback ,手动回滚
    非法退出 意外的断电

rollback 只能对未提交的数据撤销,已经 Commit 的数据是无法撤销的,因为 commit 之后已经持久化 到数据库中。

DDL

DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本
身,以及数据库对象,像:表、视图等等,DDL 对这些对象和属性的管理和定义具体表现在 create、
drop 和 alter 上。特别注意:DDL 操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小
也比记录大个层次。以表举例:create 创建数据表,alter 可以更改该表的字段,drop 可以删除这个
表,从这里我们可以看到,DDL 所站的高度,他不会对具体的数据进行操作。

语句作用
create可以创建数据库和数据库的一些对象
drop可以删除数据表、索引、条件约束等
alter修改数据表定义及属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值