-- 多列子查询
-- 如何查询与WOARD 的部门和岗位完全相同的所有雇员(并且不含smith本人)
-- (字段1,字段2...) = (select 字段1,字段2 from ...)
-- 分析: 1. 得到smith的部门和岗位
SELECT deptno,job
FROM emp
WHERE ename = 'WARD';
-- 2.使用字段的方式进行多列子查询
SELECT *
FROM emp
WHERE job = (
SELECT job
FROM emp
WHERE ename = 'WARD'
) AND
deptno = (
SELECT deptno
FROM emp
WHERE ename = 'WARD'
)AND
ename <> 'WARD';
SELECT *
FROM emp
WHERE (deptno,job)= (
SELECT deptno,job
FROM emp
WHERE ename = 'WARD'
)AND ename <> 'WARD';
-- 请思考:查找每个部门工资高于本部门平均工资的人的资料
-- 这里要用到数据查询的小技巧,把员工子查询当作一个临时表使用
-- 1.先得到每个部门的 部门号和 对应的平均工资
SELECT * FROM emp;
SELECT deptno , AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno;
SELECT empno ,ename,job,mgr,sal,avg_sal ,emp.deptno
FROM emp ,(
SELECT deptno,AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno
) temp
WHERE emp.deptno = temp.deptno AND sal > avg_sal;
-- 查找每个部门工资最高人的详细资料
-- 1.先求出每个部门的最高薪资,构成一张临时表
SELECT MAX(sal),deptno
FROM emp
GROUP BY deptno
SELECT ename,sal ,emp.deptno
FROM emp, (
SELECT MAX(sal) AS max_sal,deptno
FROM emp
GROUP BY deptno) temp
WHERE emp.sal = max_sal AND emp.deptno = temp.deptno;
下面做一个小练习:
请查询 和宋江数学,语文,英语成绩完全相同的学生
SELECT *
FROM student
WHERE (chinese,english,math) = (
SELECT chinese,english,math
FROM student
WHERE NAME = '宋江'
);