分页,外连接

前端之家收集整理的这篇文章主要介绍了分页,外连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1. 假设A公司的管理系统中有部门信息表(Dept)、员工信息表(Emp)、
工资信息表(Sal),表结构如下图所示:
Dept
部门号 部门名称
Dno Dname
Emp
员工号 姓名 性别 年龄 部门号
Eno Ename Esex Eage Dno
Sal
员工号 工资等级 工资
Eno Slevel Ssal
请回答以下问题:
1、查询所有在“研发部”的员工的员工号、姓名、性别和年龄,并且按姓名升序排序。
2、查询出工资最高的员工的工资和姓名。
3、在Emp表中增加字段备注(Eremark),允许为空,类型为字符串,最大长度为400。
4、给每个工资小于等于3000元的员工增加1000元工资。
5、现发现Sal表中记录比Emp中少几条,即有些员工的工资信息没有被存储到Sal表,
请筛选出这些员工的员工号、姓名和所属部门名称

1、select  eno,ename,esex,eage  from   emp    where   dno =(select    dno   from  dept  where   bname='研发部')    order  by   ename   asc 
select   e.eno,e.ename,e.esex,e.eage,e.dno    from    emp   e   inner  join   dept    d    on    e.dno=d.dno     where     dname='研发部'    order by   e.ename  desc
2、select    s.sal,e.ename    from    emp   e,sal  s   where    e.eno=s.eno   and   ssal=(select    max (ssal)   from   sal   )
3、alter    table    emp  add eremark  varchar2400()
4、update  sal   set  ssal=ssal +1000   where   sal<=3000
5、select   emp.eno,emp.ename,dept.dname    from   emp,dept   where  emp.eno=dept.dno   and  emp.eno   not   in   (select   eno   from   sal)
-------------------------------
1、seleect    eno,eage   from  emp where  dno=  (select  don   from dept   where  dname='研发部')    order  by   ename asc
select   e.eno,e.eage   from   emp  e  inner  join  dept   d   on   e.do=d.do   where   d.dname='研发部'  order  by    e.ename    desc;
2、select    s.sal,e.name  from   emp e   innner joi n   sal   s   where    e.no  =d.no   and  ssal=(select  max(sal )   from   sal)
3、alter   table   emp    add  eremark  varchar2(400)
4  、update sal   set  sal=sal+1000  where  sal<=3000
5、select   emp.no,emp.name,dept.name  from    emp,dept   whe re   emp.no=dept.no  and   emp.no  not  in   (select  eno from  sal)

使用左外连接:
select   emp.eno,dept.dno   from   emp   left  out   join   sal   emp.no=sal.no  inner  join   dept    on emp.no=dept.no    wh ere   sal.no  is   null; 

--1. 表连接补充 --左外连接(左边表独有的数据)、 --右外连接(右边表独有的数据),--全外连接(两张表独有数据) --内连接 select e.*,d.* from emp e inner join dept d on e.deptno=d.deptno; select e.*,d.* from emp e,dept d where e.deptno=d.deptno; --左外连接 select e.*,d.* from emp e left join dept d on e.deptno=d.deptno; --左外连接(左边表独有的数据,右表为空) select e.*,d.* from emp e left join dept d on e.deptno=d.deptno where d.deptno is null; --右外连接 select e.*,d.* from emp e right join dept d on e.deptno=d.deptno; --右外连接(右边表独有的数据,左表为空) select e.*,d.* from emp e right join dept d on e.deptno=d.deptno where e.deptno is null; --全外连接 select e.*,d.* from emp e full join dept d on e.deptno=d.deptno; --全外连接(两张表独有数据,左表或右表为空) select e.*,d.* from emp e full join dept d on e.deptno=d.deptno where e.deptno is null or d.deptno is null; --like例子 select * from emp where empno like '76%'; select * from emp where ename like '_IN%'; select * from emp where ename like '_A%'; select * from emp where ename like '[A-Z]'; select * from emp where regexp_like(ename,'[A-C]'); select * from emp where regexp_like(empno,'^7[68]'); select * from emp where regexp_like(empno,'7[68]'); --3.rownum补充 -- 不能对ROWNUM使用>(大于或等于1的数值)、>=(大于1的数值)、=(大于1的数值) -- 所以直接用只能从1开始 -- rownum >10 没有记录,因为第一条不满足去掉的话,第二条的ROWNUM又成了1, --所以永远没有满足条件的记录。 select * from emp where rownum<=5; -- 查询第5到第10记录 select * from emp where rownum<=10; --如果想要用rownum不从1开始,需按下面方法使用 select a1.* from (select emp.*,rownum rn from emp) a1 where rn >5; select e.* from (select * from emp order by sal desc)e where rownum <=5; select * from emp; --分页一 select a1.* from (select e.*,rownum rn from emp e where rownum<=10) a1 where a1.rn>=5; --分页二 select a1.* from (select e.*,rownum rn from emp e) a1 where a1.rn>=5 and a1.rn<=10; select a1.* from (select e.*,rownum rn from emp e) a1 where a1.rn between 5 and 10; -- 分页三 select e.* from emp e; -- 分页三 select a1.* from (select b.*,rownum rn from (select * from emp order by sal desc) b where rownum<=10) a1 where a1.rn>=1; -- 分组查询 select * from emp; select * from dept; --显示部门平均工资低于2000的部门号和它的平均工资,并按平均工资倒序排列 select e.deptno,avg(sal) from emp e where e.deptno is not null group by e.deptno having avg(sal)<2000 order by avg(sal) desc;

猜你在找的Oracle相关文章