sql学习记录9--多表查询(普通子查询、联结查询)、组合查询UNION

1. 多表查询

在这里插入图片描述
1.子查询:嵌套在其他查询中的查询
位置可以在主查询select之后,或者过滤条件where之后。
2.标量子查询:只返回一行一列(即一个单元格的数据)的子查询。相当于是一个常数

3.看结构好像不容易理解,直接看代码吧

有子查询的语句涉及两张表,这两张表可以是一样的,也可以是不一样的。

举例:

(1) 先用两张一样的表,要过滤出一行中的某一列(某个单元格)

如果已知筛选条件:saleprice的价格是大于15,代码:

SELECT * FROM milk_tea AS m1 WHERE m1.sale_price > 15;#2
#1,如果已知筛选条件:saleprice的价格是大于15

结果:
在这里插入图片描述

如果未知具体的筛选条件,比如只知道,saleprice 的价格大于milk_tea表中的奶茶的价格,同时不知道这个奶茶的价格,那怎么写,用查询语句代替具体的价格,代码:

SELECT * 
FROM milk_tea AS m1 
WHERE m1.sale_price > (
	                SELECT 
	                m.sale_price 
				    FROM milk_tea AS m 
					WHERE m.prod_name = '奶茶');#2

结果:
在这里插入图片描述

(2) 增加一个常数列,但是这个常数就是奶茶的价格

#1如果一已知奶茶价格是15,那么可以这样写:

SELECT m.* , 15 AS '奶茶价格' FROM milk_tea AS m;

结果:
在这里插入图片描述
#2 如果未知奶茶价格是15,代码:

SELECT m.* 
       , (SELECT m.sale_price 
		  FROM milk_tea AS m 
		  WHERE m.prod_name = '奶茶') AS '奶茶价格' 
FROM milk_tea AS m;

结果:
在这里插入图片描述

(3) 不同表之间子查询
用Having过滤,用prod_info表中的数据进行展示,
#1 如果已知具体的过滤条件AVG(p.sale_price) > 15
代码:

SELECT p.class , AVG(p.sale_price) 
FROM prod_info AS p
HAVING AVG(p.sale_price) > 15;

结果:
结果:#2 如果未知具体的过滤条件
只知道要查询平均销售价格>milk_tea表中的奶茶价格

SELECT p.class , AVG(p.sale_price) 
FROM prod_info AS p
GROUP BY p.class 
HAVING AVG(p.sale_price) > (SELECT m.sale_price 
						   FROM milk_tea AS m 
						   WHERE m.prod_name = '奶茶');

结果:
在这里插入图片描述(4)查询日用品类别中 销售价格大于均价的产品
step1,求出均价,作为标量子查询
step2,将这个标量子查询放进销售价格的查询语句中

代码:
step1 如果单独求均价,这样:

SELECT p.class , AVG(p.sale_price)
FROM  prod_info AS p
WHERE p.class = '日用品';

结果:
在这里插入图片描述

注:这个语句不能作为均值直接

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值