SQL习题

1.部门平均薪水的等级
    select deptno, avg_sal, grade from
      (select deptno, avg(sal) avg_sal from emp group by deptno) t
          join salgrade s on (t.avg_sal between s.losal and s.hisal);

2.部门平均的薪水等级
    select deptno, avg(grade) avg_grade from
    (select deptno, sal, grade from emp e join salgrade s on (e.sal between s.losal and s.hisal))
        group by deptno; 

3.哪些人是经理
    select ename from emp where empno in (select distinct mgr from emp);
    
4.不用组函数求薪水的最高值(面试题)
    select distinct sal from emp where sal not in
    (select distinct e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal));
    
5.平均薪水最高的部门的部门编号
    select deptno, avg_sal from
    (select deptno, avg(sal) avg_sal from emp group by deptno)
        where avg_sal = 
            (select max(avg_sal) from (select deptno, avg(sal) avg_sal from emp group by deptno));
    
6.求平均薪水最高的部门的部门名称
    select dname from dept where deptno = (
        select deptno from (
        select deptno, avg(sal) avg_sal from emp group by deptno
    )
    where avg_sal = (
        select max(avg_sal) from (select deptno, avg(sal) avg_sal from emp group by deptno)
    )
    );
    
7.求平均薪水的等级最低的部门的部门名称
    select dname, t1.deptno, grade, avg_sal from dept where deptno = (
        select deptno from (
            select deptno, avg_sal, grade from (
                select deptno, avg(sal) avg_sal from emp group by deptno
                ) t1 join salgrade s on (t1.avg_sal between s.losal and s.hisal)
        ) where grade = (
            select min(grade) from (
                select deptno, avg_sal, grade from (
                    select deptno, avg(sal) avg_sal from emp group by deptno
                ) t join salgrade s on (t.avg_sal between s.losal and s.hisal)
            )
        )
    );

视图创建:
    create view v$_dept_avg_sal_info as
    select deptno, avg_sal, grade from (
      select deptno, avg(sal) avg_sal from emp group by deptno
  ) t join salgrade s on (t.avg_sal between s.losal and s.hisal);

8.比普通员工薪水还要高的经理人名称
    select ename from emp where empno in (
        select distinct mgr from emp where mgr is not null
    ) 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 where deptno = 10 and ename like '%A%';
    select * from emp where ename like'%A%' and deptno = 10;
    第一个快,先比较数字快。数字不对可以直接不比较字符串。
    
10.有三个表,S,C,SC,
S(SNO,SNAME)代表(学号,姓名)
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
SC(SNO,CNO,SCGRADE)代表(学号,课号成绩)

问题:
①找出没选过“黎明”老师的所有学生姓名
    select sname from s join sc on (s.sno = sc.sno) join c on (c.sno = sc.sno) where c.teacher <> 'liming';
②找出2门以上(含2门)不及格学生姓名及平均成绩
    select sname where sno in (select sno from sc where grade < 60 group by sno having count(*) >= 2);
③即学过1号课程也学过2号课程的所有学生的姓名
    select sname from s where sno in (select sno from sc where cno = 1 and sno in (select sno from sc where cno = 2));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值