Oracle笔记(3)

分组:

delect deptno avg(sal) from emp group by deptno;

//deptno 因为是分组的。不能单独用。

SQL> select deptno,avg(sal) from emp;

select deptno,avg(sal) from emp

       *

第 1 行出现错误:

ORA-00937: 不是单组分组函数

 

//遇到其他不需要分组字段需要放在最后

SQL> select deptno,job,avg(sal) from emp groupby deptno,job;

 

 

如果需要判断可以使用having

SQL> select deptno,avg(sal) from emp group bydeptno having avg(sal)>=2000;

这里不能使用where ,在一些情况下where和having可以互换。

--where后不能跟组函数

--如果既可以用where又可以用having,就用where,先筛选再分组效率高

select deptno,avg(sal) from emp where deptnoin(10,20) group by deptno;

 

 

 

 

下午:

 

多表:

select e.ename,e.job,d.dname from emp e,dept d; //但是这样会产生笛卡尔积

 

所有要给定条件:

select e.ename,e.deptno,d.dname from emp e,dept dwhere e.deptno=d.deptno;

 

查询emp表中工资大于salgrade表中losal且小于hisal的结果:

SQL> select e.ename,e.job,s.grade from empe,salgrade s where e.sal>s.losal and e.sal<s.hisal;

 

ENAME     JOB            GRADE                                                                                                                      

---------- --------- ----------                                                                                                                      

SMITH     CLERK              1                                                                                                                      

JAMES     CLERK              1                                                                                                                      

ADAMS     CLERK              1                                                                                                                      

WARD      SALESMAN           2                                                                                                                      

MARTIN    SALESMAN           2                                                                                                                       

MILLER    CLERK              2                                                                                                                      

TURNER    SALESMAN           3                                                                                                                      

ALLEN     SALESMAN           3                                                                                                                      

CLARK     MANAGER            4                                                                                                                      

BLAKE     MANAGER            4                                                                                                                       

JONES     MANAGER            4                                                                                                                      

KING       PRESIDENT          5       

并且部门是三号:

 

SQL> select e.ename,e.job,s.grade from empe,salgrade s where e.sal>s.losal and e.sal<s.hisal and s.grade =3;

 

 

左外连接:(oracle写法)

select d.deptno,d.dname,count(e.ename) from empe,dept d where e.deptno(+)=d.deptno group by d.deptno,d.dname

通用写法:

selece d.edeptno,d.dname,count(e.ename) from emp eright join dept d on e.deptno = d.deptno group by d.deptno,d.dname;

//两个表用jion连接。判断用on连接。//右连接同理。

 

 

自连接:

select e.ename,p.ename from emp e,emp p wheree.mgr = p.ename;

//把一个表虚拟出两张表,再进行操作。判断第一个表的mgr 等于第二个的ename所有得到e.ename的上司。

 

子查询:

//相当于把一条语句的结果拿来执行第二条语句。子查询通常跟在select、from、where、having后面。

select ename,deptno from emp where deptno= (selectdeptno from emp where ename='SCOTT')

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值