MySQL 06 :多表查询

MySQL 05 :多表查询




加where过滤

老韩分析
1。雇员名,雇员工资来自emp表
2。部门的名字来自dept表
3。 需求对emp和dept查询 ename,sal,dname,deptno
4。 当我们需要指定显示某个表的列是,需要表,

说明

请添加图片描述
MySQL 06 :多表查询_第1张图片

自连接

自连接是指在同一张表的连接查询[将同一张表当做两张表使用]。
1。把同一张表当做两张表使用
2。需要给表取别名
3。列名不明确,可以指定列的别名 列名as 列的别名

给一张表起了一个大名和小名,大名用的一个列,小名用的另一个列

MySQL 06 :多表查询_第2张图片

mysql表子查询

单行子查询

-- 子查询的演示
-- 请思考:如何显示与SMITH同一部门的所有员工?			
SELECT deptno
				FROM emp
				WHERE ename = 'SMITH'
SELECT * 
				FROM emp
				WHERE deptno = (
					SELECT deptno
					FROM emp
					WHERE ename = 'SMITH'
				)

多行子查询

– 多行子查询
– 课堂练习:如何查询和部门10的工作相同的雇员的
– 名字、岗位、工资、部门号,但是不含10自己的。
MySQL 06 :多表查询_第3张图片

子查询当做临时表来使用

把子查询当做一张临时表可以解决很多很多复杂的查询

-- 查询ecshop中各个类别中,价格最高的商品

-- 查询商品表
-- 先得到 各个类别中,价格最高的商品 max + group by cat id
SELECT cat_id, MAX(shop_price) AS max_price
					FROM ecs_goods
					GROUP BY cat_id
SELECT goods_id, temp.cat_id, goods_name, shop_price
					FROM (
						SELECT cat_id, MAX(shop_price) AS max_price
						FROM ecs_goods
						GROUP BY cat_id	
					) temp, ecs_goods
					WHERE temp.cat_id = ecs_goods.cat_id 
					AND temp.max_price = ecs_goods.shop_price

在多行子查询中 all 和 any 的使用

请思考:显示工资比部门30的所有员工的工资高的员工的姓名、工 资和部门号

-- 请思考:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
-- 1、首先算出部门号=30 中的最高工资
SELECT MAX(sal) 
				FROM emp
				WHERE deptno = 30
-- 2、然后找出高于这个工资的人
   -- (1)all方法
SELECT ename, sal, deptno
				FROM emp
				WHERE sal > all (
					SELECT sal
					FROM emp
					WHERE deptno = 30
				)
	 -- (2)MAX方法				
SELECT ename, sal, deptno
				FROM emp
				WHERE sal > (
					SELECT MAX(sal)
					FROM emp
					WHERE deptno = 30
				)					

请思考:如何显示工资比部门30的其中一个员工的工资高的员工的姓名、工资和部门号
-- 请思考:显示工资比部门30的任一员工的工资高的员工的姓名、工 资和部门号			
     -- (1)any方法
SELECT ename, sal, deptno
				FROM emp
				WHERE sal > ANY (
					SELECT sal
					FROM emp
					WHERE deptno = 30
				)			
			-- (2)MIN方法
SELECT ename, sal, deptno
				FROM emp
				WHERE sal > (
					SELECT MIN(sal)
					FROM emp
					WHERE deptno = 30
				)		

多列子查询 manycolumn.sql

![请添加图片描述](https://img-blog.csdnimg.cn/5afd01ef635c456aa825f068e3654e47.png

1、查询出smith的信息
MySQL 06 :多表查询_第4张图片

2、将上边的查询作为子查询来使用,并且使用多列子查询的语法来进行匹配
MySQL 06 :多表查询_第5张图片

课后练习

子查询练习题

1、请思考:查找每个部门工资高于本部门平均工资的人的资料 – 这里要用到数据查询的小技巧,把一个子查询当作一个临时表使用

1、先算出每个部门的平均工资

请添加图片描述

2、将查询1当做子查询,和emp表进行多表查询

2、请思考:查找每个部门工资最高的人的详细资料

你可能感兴趣的:(mysql,数据库)