MySQL中的多列子查询

MySQL中的多列子查询_第1张图片

-- 多列子查询

-- 如何查询与WOARD 的部门和岗位完全相同的所有雇员(并且不含smith本人)
-- (字段1,字段2...) = (select 字段1,字段2 from ...)
 


-- 分析: 1. 得到smith的部门和岗位
SELECT  deptno,job 
	FROM emp
	WHERE ename = 'WARD';

MySQL中的多列子查询_第2张图片

-- 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; 

MySQL中的多列子查询_第3张图片

MySQL中的多列子查询_第4张图片 

 -- 查找每个部门工资最高人的详细资料

-- 1.先求出每个部门的最高薪资,构成一张临时表
SELECT MAX(sal),deptno
	FROM emp
	GROUP BY deptno

MySQL中的多列子查询_第5张图片

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;

MySQL中的多列子查询_第6张图片 

 下面做一个小练习:

请查询 和宋江数学,语文,英语成绩完全相同的学生

MySQL中的多列子查询_第7张图片

SELECT * 
	FROM student
	WHERE (chinese,english,math) = (
		SELECT chinese,english,math
		FROM student
		WHERE NAME = '宋江'
		);

 

你可能感兴趣的:(MySQL练习,sql,数据库)