操做符及SQL函数java
SQL操做符:算术运算符、比较运算符、逻辑运算符、集合操做符、链接操做符函数
算术操做符3d
算术操做符用于执行数值计算blog
能够在SQL语句中使用算术表达式,算术表达式由数值数据类型的列名、数值常量和链接它们的算术操做符组成ci
算术操做符包括加(+)、减(-)、乘(*)、除(/)字符串
例如:检索出课程号是‘02’的成绩+10分后的结果ast
select sid,cid,score+10 as lastscore where cid='02';class
nvl函数 若是comm列是空,则按0计算,否则sal+comm的空值,结果就会为空date
select empno,ename,sal+nvl(comm,0) as lastsal from emp;select
比较操做符
比较操做符用于比较两个表达式的值
比较操做符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等
逻辑操做符
逻辑操做符用于组合多个比较运算的结果以生成一个或真或假的结果
逻辑操做符包括与(AND)、或(OR)和非(NOT),NOT一般和AND,OR联合使用。
集合操做符
集合操做符是将两个查询的结果组成一个结果
UNION 操做符返回两个查询的不重复的全部行。
INTERSECT 操做符只返回两个查询的公共行。
MINUS 操做符返回从第一个查询结果中排除第二个查询中出现的行。
链接操做符
链接操做符用于将多个字符串或数据值合并成一个字符串
经过使用链接操做符能够将表中的多个列合并成逻辑上的一行列
SELECT ('学号为' || SID|| '的同窗姓名是' || SNAME) as SINFO FROM t_student;
操做符的优先级
SQL 操做符的优先级从高到低的顺序是:
算术操做符 --------最高优先级
链接操做符
比较操做符
NOT 逻辑操做符
AND 逻辑操做符
OR 逻辑操做符 --------最低优先级
SQL函数
SQL函数带有一个或多个参数并返回一个值
单行函数
单行函数对于从表中查询的每一行只返回一个值
能够出如今select子句中和where子句中
单行函数分为:字符函数、数字函数、日期函数、转换函数、其余函数
字符函数
字符函数接收字符输入并返回字符或数值
以及是一些其余的字符函数
CHR :根据ASCII码返回对应的字符
LPAD和RPAD :填充
TRIM :去除左右两边的空格符
LENGTH :字符串长度
DECODE :逐个值替换
例如:
SELECT LENGTH(‘student') FROM dual;
SELECT sname , DECODE(ssex,’m’,‘男’,‘f‘,’女’) as ssex FROM t_student;
数字函数
数字函数接收数字输入并返回数值结果
日期函数
日期函数对日期值进行运算,并生成日期数据类型或数值类型的结果
日期函数包括:ADD_MONTHS 、MONTHS_BETWEEN 、LAST_DAY 、ROUND 、TRUNC 、NEXT_DAY 、EXTRACT 计算年份差
转换函数
转换函数将值从一种数据类型转换为另外一种数据类型
经常使用的转换函数有:
TO_CHAR :按照指定的格式转化字符串
TO_DATE :将字符串转化成日期
TO_NUMBER :将数字字符串转化成数字
例如:
Select TO_CHAR(0.123,‘$0.9999') FROM DUAL;
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
SELECT TO_DATE(‘2005-12-06’ , ‘yyyy-mm-dd’) FROM dual;
SELECT TO_NUMBER('100') FROM dual;
其余函数
如下是几个用来转换空值的函数(scottemp)
NVL、NVL二、NULLIF
例如:查询员工工资和(工资sal+奖金comm)
Select empno ,sal +comm from emp;
Select empno ,sal + nvl(comm,0) from emp;
SELECT empno,sal + nvl2(comm,comm,0) from emp;
SELECT NULLIF(100,200) FROM DUAL;
分组函数
分组函数基于一组行来返回结果
为每一组行返回一个值
分析函数
分析函数根据一组行来计算聚合值
用来计算完成汇集的累计排名、移动平均数等
分析函数为每组记录返回多个行
如下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始
ROW_NUMBER 返回连续的排位,不论值是否相等
select ename,job,deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp;
RANK 具备相等值的行排位相同,序数随后跳跃
DENSE_RANK 具备相等值的行排位相同,序号是连续的
--计算年份差 select extract (year from sysdate)-extract(year from to_date('1995-08-26','yyyy-MM-DD')) age from dual; --add_months:指定某个时间段之后的日期 select add_months (sysdate,3) from dual;--指定三个月之后的日期 --months_between:相差的月数,其中小数是以1个月31天计算出来的 select months_between(sysdate,to_date('1995-08-26','yyyy-MM-DD'))from dual; --last_day:当月的最后一天 select last_day(sysdate) from dual; --round:四舍五入 select round(months_between(sysdate,to_date('1995-08-26','yyyy-MM-DD')))from dual; --trunc:只舍不入 select trunc(months_between(sysdate,to_date('1995-08-21','yyyy-MM-DD')))from dual; --转换函数 select to_char(0.123,'$0.999')from dual; select to_date('1995-01-07','yyyy-MM-DD')from dual; select to_number('1000')from dual; --分析函数 --ROW_NUMBER 返回连续的排位,不论值是否相等 select ename,job,deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp; --前三名 select * from( select ename,job,deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp )where sal_rank<=3; --RANK 具备相等值的行排位相同,序数随后跳跃 select ename,job,deptno,sal,rank() over(order by sal desc) as sal_rank from scott.emp; --DENSE_RANK 具备相等值的行排位相同,序号是连续的 select ename,job,deptno,sal,dense_rank() over(order by sal desc) as sal_rank from scott.emp; --其余函数 SELECT NULLIF(100,200) FROM DUAL;--两值相等则为空,不等则为第一个值