本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql
表的加法
从抽象的角度看问题,我们可以将数据库中不同的表看作一个个集合,针对行列,我们可以进行不同程度的计算得出需要的结果,那表和表之间可以进行计算吗?答案自然是可以的,就好像数学中的集合,表和表之间也存在着交并差的计算方式。
常见的sql中,将两个表用union all拼接起来,就会出现一份两个表的并集,而如果只写union,也可以达到拼接的效果,只是数据呈现的结果会在拼接的基础上进行一次针对行的全局去重,这也是表和表的加法。
表的连接
除了针对行的处理,那想将表的列和表的列拼接的加法呢?
这种加法就是sql中的join,是集合和集合的连接,类似excel中vlookup,大部分时候,join都是通过on后面加连接条件进行连接,又因为连接时对数据的筛选不同,分为内连接和外连接;如果是内连接,两表符合条件的数据才可以拼接出现结果;而外连接,又细分为左外连接,右外连接和全外连接,左外连接会保留左表全部数据,右表符合条件的数据出现,不符合的显示null,右外相反,而全外除了能够关连接上的数据,还会保存左右无法关联的数据,无数据的地方显示null。
差集和并集
除了上面这些情况,连接还有两种特殊情况,一种是自然连接,他说内连接的特例,会自动按照两个表都包含的列进行等值内连接;一种则是交叉连接,也是常说的笛卡尔积,如果a表有n条数据,b表有m条数据,那交叉连接会出现m*n条数据。
聊完加法,聊一下减法,表的计算中可以使用except来实现对差集的效果,只不过部分sql不支持这种语法,我们可以用join来达到相似的效果,而在except 后面加all也可以实现去重的效果;使用INTERSECT则可以实现交集的效果。