1、单行函数-数字
函数 说明
sin(x) 返回x的正弦值
sinh(x) 返回x的双正弦值
sqrt(x) 返回x的平方根,x必须大于0
tan(x) 返回x的正切值
tanh(x) 返回x的双正切值
trunc(x,[,y]) 截取数字。如y省略,则截去x的小数部分;
y为负,截小数点前y位
y为正,截小数点后y位
log(y,x) 返回以y为底数的对数,y不能为0
mod(y,x) 返回y除以x的余数,如果x为0则返回y
power(y,x) 返回以y为底的x次幂,y和x可为任意数字,y为负,x必须为正
round(x,[,y]) 四舍五入,y省略,四舍五入到整数位;
y为负,则到小数点前y位
y为正,则到小数点后y位
sign(x) 检查x的正负,如果x为负,返回-1,为正返回1,0返回0
2、单行函数-日期
Oracle中日期和时间是一起存储的,其数据类型是date或者timestamp
·date可以存储年、月、日、时、分、秒
·timestamp除了以上还可以存储带小数的秒、时区
3、单行函数-数字
Oracle中,以7位数字格式来存放日期时间,
其整数部分从公元前4712年1月1日开始。
默认的日期格式
DD-MM-YYYY
01-5月-2013
4、单行函数-日期函数
Oracle提供了4种显示的日期,字符转换函数
常用的为以下两种
·to_char() //把日期或数字转换为字符串
select ename,to_char(hiredate,'YYYY-MM-DD') from scott.emp;
·to_date() //把字符串转换为日期类型
select to_date('2006-05-01','YYYY-MM-DD') from dual;
5、单行函数-日期时间运算函数
·add_month() //月份增加
select sysdate,add_months(sysdate,3) from dual;
·last_day() //当月最后一天
select sysdate,last_day(sysdate),last_day(sysdate)+1 from dual;
·months_between() //月份差
select months_between('17-9月-2013','17-9月-2013') from dual;
·next_day() //下一个满足条件的日期
select next_day(sysdate,'星期一') as 第一个结果,
next_day('18-9月-2013','星期六') as 第二个结果 from dual;
6、单行函数-字符函数
·chr() //ASCII转换
select chr(65),chr(97) from dual;
·concat() //字符串连接
select concat('新点','软件有限公司') from dual;
·initcap() //单词首字母大写
select initcap('XINDIAN,ruan jian') from dual;
·length() //字符串长度
select length('XINDIAN ruan jian') from dual;
·lower() //字符串小写
select lower('XINDIAN,ruan jian') from dual;
·upper() //字符串大写
select upper('XINDIAN,ruan jian') from dual;
7、集合查询
·集合运算符,可以将多个select语句的查询结果集合并起来
运算符 说明
union all 返回两个结果集的所有行,包括重复行,即并
union 返回两个结果集的所有行,不包括重复行,即并
minus 返回第一个结果集中有但是第二个结果集中没有的行,即差
intersect 返回两个结果集都有的行,即交
8、子查询
子查询是指嵌套在其他sql语句中的一个查询
使用子查询可以用一系列简单的查询构成复杂的查询,
从而明显增强SQL语句的功能。
子查询在查询前执行一次。主查询使用子查询的结果
9、子查询-分类
·单行子查询是指不向外层查询返回查询记录或者只返回一条查询记录
·多行子查询可以向外层返回多行记录
·多行子查询使用的运算符:in、not in、exists、not exits、all、any,
其中all和any必须与比较运算符一起综合使用。
<ANY 指小于子查询中的最大值
<ALL 指小于子查询中的最小值
10、子查询-多行子查询
多列子查询一般用于比较多个列的数据,在多列子查询返回单行数据时,
在where子句中可以使用单号运算符(如=),
当返回多行数据时则必须使用多行运算符(如in)
#############################练习#######################################
1、查询与部门20岗位不同的员工姓名、工资
select ename, sal
from emp
where job not in (select distinct job from emp where deptno = 20);
2、查询与SMITH部门、岗位完全相同的员工姓名、工作、工资
select ename, job, sal
from emp
where ename <> 'SMITH'
and deptno = (select deptno from emp where ename = 'SMITH')
and job = (select job from emp where ename = 'SMITH');
函数 说明
sin(x) 返回x的正弦值
sinh(x) 返回x的双正弦值
sqrt(x) 返回x的平方根,x必须大于0
tan(x) 返回x的正切值
tanh(x) 返回x的双正切值
trunc(x,[,y]) 截取数字。如y省略,则截去x的小数部分;
y为负,截小数点前y位
y为正,截小数点后y位
log(y,x) 返回以y为底数的对数,y不能为0
mod(y,x) 返回y除以x的余数,如果x为0则返回y
power(y,x) 返回以y为底的x次幂,y和x可为任意数字,y为负,x必须为正
round(x,[,y]) 四舍五入,y省略,四舍五入到整数位;
y为负,则到小数点前y位
y为正,则到小数点后y位
sign(x) 检查x的正负,如果x为负,返回-1,为正返回1,0返回0
2、单行函数-日期
Oracle中日期和时间是一起存储的,其数据类型是date或者timestamp
·date可以存储年、月、日、时、分、秒
·timestamp除了以上还可以存储带小数的秒、时区
3、单行函数-数字
Oracle中,以7位数字格式来存放日期时间,
其整数部分从公元前4712年1月1日开始。
默认的日期格式
DD-MM-YYYY
01-5月-2013
4、单行函数-日期函数
Oracle提供了4种显示的日期,字符转换函数
常用的为以下两种
·to_char() //把日期或数字转换为字符串
select ename,to_char(hiredate,'YYYY-MM-DD') from scott.emp;
·to_date() //把字符串转换为日期类型
select to_date('2006-05-01','YYYY-MM-DD') from dual;
5、单行函数-日期时间运算函数
·add_month() //月份增加
select sysdate,add_months(sysdate,3) from dual;
·last_day() //当月最后一天
select sysdate,last_day(sysdate),last_day(sysdate)+1 from dual;
·months_between() //月份差
select months_between('17-9月-2013','17-9月-2013') from dual;
·next_day() //下一个满足条件的日期
select next_day(sysdate,'星期一') as 第一个结果,
next_day('18-9月-2013','星期六') as 第二个结果 from dual;
6、单行函数-字符函数
·chr() //ASCII转换
select chr(65),chr(97) from dual;
·concat() //字符串连接
select concat('新点','软件有限公司') from dual;
·initcap() //单词首字母大写
select initcap('XINDIAN,ruan jian') from dual;
·length() //字符串长度
select length('XINDIAN ruan jian') from dual;
·lower() //字符串小写
select lower('XINDIAN,ruan jian') from dual;
·upper() //字符串大写
select upper('XINDIAN,ruan jian') from dual;
7、集合查询
·集合运算符,可以将多个select语句的查询结果集合并起来
运算符 说明
union all 返回两个结果集的所有行,包括重复行,即并
union 返回两个结果集的所有行,不包括重复行,即并
minus 返回第一个结果集中有但是第二个结果集中没有的行,即差
intersect 返回两个结果集都有的行,即交
8、子查询
子查询是指嵌套在其他sql语句中的一个查询
使用子查询可以用一系列简单的查询构成复杂的查询,
从而明显增强SQL语句的功能。
子查询在查询前执行一次。主查询使用子查询的结果
9、子查询-分类
·单行子查询是指不向外层查询返回查询记录或者只返回一条查询记录
·多行子查询可以向外层返回多行记录
·多行子查询使用的运算符:in、not in、exists、not exits、all、any,
其中all和any必须与比较运算符一起综合使用。
<ANY 指小于子查询中的最大值
<ALL 指小于子查询中的最小值
10、子查询-多行子查询
多列子查询一般用于比较多个列的数据,在多列子查询返回单行数据时,
在where子句中可以使用单号运算符(如=),
当返回多行数据时则必须使用多行运算符(如in)
#############################练习#######################################
1、查询与部门20岗位不同的员工姓名、工资
select ename, sal
from emp
where job not in (select distinct job from emp where deptno = 20);
2、查询与SMITH部门、岗位完全相同的员工姓名、工作、工资
select ename, job, sal
from emp
where ename <> 'SMITH'
and deptno = (select deptno from emp where ename = 'SMITH')
and job = (select job from emp where ename = 'SMITH');