SQL基本多表查询

本文精选了19条实用的SQL查询语句,涵盖了从基本的数据检索到复杂的业务逻辑实现等多个方面,帮助读者掌握SQL查询的核心技能。
--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;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值