《mysql视频5》子查询

子查询

嵌套在其他查询中的查询

子查询涉及的表可以是两张不一样的表,也可以使同一张表。

如果子查询得到的结果是一个常数,那么就可以把查询语句用括号括起来当做常数使用。这样的语句称为标量子查询


例如,如果想查出表中大于日用品均价的日用品条目,可用下面的子查询:

SELECT * 
FROM pro_info AS p2
WHERE p2.class = '日用品'
AND p2.sale_price > (
			SELECT AVG(p.sale_price)
			FROM pro_info AS p
			WHERE p.class = '日用品'
			GROUP BY  p.class);

如果查出不止日用品一类,想查出每一类商品中,大于均价的条目,可以使用下面的语句:

SELECT * 
FROM pro_info AS p2
WHERE  p2.sale_price > (
			SELECT AVG(p.sale_price)
			FROM pro_info AS p
			WHERE p.class = p2.class
			GROUP BY  p.class);

上面的的语句为关联子查询。将多个一样结构的标量子查询组合在一起。


普通子查询:子查询返回一列数据,将子查询的结果列,作为主查询的取值范围。

如果子查询返回的是二维表,则也可以当做主查询的新的检索表。


表联结

表联结的前提是两个表之间具有共同的列

SELECT [列名] 
FROM [表1],[表2]
WHERE [表1.列a] = [表2.列b]

内部联结:所有相互关联的行

,INNER JOIN代替,将 WHEREON代替

SELECT [列名] 
FROM [表1] INNER JOIN [表2]
ON [表1.列a] = [表2.列b]

外部联结:所有表的所有列,包含没有相互关联的行

  • 左外部联结 LEFT OUTER JOIN
  • 右外部联结 RIGHT OUTER JOIN
  • 全外部联结 FULL OUTER JOIN
SELECT  c.*, l.*
FROM cust_info AS c LEFT OUTER JOIN order_list AS l
ON c.cust_id = l.cust_id
AND l.order_id LIKE '20190407%'

表联结进行聚合:(重点)

把联结后的表当成结果表进行查询即可。

SELECT  c.cust_id, COUNT(l.prod_id)
FROM cust_info AS c LEFT OUTER JOIN order_list AS l
ON c.cust_id = l.cust_id
AND l.order_id LIKE '20190407%'
GROUP BY c.cust_id;

组合查询 UNION

  • 自动过滤重复的行
  • 多条SELECT语句,每两条之间使用一次UNION
  • 组合的结果,其列、表达式、聚集函数需要相同,数据类型需要兼容
  • 最终的字段名由第一条SELECT语句决定
  • 最后一个SELECT语句可以使用ORDER BY 语句,来对UNION的结果进行排序
SELECT [] FROM []
UNION
SELECT [] FROM []

UNION ALL 不自动过滤重复行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值