SQL练习(一)

http://www.cnblogs.com/huyong/archive/2011/06/03/2071228.html

记录一下自己写的答案,估计大多数运行会出错,逻辑应该....大概没有问题。

1.列出至少有一个员工的所有部门。
SELECT DISTINCT * FROM scott.dept where scott.emp.DEPTNO = scott.dept.DEPTNO ;

2.列出薪金比“SMITH”多的所有员工。
SELECT * FROM emp WHERE emp.SAL>(SELECT SAL FROM emp WHERE ENAME='SMITH');

3.列出所有员工的姓名及其直接上级的姓名。
SELECT e1.ename,(SELECT ename FROM emp e2 WHERE e1.mgr = e2.ename) FROM emp e1;

4.列出受雇日期早于其直接上级的所有员工。
SELECT e1.ename FROM emp e1 emp.hiredate>(select hiredate from emp as e2 where e1.mgr = e2.ename);

5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
SELECT dept.dname,emp.ename FROM dept LEFT OUTER JOIN emp ON emp.deptno = dept.deptno;

6.列出所有“CLERK”(办事员)的姓名及其部门名称。
select emp.ename,dept.dname from emp,dept where emp.JOB='CLERK' and emp.deptno = dept.deptno;

7.列出最低薪金大于1500的各种工作。
select distinct emp.job from emp where emp.sal > '1500';

8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
select emp.ename from emp,dept where emp.deptno = (select deptno from dept where dept.dname = 'SALES')

9.列出薪金高于公司平均薪金的所有员工。
select emp.ename from emp e1 where emp.sal > (select AVG(e2.sal) from emp e2)

10.列出与“SCOTT”从事相同工作的所有员工。
select e1.* from emp e1 where e1.job = (select e2.job from emp as e2 where e2.ename = 'SCOTT')

11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
select e.ename,e.sal from emp e where e.deptno = '30'

12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
select e1.ename,e1.sal from emp e1 where e1.sal > (select MAX(e2.sal) from emp as e2 e2.deptno = '30')

13.列出在每个部门工作的员工数量、平均工资和平均服务期限。
select COUNT(e.empno) as count_empno,AVG(e.sal) as sal_avg,AVG(e.hiredate) as hiredate_avg
from emp e group by deptno;

14.列出所有员工的姓名、部门名称和工资。
select emp.ename as ename,(select dept.dname from dept where emp.deptno=dept.deptno) as deptname, emp.sal from emp;

15.列出所有部门的详细信息和部门人数。
select d.*, count(select * from emp e where e.deptno = d.deptno group by e.deptno) from dept d;

16.列出各种工作的最低工资。
select emp.job,MIN(emp.sal) from emp group by emp.job

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

18.列出所有员工的年工资,按年薪从低到高排序。
select (emp.sal+nvl(emp.comm,0))*12 as salery from emp order by salery;
最后介绍一下NVL(参数1,参数2)这个函数,如果参数1为NULL,则将参数2赋值给参数1。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值