Oracle的学习理解

本篇很多都是自己学习的时候理解,习惯用大白话的方式写入。
学习数据库可以看做是学习SQL,虽Oracle和Mysql中的SQL语法有许些不同之处,却也相差不多。
(膨胀了,竟然学Oracle了,死贵,用不起啊)

一些比较运算符和逻辑运算符什么的,也就不写了。(因为一看都明白是干啥用的)
但是有一些需要注意的地方:
1、在Oracle数据库中,null 并不是我们理解上的空,在数据库中是一个比较特殊的存在,null做任何运算都还是null。一般就需要将null进行转换。例如:nvl(a1,a2) a1为null返回a2

select * from emp where null=null;

结果是什么都没有
这里从查询模型来看:将列看做是变量,将where之后的看为表达式。true返回,false则说明都没有。
同理可得

2、还发现一个有趣的关键字,exists关键字。怎么说呢,很鸡肋的一个关键字,平常不用,面试还老爱问。
exists(sub-query) 是否存在于这个子句中,从字面意思一听。完全可以用in或者逻辑运算符。

--现在要查询部门编号为10和20的员工(看看这方法多简单干脆)
select * from emp where deptno in(10,20);
select * from emp where deptno=10 or deptno=20;


--现在要查询部门编号为10和20的员工,要求使用exists实现
select *
  from emp
 where exists (select p.deptno
          from emp p
         where p.deptno = 10
            or p.deptno = 20) 
/*
明明从内层是查询到了结果,可是为什么查询到的结果不是我想要的呢
原因:exists中的子句可以查询到对应的结果的时候,就意味着条件是恒定满足的,
想到于双层for循环,需要把外层的sql结果拿到内层sql去比较,如果内层的sql依旧成立,才会将该值取出
*/
                       
 select *
   from emp e
  where exists (select p.deptno
           from emp p
          where (p.deptno = 10
             or p.deptno = 20) and e.deptno=p.deptno)

咦~今儿想写的不是上面那些,今儿个写一下函数,加深理解。

----SQL函数篇:
函数一般是在数据上执行的(有点计算向数据移动的意思),给数据的转换和处理提供了更多的便利。
只是将取出的数据进行处理,并不会改变数据库中的值。

----SQL函数可分为组函数和单行函数
组函数:也叫(聚合)函数,用于对多行的数据进行操作,返回一个单一的结果,使用的范围只有选择列表(也就是select 表中字段操作)或者是查询having子句,对结果再次进行筛选。
单行函数:对单个数值进行操作,并返回一个值

先来讲讲单行函数:单行函数中有 字符函数、数字函数、日期函数、转换函数、还有一些其他的函数
字符函数:

--字符函数 用字符串作为参数,返回字符或者数字

--concat(str1,str2) 连接俩个字符串 ||(也可以进行字符串的拼接) 等效的,喜欢哪种用哪种
select concat('kai','si') from dual;
select 'kai' || 'si' from dual;
-- initcap(str) 返回每个单词首字母的大写,(出了首字符其他的竟然转成了小写)
select initcap(ename) from emp; 
--lower(str) 转换为小写的形式返回str
select lower(ename) from emp;
--upper(str) 全部转为大写
select upper('jqk') from dual;
--lpad(str,int,符号站位用),rpad 填充字符型数据
select lpad('kaisi',10,'%') from dual;
select rpad(ename,10,'#') from emp;
--trim 清除空格用的
select trim('  asd  ') from dual;
select ltrim(ename) from emp;
select rtrim(ename) from emp;
-- instr(str,'x')查找指定的字符串,返回数字(第一次出现这个字符的位置)
select instr('bacjka','a') from dual;--2
--substr(str,x,y) 提取字符串中的某一部分,从x开始截取y个
select substr('asdcccd',3,3) from dual;
--length()很简单,就是长度
select length('addsd') from dual;

数值函数:

--数值函数:

--round()返回数据的四舍五入
select round(24.365,2) from dual;
select round(24.365,-1) from dual;
select round(24.3654,3) from dual;

--trunc() 按位数截取,并且不会进行四舍五入操作
select trunc(24.224,2) from dual;
--取模操作 mod()
select mod(10,3) from dual;
--向上取整 ceil()
select ceil(15.3) from dual;
--向下取整floor()
select floor(15.9) from dual;
--绝对值 abs()
select abs(-15) from dual;
/*
返回】数字,若为正值返回1,负值返回-1,0返回0
sign()
*/
select sign(-5) from dual;
--整次幂 power()
select power(2,2) from dual;

–突然感觉这些API都有,写了也没人爱看。不写了,下次写点有趣的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值