加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

分页,外连接

发布时间:2020-12-12 14:32:50 所属栏目:百科 来源:网络整理
导读:1. 假设A公司的管理系统中有部门信息表(Dept)、员工信息表(Emp)、 工资信息表(Sal),表结构如下图所示: Dept 部门号 部门名称 Dno Dname Emp 员工号 姓名 性别 年龄 部门号 Eno Ename Esex Eage Dno Sal 员工号 工资等级 工资 Eno Slevel Ssal 请回答以下问
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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读