码迷,mamicode.com
首页 > 数据库 > 详细

Java38: 数据库二(Oracle)

时间:2016-08-08 19:37:50      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:java   字符串   表达式   import   public   

  

group by 分组

--每个工作的人数
select count(job) from emp group by job;
--有多少工作
select count(coutn(job)) from emp group by job;
--每个工作的最高工资
select max(sal) from emp group by job;
--每个工作的最低工资
select min(sal) from emp group by job;
--每个工作的平均工资
select avg(sal) from emp group by job;
--所有工作中最大的平均工资
select max(avg(sal)) from emp group by job;

使用having  根据条件过滤组

select job,count(job) from emp group by job having count(job)>=3;


where 用在group by 之前

select job,count(job) from emp where sal>1000 group by job having count(job)>=3;


decode 函数

decode(value1 if1 then1 if2 then2 ... else)

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

 如果 value1=if1 返回then1

    否则 如果 value1=if2 返回 then2

        默认的返回值是else

select decode(sal,1600,‘一千六‘,5000,‘五千‘,‘其他‘) from emp;

--按照job的内容分类统计其中部门ID是30的人数
select job,count(decode(DEPTNO,30,1,null)) deptno from emp group by(job);
--按照部门分类 统计每个部门中工作是CLERK的人数
select deptno,count(decode(job,‘CLERK‘,1,null)) counts from emp group by(deptno);
--按照部门分类 计算每个每部中工作是CLERK的平均工资
select deptno,avg(decode(job,‘CLERK‘,sal,null)) CLERK_AVG_SAL from emp group by(deptno);
insert into emp values(8000,‘lmdtx‘,‘CLERK‘,8080,to_date(‘1980/09/09‘,‘yyyy/mm/dd‘),30000,null,null);
insert into emp values(8880,‘dsy‘,‘CLERK‘,8980,to_date(‘1982/02/02‘,‘yyyy/mm/dd‘),3000,null,null);

表的关联

    外键 在一个表中 存着对应另外一张表的主键

 连接表

    1·笛卡尔积  emp 表中 deptno 为空的查询不到 

--emp表中的所有的行* dept中的所有的行
select * from emp,dept;
--需要写过滤条件 过滤掉不需要的
select * from emp,dept where emp.deptno=dept.deptno;

select * from emp e.dept d where e.deptno=d.deptno;

    2·内连接   这个结果和笛卡尔积 用条件后的结果一样

inner join 和 join 一样(省略 inner) 默认就是 内连接

join...on...
from emp e inner join dept d on e.deptno=d.deptno

两个表的名字一样的 

from emp inner join dept using(deptno)
select * from emp e inner join dept d on e.deptno=d.deptno;

select * from emp inner join dept using(deptno);

     3·外连接

         1·左外接(左边表的数据必须是全都有的,没有的地方补null)

from emp left outer join dept using(deptno)

select * from emp left outer join dept on emp.deptno=dept.deptno;
select ename,nvl(dname,‘还没有部门‘) from emp2 left outer join dept2 using(deptno);

        2·右外接

select * from emp right outer join dept using(deptno);

--查询所有部门的名称和部门人数按人数的降序排
select dname,count(empno) num 
from emp2 right join dept2 Using(deptno) 
group by dname 
order by num desc;

         3·全外接(全都有)

emp full outer join dept
select * from emp full outer join dept using(deptno);
--查询所有部门的名称以及部门的人数 没有部门的人 化为 未分配
select nvl(dname,‘未分配‘),count(empno) 
from emp2 full outer join dept2 using(deptno) 
group by dname 
order by dname;


select nvl(dname,‘未分配部门‘) 部门名字,decode(count(empno),0,‘未分配人手‘,count(empno)) 人数 
from emp2 full outer join dept2 using(deptno) 
group by dname 
order by dname;

    4·自连接




实体表

关联表

字典表







本文出自 “浪漫的偷笑” 博客,请务必保留此出处http://lmdtx.blog.51cto.com/6942028/1835724

Java38: 数据库二(Oracle)

标签:java   字符串   表达式   import   public   

原文地址:http://lmdtx.blog.51cto.com/6942028/1835724

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!