本篇很多都是自己学习的时候理解,习惯用大白话的方式写入。
学习数据库可以看做是学习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都有,写了也没人爱看。不写了,下次写点有趣的