MySQL-子查询

本文详细介绍了SQL中的多行子查询、IN操作符、DISTINCT函数在去重中的应用,以及如何使用子查询作为临时表处理数据。此外,还涵盖了all和any操作符以及多列子查询的使用实例。
摘要由CSDN通过智能技术生成

多行子查询

在这里插入图片描述

# 多行子查询

SELECT deptno
	FROM emp
	WHERE ename = 'SMITH'

-- 显示和smith同一个部门的人	
SELECT * FROM emp
	WHERE deptno = ( -- 只返回一条用‘=’	
		SELECT deptno
			FROM emp
			WHERE ename = 'SMITH'
	)

SELECT ename,job,sal,deptno 
	FROM emp
	WHERE job IN ( -- 关键词IN,因为返回的不止一条
		SELECT DISTINCT job -- distinct去重
			FROM emp
			WHERE deptno = 10
			)AND deptno != 10 -- <>和!=都是不等
			

-- 子查询当临时表使用
SELECT cat_id , MAX(shop_price) -- 当作临时表
	FROM ecs_goods
	GROUP BY cat_id

SELECT goods_id,cat_id,goods_name,shop_price
	FROM ecs_goods;
	
SELECT goods_id,ecs_goods.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操作符
-- 比30号所有人工资高
SELECT ename,sal,deptno 
	FROM emp
	WHERE sal > ALL(
			SELECT sal FROM emp
			WHERE deptno = 30)

-- any操作符
-- 比30号其中一个人高
SELECT ename,sal,deptno 
	FROM emp
	WHERE sal > ANY(
			SELECT sal FROM emp
			WHERE deptno = 30)

多列子查询

# 多列子查询

SELECT deptno,job 
	FROM emp
	WHERE ename = 'ALLEN'

SELECT * 
	FROM emp
	WHERE (deptno,job) = ( -- 要求有两列数据相等
		SELECT deptno,job 
		FROM emp
		WHERE ename = 'ALLEN'
		)AND ename <> 'ALLEN' -- 排除本人 

练习

SELECT dname,dept.deptno,loc,temp.per_num AS '人数'
	FROM dept,(
	SELECT COUNT(*) AS per_num,deptno
	FROM emp
	GROUP BY deptno
	)temp
	WHERE temp.deptno = dept.deptno
	
-- 表.*
SELECT temp.*,dname,loc
	FROM dept,(
	SELECT COUNT(*) AS per_num,deptno
	FROM emp
	GROUP BY deptno
	)temp
	WHERE temp.deptno = dept.deptno
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值