sql学习笔记(第七章)

第七章 集合运算

7-1 表的加减法

集合运算

在数据库领域,集合通常是指记录的集合,具体的,表,视图和执行的查询结果都是记录的集合.
集合运算是指对满足同一规则的记录进行加减等四则运算,通过集合运算,可以得到两张表中记录的集合或者公共记录的集合.用来做集合运算的运算符称为集合运算符.

  • 表的加法—UNION(并集)
    使用示例:
SELECT product_id, product_name
 FROM Product
UNION
SELECT product_id, product_name
 FROM Product2;

UNION等集合运算通常会去除重复的记录.
使用集合运算的注意事项:
1.作为运算对象的记录的列数必须相同
2.作为运算对象的记录的列的类型必须一致.从左侧开始,相同位置的列必须是同一个数据类型.
一定要使用不同数据类型的列时,可以使用类型转换函数CAST
3.可以使用任何的SELECT子句(WHERE,HAVING,ORDER BY等等),但ORDER BY子句只能在最后使用一次

  • 包含重复行的集合运算—ALL选项
    示例:
SELECT product_id, product_name
 FROM Product
UNION ALL
SELECT product_id, product_name
 FROM Product2;
  • 选取表中的公共部分—INTERSECT(交集)
    使用语法和UNION完全相同,应用于两张表,选择出他们当中的公共记录.
  • 记录的减法—EXCEPT(差集)
    用法和UNION基本相同,只是要注意EXCEPT两边的表顺序不能随意换.
  • 关系除法

7-2 联结(以列为单位对表进行联结)

联结运算

联结运算(JOIN),就是将不同表中的进行组合以从多张表中获得期望的数据的方法.

  • 内联结—INNER JOIN
    语句示例:
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, ἢ
P.sale_price
 FROM ShopProduct AS SP INNER JOIN Product AS P Ŀ
 ON SP.product_id = P.product_id;

注意要点:
1.FROM子句后写的是多张表的联结,所以其实也是从一张表中选择数据.后面的表别名不是必要的.
2.ON子句后面是联结的条件,即指定两张表联结所用的列(联结键),需要指定多个键时,也可以使用AND和OR.ON子句必不可少,且必须写在FROM和WHERE之间.
3.SELECT子句后最好使用**<表的别名>.<列名>**的形式来选择多张表中的列,以免混乱,虽然原则上只有同时存在于两张表中的列需要这种形式,但是最好都用这种方法以防止使用错误.

  • 内联结与WHERE子句结合使用
    可以理解成就是对新得到的表进行WHERE类似的操作.
    示例:
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name,
P.sale_price
 FROM ShopProduct AS SP INNER JOIN Product AS P
 ON SP.product_id = P.product_id
 WHERE SP.shop_id = '000A';
  • 外联结—OUTER JOIN
    示例:
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, 
P.sale_price
 FROM ShopProduct AS SP RIGHT OUTER JOIN Product AS P 
 ON SP.product_id = P.product_id;

外联结要点:
1.会选择出单张表的全部信息
在实际业务中,例如想要生成固定行数的表,就需要使用外联结.
外联结的名称中的"外"就有包含结果中包含原表中不存在的信息(NULL);只包含表内信息的联结就称为内联结.
2.最终的结果会包含主表内的所有数据,而指定主表的关键字是RIGHTLEFT.上面的代码中使用了RIGHT,所以右边的表就是主表.

  • 3张以上的表的联结
    示例:
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price, IP.inventory_quantity
 FROM ShopProduct AS SP INNER JOIN Product AS P
   ON SP.product_id = P.product_id
              INNER JOIN InventoryProduct AS IP
                  ON SP.product_id = IP.product_id
WHERE IP.inventory_id = 'S001';
  • 交叉联结—CROSS JOIN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值