sql打卡记录四 集合运算

什么是集合运算?

分别对检索结果使用 UNION, INTERSECT, EXCEPT 来将检索结果进行并,交和差运算, 像UNION,INTERSECT, EXCEPT这种用来进行集合运算的运算符称为集合运算符。

一、表的加减法

1、加法:UNION

UNION 等集合运算符通常都会除去重复的记录。

UNION 与 OR 谓词

对于同一个表的两个不同的筛选结果集,使用 UNION 对两个结果集取并集, 和把两个子查询的筛选条件用 OR 谓词连接,会得到相同的结果, 但倘若要将两个不同的表中的结果合并在一起,只能使用UNION

包含重复行的集合运算 UNION ALL

在 UNION 的结果中保留重复行时,只需要在 UNION 后面添加 ALL 关键字就可以

隐式数据类型转换

通常来说, 我们会把类型完全一致,并且代表相同属性的列使用 UNION 合并到一起显示,但有时候,即使数据类型不完全相同,也会通过隐式类型转换来将两个类型不同的列放在一列里显示

2、差集,补集与表的减法

EXCEPT 与 NOT 谓词

使用 NOT IN 谓词,基本上可以实现和SQL标准语法中的EXCEPT运算相同的效果

INTERSECT 与 AND 谓词

于同一个表的两个查询结果而言,他们的交INTERSECT实际上可以等价地将两个查询的检索条件用AND谓词连接来实现

3、对称差

两个集合A,B的对称差是指那些仅属于A或仅属于B的元素构成的集合

二、连结(JOIN)

1、内连结(INNER JOIN)

FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>
  • 进行连结时需要在 FROM 子句中使用多张表
  • 必须使用 ON 子句来指定连结条件
  • SELECT 子句中的列最好按照 表名.列名 的格式来使用

结合 WHERE 子句使用内连结

如果需要在使用内连结的时候同时使用 WHERE 子句对检索结果进行筛选, 则需要把 WHERE 子句写在 ON 子句的后边。

结合 GROUP BY 子句使用内连结

结合 GROUP BY 子句使用内连结, 需要根据分组列位于哪个表区别对待。但是如果分组列和被聚合的列不在同一张表, 且二者都未被用于连结两张表, 则只能先连结, 再聚合。

2、外连结(OUTER JOIN)

内连结会丢弃两张表中不满足 ON 条件的行,和内连结相对的就是外连结

-- 左连结     
FROM <tb_1> LEFT  OUTER JOIN <tb_2> ON <condition(s)>
-- 右连结     
FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
-- 全外连结
FROM <tb_1> FULL  OUTER JOIN <tb_2> ON <condition(s)>

外连结同样可以使用WHERE等筛选语句

3、多表连结 

通常两张表连结,但并没有限制,因此可以多张表连结查询,语法相同

4、ON 子句进阶--非等值连结

除了使用相等判断的等值连结, 也可以使用比较运算符来进行连接. 实际上, 包括比较运算符(<,<=,>,>=, BETWEEN)和谓词运算(LIKE, IN, NOT 等等)在内的所有的逻辑运算都可以放在 ON 子句内作为连结条件。

5、交叉连结—— CROSS JOIN(笛卡尔积)

交叉连接(笛卡尔积)是在横向上对表进行扩张, 即增加新的列, 这一点和连结的功能是一致的. 但因为没有了ON子句的限制, 会对左表和右表的每一行进行组合, 这经常会导致很多无意义的行出现在检索结果中. 当然, 在某些查询需求中, 交叉连结也有一些用处。


1、找出 product 和 product2 中售价高于 500 的商品的基本信息。

 

2、借助对称差的实现方式, 求product和product2的交集。

 

3、每类商品中售价最高的商品都在哪些商店有售 ?

 

4、分别使用内连结和关联子查询每一类商品中售价最高的商品。

5、用关联子查询实现:在 product 表中,取出 product_id, product_name, sale_price, 并按照商品的售价从低到高进行排序、对售价进行累计求和。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值