Oracle(1)

什么是关系型数据库?
关系型数据库是指我们基于关系模型创立的数据库
关系模型是指用一个二维表(行和列)的方式来保存数据.

集群的优点:
1.Load Balance 负载均衡
2.Fail Over 失败迁移

ORACLE的体系结构

在这里插入图片描述在这里插入图片描述sql的优化原则:
1.查具体列而不用*号;
2.where解析的顺序是从右往左,在and语句中,把假的条件尽量放在右边,可以提高效率;在or语句中,把真的条件尽量放在左边;
3.where子句和having子句都可以使用的情况下,尽量使用where语句.
where是先过滤在分组,having是先分组再过滤.
4.尽量使用多表查询,多表查询好于子查询
5.尽量不要使用集合运算,随着参与集合运算的数据越多,sql语句效率越低

修改sql的命令
change
查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入
select empno,ename,sal,sal12,comm,sal12+comm
from emp

sql语句的空值问题:

1.包含空值的表达式都为null
2.null永远!=null

oracl的滤空函数 --nvl nvl2;
select empno,ename,sal,sal12,comm,sal12+nvl(comm,0)
from emp
在这里插入图片描述判断奖金为null的员工
select * from emp where comm is null;
在这里插入图片描述
select empno as “员工号”,ename"姓名",sal 月薪,sal12,comm,sal12+nvl(comm,0) from emp;

关于别名 :员工号和姓名是一样的,但姓名和月薪是不一样的
别名影响关键字的话要加双引号

去掉重复的值 distinct
select distinct deptno from emp;
在这里插入图片描述
concat函数:
Mysql: select concat (‘Hello’,‘world’);
oracle:报错
oracle:select concat (‘Hello’,‘world’) from dual; dual为伪表
select ‘Hello’||‘World’ 字符串 from dual;
在这里插入图片描述
查询员工信息:的薪水是*
select ename||‘的薪水’||sal 信息 from emp;
在这里插入图片描述字符串:
日期和字符只能在单引号中出现,双引号是列的别名.
对字符串来说格式敏感,对字符串来说大小写敏感.
在这里插入图片描述过滤和排序:
使用where条件对结果进行过滤
select * from emp where deptno = 10;

mysql不区分字符串大小写,oracle区分大小写
在这里插入图片描述select * from emp where hiredate=‘17-11月-81’;
在这里插入图片描述在这里插入图片描述在这里插入图片描述select * from v$nls-parameters;
查询数据库参数
在这里插入图片描述设置日期格式
在这里插入图片描述
在这里插入图片描述如果集合中含有null,不能使用not in,但是可以使用in
在这里插入图片描述
模糊查询
在这里插入图片描述insert into emp(empnp,ename,sal,deptno) values (1001,‘Tom_AB’,3000,10);
在这里插入图片描述转义字符
select* from emp where ename like ‘%_%’ escape ‘’
在这里插入图片描述mysql要手动开启事务,oracle自动开启事务,
在这里插入图片描述where condition1 and condition2
where condition2 and condition1
在oracle是两条完全不一样的语句,但结果一样.
where解析的顺序是从右往左,在and语句中

SQL执行计划:
在这里插入图片描述排序默认升序:order by后面加+列 表达式 别名 序号
在这里插入图片描述在这里插入图片描述多列排序
在这里插入图片描述总结:order by 作用于后面的所有列,先按照第一个列排序,再后面的列
desc只作用于离他最近的列
思考:排序后的结果,是否还是原来的表?

查询员工信息,按照奖金排序
null的排序
在这里插入图片描述在这里插入图片描述原因:默认降序空值排在前面,oracle中空值最大.


单行函数:

目的:简化操作
6种单行函数:
在这里插入图片描述大小写控制函数:
select lower(‘Hello World’) 转小写,upper(‘Hello World’) 转大写,initcap(‘hello world’) 首字母大写 from dual;
在这里插入图片描述substr(a,b) 从a中,第b位开始取
select substr(‘Hello World’,4) 字串 from dual;

在这里插入图片描述
在这里插入图片描述

length 字符数 lengthb字节数 —对英文来说一样
select length(‘Hello World’) 字符,lengthb (‘Hello World’) 字节 from dual;
在这里插入图片描述select length(‘北京’) 字符,lengthb (‘北京’) 字节 from dual;
在这里插入图片描述instr(a,b) 在a中,查找b
select instr (‘Hello World’,‘ll’) 位置 from dual;
在这里插入图片描述
lpad左填充 rpad右填充

select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;

在这里插入图片描述trim 去掉前后指定的字符
select trim(‘H’ from ‘Hello WorldH’) from dual;
在这里插入图片描述
replace 替换掉指定的字符
select replace(‘Hello World’,‘ll’,’*’) from dual;
在这里插入图片描述

数值函数:

round :四舍五入
trunc:截断
mod:求余
在这里插入图片描述四舍五入:
在这里插入图片描述截断:
在这里插入图片描述日期:
mysq:
date年月日
datetime年月日小时分钟秒
oracle:
date=年月日小时分钟秒
昨天 今天 明天
select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;
在这里插入图片描述**计算员工的工龄:**天 星期 月 年
select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,(sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年 from dual;
在这里插入图片描述

注意:日期不能相加没有意义;

日期函数:

在这里插入图片描述 精确计算工龄:months_between(sysdate,hiredate)

select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) from emp;
在这里插入图片描述53个月后:
select add_months(sysdate,53) from dual;
在这里插入图片描述日期所在月份的最后一天:
select to_char(last_day(sysdate),‘yyyy-mm-dd’) from dual;
在这里插入图片描述指定日期的下一个日期: 从今天算起 下周四是几号

select to_char(next_day(sysdate,‘星期四’),‘yyyy-mm-dd’) 下星期四 from dual;
在这里插入图片描述next_day函数的应用:每个星期一自动备份表中的数据
需要具备的知识:1.分布式数据库.
2.快照.触发器

转换函数:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值