三篇拿下oracle【篇一】
与mysql比较
oracle 安全,国企,互联网金融,京东
mysql 中小型
区别:
1.遵循sql标准
2.不同厂商,不同数据库产品,但是有自己的方言
3.使用自己的方言完成相同的功能
4.oracle安全级别高,mysql开源免费
oracle体系结构
数据库---数据库实例---表空间(逻辑单位)(用户)----数据文件(物理单位dbf 地球---一个国家---省份(公民)---山川河流
oracle通常只有一个实例orcl,
oracle是多用户的,mysql是多数据库的
新建一个项目:
mysql:创建一个数据库,创建表,
oracle:创建一个表空间,创建用户,用户创建表,
基本查询
sql:结构化查询语言(4种分类)
dual是oracle的虚表,主要用来不全语法结构
select 1+1 from dual;
别名查询(as可以省略,字符串含空格加双引号)
select ename “姓名”,sal 工资 from emp;
去除重复数据distinct
单列去除重复
select distinct job from emp;
多列去除重复
select distinct job,deptno from emp;
查询四则运算
查询员工年薪
select sal*12 from emp;
查询员工年薪+奖金
select sal*12+comm from emp;//null代表不可预测的值,不可做四则运算
nvl函数:如果参数1为null,就返回参数2
select sal*12+nvl(comm,0) from emp;
字符串拼接:|| 、concat(str1,str2)mysql和ocale都有
*双引号:别名; 单引号:值,字符
查询员工姓名:姓名:scott
select ‘姓名:’||name from emp;
条件查询
where后面的写法
关系运算符:> =
逻辑运算符:and or not
其他: like 模糊查询
in(set)在某个集合内
between..and 在某个区间内
is null
is not null
查询每月得到奖金的员工机会
select * from emp where comm is not null;
select * from emp where sal between 1500 and 3000;
select * from emp where ename in ('dsf','sdf');
查询员工姓名第三个字符是o的信息:%任意字符
select * from emp where ename like '__o%';
查询包含%的姓名:
select * from emp where ename like '%\%%' escape '\';//转义字符
排序:order by
升序:asc
降序:desc
排序注意null,默认nulls first
同时排列多列,逗号隔开
查询员工信息,按照奖金降序
select * from emp order by comm desc nulls last;
查询部门编号和工资 按照部门升序,工资降序排序
select deptno,sal from emp order by deptno asc,sal desc;
函数
必须有返回值
单行函数:对列中某一行处理
对某一行某个值进行处理
数值函数
字符函数
日期函数
转换函数
通用函数
多行函数:对列中所有行处理
聚合函数:max() min() count sum avg
1.直接忽略空值
统计员工工资总和
select sum(sal) from emp;
统计员工人数
select count(1) from emp;
统计员工平均奖金
select ceil()
数值函数
select ceil(45.926) from dual;--46(返回大于参数的最小整数)
select floor(45.926) from dual;--45(返回小于参数的最大整数)
select round(45.926,2) from dual; --45.93
select mod(9,2) from dual; ---1
字符函数 substr(str1,index,length) index不管是0还是1都从第一个字符开始
select substr('abdsf',0,3) from dual;--abd
去除字符左右的空格
select trim(' hello ')
select replace('hello','l','a')
日期函数
查询今天日期
select sysdate from dual;
chax 3个月今天的日期
select add_months(sysdate,3) from dual;
转换函数
字符转数值 to_number(str)
数值转字符 to_char(sal,'$999,99')
日期转字符 to_char(sysdate,'yyyy-mm-dd')
字符转日期 to_date('2017-10-2','yyyy-mm-dd') from dual;
通用函数
nvl(参数1,参数2) 如果参数1为null,就返回参数2
nvl(参数1,参数2,参数3) 如果参数1为null,就返回参数3,否则为参数2
nullif(参数1,参数2)如果参数1=参数2,那么返回null,否则返回参数
条件表达式:(mysql oracle)
case 字段:
when 值1 then 值
when 值2 then 值
else
默认值
end
select
case ename
when 'SMITH' then '刘备'
else
'路人甲'
end
oracle 特有的decode(字段,if1,then1,if2,then2,else)
分组表达式 group by
select 分组条件,分组之后的操作 from 表名 group by 分组条件 having 条件过滤
分组统计所有部门的平均工资,找出平均工资大于1500的部门
select deptno,avg(sal) from emp group by deptno having avg(sal)>1500;
Sql编写顺序
select..from..where..group by..having..order by
sql执行顺序
from..where..group by..having..select..order by
where和having的区别
where后面不能接聚合函数,可以接单行函数
having在group by后执行,可以接聚合函数