zoukankan      html  css  js  c++  java
  • 根据emp,dept,salgrade表进行的sql查询语句(2)

    -- 1.取得每个部门最高薪水的人员名称
    SELECT
    ename AS '姓名'
    FROM
    emp
    JOIN ( SELECT deptno, max( sal ) AS max_sal FROM emp GROUP BY deptno ) AS b ON emp.deptno = b.deptno AND emp.sal = b.max_sal;

    -- 2.哪些人的薪水在部门的平均薪水之上
    select ename as '姓名' from emp
    JOIN ( SELECT deptno, avg( sal ) AS avg_sal FROM emp GROUP BY deptno ) AS b ON emp.deptno = b.deptno AND emp.sal > b.avg_sal;

    -- 3.取得部门中(所有人的)平均的薪水等级
    select ename,deptno,grade from emp join salgrade on sal between losal and hisal;

    -- 4.不准用组函数(Max),取得最高薪水
    SELECT * FROM emp ORDER BY sal DESC LIMIT 0,1;

    -- 5.取得平均薪水最高的部门的部门编号。
    select deptno from emp group by deptno order by avg(sal) desc limit 0,1;

    -- 6.取得平均薪水最高的部门的部门名称***
    select dname from dept where deptno = (select deptno from emp group by deptno order by avg(sal) desc limit 0,1);

    -- 7.求平均薪水的等级最低的部门的部门名称。

    select e.deptno ,avg(e.grade),d.dname from (select ename,deptno,grade from emp join salgrade on sal between losal and hisal) as e, dept d where d.deptno=e.deptno group by deptno order by avg(e.grade) asc limit 0,1;

    -- 8.取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的经理人姓名

    select * from emp where job='MANAGER' and sal>(
    select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null ));

    -- 9.取得薪水最高的前五名员工
    select * from emp order by sal desc limit 0,5;

    -- 10.取得薪水最高的第六到第十名员工
    select * from emp order by sal desc limit 5,10;

    -- 11.取得最后入职的5名员工
    select * from emp order by hiredate desc limit 0,5;

    -- 12.取得每个薪水等级有多少员工
    ①. select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
    ②. select s.grade,count() from emp e join salgrade s on e.sal between s.losal and s.hisal group by s.grade;
    ③. select s.grade,count(
    ) from emp e join salgrade s on e.sal between s.losal and s.hisal group by s.grade;

    -- 13.列出所有员工及直接上级的姓名
    select e.ename '员工姓名',p.ename '领导姓名' from emp e,emp p where e.mgr = p.empno;

    -- 14.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称

    1. 求出受雇日期遭遇上级的员工编号和姓名
      SELECT E.empno,E.ename FROM EMP E,EMP M WHERE E.hiredate<M.hiredate AND E.MGR=M.empno
      2.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
      SELECT E.empno,E.ename,DNAME FROM EMP E,EMP M,DEPT WHERE E.hiredate<M.hiredate AND E.MGR=M.empno AND E.deptno=dept.DEPTNO

    -- 15.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
    select d.dname ,e.* from dept d left join emp e on d.deptno=e.deptno;

    -- 16.列出至少有一个员工的所有部门 ,
    select distinct d.* from dept d,emp as p where d.deptno = p.deptno;

    -- 17.列出薪金比"SMITH"多的所有员工信息.
    select * from emp where sal>(select sal from emp where ename='SMITH');

    -- 18.列出所有"CLERK"(办事员)的姓名及其部门名称,部门的人数.
    SELECT COUNT() S,DEPTNO FROM EMP GROUP BY DEPTNO;
    select e.ename,e.deptno,d.dname,n.S from emp e,dept d,(SELECT COUNT(
    ) S,DEPTNO FROM EMP GROUP BY DEPTNO) n where e.deptno=d.deptno and e.deptno=n.deptno and job='CLERK'

    -- 19.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数.
    select distinct e.job ,n.s from emp e ,(select count(*) s, job from emp group by job) n where e.job=n.job and e.sal>1500;

    -- 20.列出在部门"SALES"<销售部>工作的员工的姓名,假定不知道销售部的部门编号.
    select ename from emp where deptno = (select deptno from dept where dname ='SALeS');

    -- 21.列出与"SCOTT"从事相同工作的所有员工及部门名称. 两种方法
    -- 1.
    select * from emp,dept where emp.deptno=dept.deptno and emp.job=(select job from emp where ename='SCOTT');
    -- 2.
    select * from emp left join dept on emp.deptno=dept.deptno where emp.job=(select job from emp where ename='SCOTT');
    --3.
    select * from emp right join dept on emp.deptno=dept.deptno where emp.job=(select job from emp where ename='SCOTT');

    -- 22.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金.
    SELECT SAL FROM EMP WHERE DEPTNO=30
    SELECT ENAME,SAL FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE DEPTNO=30) AND DEPTNO!=30

    -- 23.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金.部门名称. 三种方法
    select e.ename,e.sal,d.dname from emp e,dept d where e.sal >(select max(sal) from emp where deptno=30)and e.deptno=d.deptno;

    -- 24.列出在每个部门工作的员工数量,平均工资和平均服务期限.
    select e.deptno, m.s,round(avg(sal)) '平均工资', round(avg(datediff(now(),hiredate)/365)) '平均服务年限'from emp e,(select count(*) s,deptno from emp group by deptno) m where e.deptno=m.deptno group by deptno;

    -- 25.列出所有员工的姓名、部门名称和工资。
    select e.ename '姓名', d.dname '部门名称', e.sal '工资' from emp e,dept d where e.deptno=d.deptno;

    -- 26.列出所有部门的详细信息和人数
    select d.,if(isnull(e.cou),0,e.cou) '人数' from (select count() cou,deptno from emp group by deptno) e right join dept d on (e.deptno=d.deptno);
    -- 27.列出各种工作的最低工资及从事此工作的雇员姓名
    select job,min(sal),ename from emp group by job;

    -- 28。列出各个部门的MANAGER(经理)的最低薪金
    select job,ename,min(sal) from emp where job='MANAGER' group by deptno;

    -- 29.列出所有员工的年工资,按年薪从低到高排序
    select ename as '姓名', (sal12)+(ifnull(comm,0)12) as '年薪' from emp ORDER BY 年薪 asc;

    -- 30.查出某个员工的上级主管,并要求出这些主管中的薪水超过3000.
    select e.ename '员工姓名', m.ename '员工上级姓名', m.sal from emp e,emp m where e.mgr=m.empno and m.sal>3000;

    -- 31.求出部门名称中,带'S'字符的部门员工的工资合计、部门人数.
    select deptno from dept where dname like '%S%';
    select s.dname,sum(sal) ,count(empno) from (select deptno,dname from dept where dname like '%S%') s left join emp e on e.deptno=s.deptno group by e.deptno;

    -- 32.给任职日期超过25年的员工加薪10%.
    select ename, sal*1.1 from emp where extract(year from now())-25 >extract(year from hiredate);

  • 相关阅读:
    JS实现右侧悬浮框随着页面的上下轮动而移动
    js实现一个简单的时钟表
    js实现前后端分离点击新闻列表跳转到相应的详情页
    获取当前时间的年、月、日
    点击获取今天时间、明天时间、本周时间、本月时间
    判断是不是ie7浏览器,把https换成http(兼容ie7)
    jq控制class相同点击隐藏当前相同的父元素
    js、jq控制class相同当子元素为空时,父元素隐藏
    photoshop
    不得不说一下vite
  • 原文地址:https://www.cnblogs.com/luayan/p/14695361.html
Copyright © 2011-2022 走看看