oracle数据库学习笔记(day3)

单行函数(续)

1.数值函数
round:四舍五入
 select round(12.5) from dual;  结果为:13
 select round(-12.5) from dual;  结果为:-13
trunc:直接截断,只舍不入
 select trunc(12.5) from dual;  结果为:12
 select trunc(-12.5) from dual;  结果为:-12
mod:模运算(取余)
 select mod(11,4) from dual;  结果为:3
2.日期函数
sysdate:当前数据库服务器系统时间
add_months(date,数字):date与数字运算后的月份
next_day(date,'星期?'):从date开始下一个星期?的日期
last_day(date):date日期当月的最后一天
month_between(date1,date2):date1与date2之间相差的月份数
extract(xx from date):从date日期里取出xx(年year/月month/日day)
3.转换函数
to_char()
to_timestamp()
to_number()
to_date()
4.通用函数
nvl(表达式1,表达式2):如果表达式1不为null,则结果为表达式1,如果表达式1为null,则结果为表达式2
nvl2(表达式1,表达式2,表达式3):如果表达式1为null,则此函数结果为表达式2,如果不为null,则结果为表达式3
nullif(表达式1,表达式2,表达式3):如果表达式1与表达式2相同,则此函数结果为null,如果不同则结果为表达式1
decode(表达式,
  判断1,显示结果1,
  判断2,显示结果2,
  ……
  默认值)
case 表达式 when 条件1 then 结果1 
when 条件2 then 结果2
……
else 结果
  end [别名]
coalesce(表达式1,表达式2,表达式3……):结果为第一个不为null的表达式,如果表达式全部为null,则函数结果为null

*多表查询(应尽量避免三表以上的查询)
  多表查询会产生笛卡尔积,我们的目标就是消除笛卡尔积,对抗全表扫描

1.关联
1>内连接(等值连接)
  select e.ename,e.job,e.deptno,d.deptno,d.dname,d.loc
  from emp e,dept d
  where e.deptno=d.deptno;(等值连接)
2>外连接
  select *
  from emp e,dept d
  where e.deptno=d.deptno(+)(左连接)
  select *
  from emp e,dept d
  where e.deptno(+)=d.deptno(右连接)

**SQL1999语法

3>自身关联
--查询每个员工的编号、姓名,及上司的编号、姓名
select e.empno,e.ename 员工,m.empno,m.ename 上司
from emp e,emp m
where e.mgr=m.empno;

4>交叉连接cross join (会产生笛卡尔积)
select *
from emp(表1) cross join dept(表2);

5>自然连接natural join(自动消除笛卡尔积)
select *
from emp(表1) natural join dept(表2);

*using子句: 指定关联字段
select *
from emp(表1) join dept(表2)
using(deptno(关联字段));

*on子句:指定关联条件
select *
from emp(表1) join salgrade(表2)
on(emp.sal between salgrade.losal and salgrade.hisal(关联条件))

6>外连接
*左外连接
select *
from emp left outer join dept
using(deptno)
*右外连接
select *
from emp right outer join dept
on(emp.deptno=dept.deptno)
*全外连接
select *
from emp full outer join dept
using(deptno)/on(emp.deptno=dept.deptno)

2.集合运算
 union(并集,第一集合与第二集合的和,自动消除重复部分)
 union all(并集,第一集合与第二集合的和,不消除重复部分)

select *
from emp
where deptno=10 and job='MANAGER'
UNION
select *
from emo
where deptno=30 and job='CLERK'

 minus(差集,第一集合消除与第二集合的公共部分)

select * from emp
minus
select * from emp where deptno=10

 intersect(交集,两个集合重复(公共)的部分)

select * from emp
intersect
select * from emp where deptno=10

猜你喜欢

转载自blog.csdn.net/xiaoap009/article/details/80201546