SQL语句

作者: 神的孩子都该跳舞 | 来源:发表于2017-05-22 09:12 被阅读0次

    1.选择在部门30中员工的所有信息?
    关键词:部门30 所有信息:*
    depto=30
    select * from emp where depto=30; 还是‘30’

    2.列出职位为(MANAGER)的员工的编号,姓名?
    EMPNO:编号 ENAME:姓名
    关键词:职位为MANAGER
    select EMPNO,ENAME from emp where job='MANAGER'

    3.找出奖金高于工资的员工?
    COMM:奖金 SAL:工资
    关键词:奖金>工资
    select * from emp where comm>sal

    4.找出每个员工奖金和工资的总和
    错误的方法:select sum(sal+comm) from emp;
    正确的方法:select empno,sal+nvl (comm,0) from emp;
    empno,sal+nvl (comm,0) 也可以换成sal+nvl(comm,0),empno.改变的是显示的顺序。

    5.找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK)
    select * from emp where deptno=10 and job='MANAGER'
    union
    select * from emp where deptno=20 and job='clerk';
    union
    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    6.找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工
    select * from emp
    where sal>2000 and deptno='10' and job !='MANAGER' and job !='CLERK';

    7、找出有奖金的员工的不同工作
    select distinct job from emp where comm is not null;
    关键是要把我不同工作的含义,意思就是不重复。
    有奖金就是需要排除null,所以设置is not null!

    8.找出没有奖金或者奖金低于500的员工
    select * from emp where comm<500 or comm is null;

    9.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
    select ename,hiredate from emp order by hiredate;
    关键是解决服务年限问题,使用order by语句,初始默认升序排列,asc,如果要降序使用desc。

    10.找出每个月倒数第三天受雇的员工
    select * from emp where hiredate=last_day(hiredate)-2;

    11、分别用case和decode函数列出员工所在的部门,deptno=10显示'部门10',deptno=20显示'部门20',deptno=30显示'部门30',deptno=40显示'部门40',否则为'其他部门':
    decode语句:
    select ename,decode(deptno,'10','部门10'
    ,'20','部门20'
    ,'30','部门30'
    ,'40','部门40',
    '其他部门')
    from emp;
    关键:

    12、分组统计各部门下工资>500的员工的平均工资*/
    Select avg(sal) from scott.emp where sal > 500 group by deptno
    关键词,首先判断工资>500,然后是求平均工资,要求分组统计就需要开始思考用group by,在内部判断用where。

    13、统计各部门下平均工资大于500的部门
    select deptno from scott.emp group by deptno having avg(sal) > 500
    首先是最后输出部门,先求平均工资,就势必涉及分组,然后再求平均工资大于500,建立在分组上的筛选,需要考虑having

    14、算出部门30中得到最多奖金的员工奖金
    select max(comm) from scott.emp where deptno = 30
    关键词是最多奖金的员工奖金,最多需要用max(comm)

    15、算出部门30中得到最多奖金的员工姓名
    select ename from scott.emp where deptno = 30 and comm = (select max(comm) from scott.emp
    where deptno = 30)
    在部门30得到最多奖金员工奖金的基础上,此题需要考虑员工的姓名,最后输出是ename,此外要让奖金等于最多的人

    16、算出每个职位的员工数和最低工资
    select count(ename),min(sal) from emp group by job;
    算出员工数和最低工资,所以需要用到count函数和min函数。对于count函数数的是行数,任意的内容都可行。

    17、列出员工表中每个部门的员工数,和部门no
    select count(ename),deptno from emp group by deptno;
    员工数和部门no是关键,需要考虑的是解决每个部门的问题,用group by。

    18、得到工资大于自己部门平均工资的员工信息 ????
    select * from scott.emp e where sal > (select avg(sal) from scott.emp where e.deptno = deptno) ;

    19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金)
    select avg(nvl(comm,0)),sum(sal+nvl(comm,0)) from emp group by deptno,job;
    平均工资用avg,总工资用sum,存在一个问题,奖金需要考虑null,这个时候就需要给nvl函数,让comm为0,,,,然后最后按照每个职位和部门就需要group by。

    21、显示员工ID,名字,直属主管ID,名字

    相关文章

      网友评论

          本文标题:SQL语句

          本文链接:https://www.haomeiwen.com/subject/nqydxxtx.html