1、构造SQL语句,列出在1981年入职的职员的姓名、入职时间和月收入(薪水和奖金之和)别名为salary,并将入职时间显示为::“1981-10-10”这种形式,月收入显示为”$12,345.67”这种形式。
SELECT ename,
to_char(hiredate, 'yyyy-mm-dd') hiredate,
to_char(sal + nvl(comm, 0), '$99,999.00') salary
FROM emp
WHEREto_char(hiredate, 'yyyy') = '1981';
2、列出职员表中员工的姓名、薪水和薪水等级,并按薪水由高到低排序。等级数据来自于表salgrade。
SELECT e.ename, e.sal, s.grade
FROM emp e JOINsalgrade s ON e.sal BETWEEN s.losal
AND s.hisal
ORDER BY sal DESC;
3、列出职员表中的员工姓名和他们所在的部门名称及所在城市,按部门编码升序排列。暂未分配部门的员工及没有员工的部门不予考虑。
SELECT e.ename, d.dname,d.loc
FROM emp e JOIN deptd ON e.deptno = d.deptno
ORDER BY e.deptno;
4、列出每个员工的名字(别名为EMPLOYEE)及他们的直接领导的名字(别名为MANAGER),如果某些员工没有领导,则在其领导的位置上显示“boss”。
SELECT e.ename EMPLOYEE, nvl(m.ename, 'boss') MANAGER
FROM emp e LEFT
OUTER JOIN emp m ONe.mgr = m.empno;
5、查询员工分布在哪些不同的部门,列出这些部门的部门编码。去掉重复值显示。
SELECT DISTINCTdeptno
FROM emp;
6、查询每个部门每个职位的员工人数,如下形式:
SELECT deptno, job, COUNT(*)
FROM emp
GROUP BY deptno, job;
7、查询哪些职位的薪水总和大于5000元,列出这些职位和其薪水总和,并按薪水总和升序排列。
SELECT job, SUM(sal)
FROM emp
GROUP BY job HAVINGSUM(sal) > 5000
ORDER BY SUM(sal);
8、查询哪个部门的平均薪水比部门20的平均薪水低,列出这些部门的编码和平均薪水值。
SELECT deptno, AVG(sal)
FROM emp