zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

SQL多表查询

SQL 查询 多表
2023-09-11 14:22:18 时间

--1,列出至少有一个雇员的所有部门
SELECT E.DEPTNO, COUNT(E.EMPNO)
FROM EMP E
WHERE E.EMPNO IS NOT NULL
GROUP BY E.DEPTNO
HAVING COUNT(E.EMPNO) > 0;

--2,列出薪金比‘SMITH’多的所有雇员
SELECT *
FROM EMP E
WHERE E.SAL >
(
SELECT P.SAL
FROM EMP P
WHERE P.ENAME = 'SMITH'
);

--3,列出所有雇员的姓名及其上级的姓名
SELECT E.ENAME , P.ENAME
FROM EMP E, EMP P
WHERE E.MGR = P.EMPNO(+);

--4,列出入职日期早于其直接上级的所有雇员
SELECT E.ENAME, P.ENAME
FROM EMP E, EMP P
WHERE E.MGR = P.EMPNO(+)
AND E.HIREDATE < P.HIREDATE;

--5,列出部门名称和这些部门的雇员,同时列出那些
--没有雇员的部门
SELECT E.ENAME, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO;

--6,列出所有‘CLERK’(办事员)的姓名及其部门名称
SELECT E.ENAME, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.JOB = 'CLERK';

--7,列出各种岗位的最低薪金(?),并显示最低薪金
--大于1500所有工作岗位及其最低薪资
SELECT MIN(E.SAL), E.JOB
FROM EMP E
GROUP BY E.JOB
HAVING MIN(E.SAL) > 1500;

--8,列出从事'SALES'(销售)工作的雇员的姓名,
--假定不知道销售部的部门编号。
SELECT E.ENAME,D.DEPTNO
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.JOB = 'SALESMAN';

--9,列出薪金高于公司平均的所有雇员
SELECT E.ENAME
FROM EMP E
WHERE E.SAL >
(
SELECT AVG(P.SAL)
FROM EMP P
);

--10,列出与'SCOTT'从事相同工作的所有雇员
SELECT E.NAME
FROM EMP E
WHERE E.ENAME != 'SCOTT'
AND E.JOB =
(
SELECT P.JOB
FROM EMP P
WHERE P.ENAME = 'SCOTT'
);

--11,列出薪金等于在部门30工作的所有雇员的
--薪金的雇员的姓名和薪金。
SELECT E.ENAME, E.SAL
FROM EMP E
WHERE E.SAL = ANY
(
SELECT P.SAL
FROM EMP P
WHERE P.DEPTNO = 30
);

--12,列出薪金高于在部门30工作的所有雇员的薪金
--的雇员的姓名和薪金
SELECT E.ENAME, E.SAL
FROM EMP E
WHERE E.SAL > ALL
(
SELECT P.SAL
FROM EMP P
WHERE P.DEPTNO = 30
);

--13,列出每个部门工作的雇员的数量以及其它信息
SELECT D.DEPTNO, D.DNAME, D.LOC, COUNT(E.EMPNO)
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO
GROUP BY D.DEPTNO, D.DNAME, D.LOC;

--14,列出所有雇员的雇员名称、部门名称和薪金
SELECT E.ENAME, D.DNAME, E.SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO(+);

--15,列出从事同一种工作但属于不同部门
--雇员的不同组合
SELECT DISTINCT E.EMPNO, E.ENAME, E.JOB, E.DEPTNO
FROM EMP E,
(
SELECT P.JOB, P.DEPTNO
FROM EMP P
GROUP BY P.JOB, P.DEPTNO
) M
WHERE E.DEPTNO != M.DEPTNO
AND E.JOB = M.JOB;

--16,列出分配有雇员数量的所有部门的详细信息
--即使是分配有0个雇员
SELECT COUNT(E.EMPNO), D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO
GROUP BY D.DEPTNO, D.DNAME, D.LOC;

--17,列出各种类别工作的最低工资
SELECT MIN(E.SAL)
FROM EMP E
GROUP BY E.JOB;

--18,列出各种部门的MANAGER(经理)的最低薪金
SELECT E.DEPTNO, MIN(E.SAL)
FROM EMP E
WHERE E.JOB = 'MANAGER'
GROUP BY E.DEPTNO;

--19,列出按计算的字段排序的所有雇员的年薪

SELECT E.ENAME,
(E.SAL + NVL(E.COMM,0))*12 SALBYYEAR
FROM EMP E
ORDER BY SALBYYEAR;