共计 2471 个字符,预计需要花费 7 分钟才能阅读完成。
一、操作符:
1、分类:
算术、比较、逻辑、集合、连接;
2、算术操作符:
执行数值计算;
— 工资加 1000
select empno,ename,job,sal+1000 from emp;
3、比较操作符:
— 比较运算符 (between and 包头不包尾)
select * from emp where sal between 1000 and 2000;
(不等于是!=,在 mysql 中是 <> )
4、逻辑操作符:and or not
– 查询奖金不为空的员工信息
select * from emp where comm is not null;
5、集合操作符:
将两个查询的结果组合成一个结果:
select sid from t_score where score>=70 and cid = ’01’
INTERSECT
select sid from t_score where score>=70 and cid = ’07’;
①、intersect 返回两个查询的公共行;
②、union: 返回两个查询的不重复的所有行;这里面可以是一个表中的数据(在 mysql 中是另外的联合查询 – 不是一个表)
③、minus: 返回从第一个查询的结果中排除第二个查询中出现的行;(在第一个的结果中查找不满足第二个的)
6、连接操作符:
将多个字符串或数据值合并成一个字符串;
– 连接操作符
select (‘ 员工号为 ’||empno||’, 姓名为 ’||ename||’ 的工资为 ’||sal) from emp
7、优先级:
算术 > 连接 > 比较 >not 逻辑 >and 逻辑 >or 逻辑操作符
二、SQL 函数:
用于执行特殊的操作的函数;
1、分类:
单行、分组、分析;
2、单行函数分类:
从表中查询的每一行只返回一个值;
字符、数字、日期、转换、其他;
3、字符函数:
— 字符串函数
select lower(ename),job from emp; – 小写
select ltrim(‘xysdezadmas’,’xyz’) from dual;– 截取:从左边开始按后面字段开始截取,有几个截取几个,没有就不截取
①、其他字符函数:
chr: 根据 ASCII 码返回对应的字符(0:48 a:97 A:65)
lpad 和 rpad:填充;
trim: 去除左右两边的空格符;
lenth: 字符串长度;
decode: 逐个值置换;
select sname,decode(cid,1,’ 开发部 ’)as 部门 from Java0322;
select ename,decode(job,’CLERK’,’ 职员 ’,’SALESMAN’,’ 导购 ’) as 工作 from emp
4、数字函数;
5、日期函数:
对日期值进行计算,并生成日期数据类型或数值类型的结果;
add_months 偏移;
months_between: 月数差;
last_day 最后一天;
round: 四舍五入;
trunc: 只舍不入,返回指定日期模式截断后的第一天;
next_day(d,day): 下周周几的日期
extract: 计算年份差:
– 日期函数
select add_months(sbirth,-3) from java0322;– 月份偏移 3 月,可以是负数,也就是向前偏移
select extract(year from sysdate) from dual;– 截取当前时间的年份
select sname,extract(year from sysdate) – extract(year from sbirth) from java0322;– 计算年纪
6、转换函数:
to_char: 按照指定的格式转化字符串;
to_date: 将字符串转化为日期;
to_number: 将数字字符串转化为数字;—- 可以实现直接在 sql 语句中进行格式的转换
– 转换函数 (字符串,格式)
Select TO_CHAR(0.123,’$0.9999′) FROM DUAL;
– 字符串转日期
select to_date (‘2005-02-28′,’yyyy-mm-dd’) from dual;
– 字符串转数字
select to_number(’20’) from dual;
其他函数:
nvl:isnull,不为空时为本身,为空时指定 0;
nvl2: 不为空时指定值 2,为空时指定值 3;
NullIF:相等时为空,否则为前者
– 查询员工表的所有人的姓名,工资 + 奖金 (奖金没有的时候,由 null 转为 0)—nvl 转换空值的函数
select ename,sal+nvl(comm,0)as sal from emp;– 当空为 0,不为空为 comm
select ename,sal+nvl2(comm,10000,0) from emp;— 不为空时 10000,为空时 0;
select nullif(100,200) from dual;– 相等为空,不等为前者
7、分组函数:
基于一组行来返回结果;
avg、min、max、sum、count
8、分析函数:
根据一组行来计算聚合值;用于计算完成聚集的累计排名、移动平均数等;
row_number: 返回连续的排位,不论值是否相等;
rank: 具有相等值的行排位相同,序数随后跳跃;
dense_rank: 具有相等值的行排位相同,序号是连续的
— 排位
select empno,ename,job,sal,row_number()over (order by sal desc) as numm from emp; – 返回连续的排位,不论值是否相等 12345
select empno,ename,job,sal,rank()over (order by sal desc) as numm from emp; – 相等值的行排位相同,序号随后跳跃;12245
select empno,ename,job,sal,dense_rank()over (order by sal desc) as numm from emp; – 相等值的行排位相同,序号是连续的;12234
更多 Oracle 相关信息见 Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12
: