use hpCompany
–第一部分
–1. 选出部门30中的所有员工。
select * from emp where deptno = 30;
–2. 列出所有办事员(CLERK)的姓名、编号和部门编号。
select ename, empno, deptno from emp where job =’clerk’;
–3. 找出佣金高于薪金的员工。
select * from emp where comm >sal;
–4. 找出佣金高于薪金的60%的员工。
select * from emp where comm > (sal * 0.6);
–5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。
Select * from emp where deptno =10 and job = ‘manager’ or deptno = 20 and job = ‘clerk’;
–6. 找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料。
Select * from emp where deptno =10 and job = ‘manager’ or deptno = 20 and job = ‘clerk’ or job != ‘manager’ and job != ‘clerk’ and sal >= 2000;
–7.找出收取佣金的员工的不同工作。
Select distinct job from emp where comm is not null;
–8. 找出不收取佣金或收取的佣金低于100的员工。
select * from emp where comm is null or comm < 100;
–9. 查询所有部门名称和员工姓名,包括没有员工的部门名称也显示。
select dname,ename from dept d left join emp e on d.deptno = e.deptno;
–10.查询工资高于公司平均工资的所有员工信息。
select * from emp where sal > (select AVG(sal) from emp);
–11. 查询工资高于部门平均工资的所有员工。
select * from emp e where sal>(select avg(sal)from emp where e.deptno=deptno group by deptno);
–12.查询emp表的第1~3行。
select top 3 * from emp order by sal;
–13.查询emp表的第4-6行。1
select top 3 * from (select top 6 * from emp order by empno asc) a order by a.empno desc;
–13.查询emp表的第4-6行.2
select top 3 * from emp where empno not in (select top 3 empno from emp ) ;
–14. 把员工姓名和工作类型连接在一起,中间用“-”分割显示(concat函数)。(用concat函数报错)
select ename + ‘-‘+job from emp;
–15. 截取员工姓名的前3个字符和第4个字符以后的内容显示。
select ename,left(ename,3) 前三个字符,substring(ename,4,LEN(ename)) 第四个字符以后的内容 from emp;
–16. 查询员工编号,姓名和所在部门的名称。
select empno,ename,dname from emp, dept where emp.deptno = dept.deptno;
–17. 查询部门的名称以及该部门的人数,要求没有员工的部门也要显示。
select dname,count(empno) 人数 from emp right join dept on emp.deptno = dept.deptno group by dept.dname;
–18. 查询员工姓名及其直