大数据产业创新服务媒体
——聚焦数据 · 改变商业
偶然间看到一句话,关系代数明白了,就没有不会写的SQL。让我对曾经学过但早就不知道交给谁的“知识”,又重新燃起了兴趣。下面以一个题切入。
上面的公式,基于下面的图的结果是什么, RS的左外,右外,全外连接的图是什么样的。
乍看起来和数据库有什么关系,但这些其实是写出复杂逻辑关系的SQL 的基础。估计现在就已经有人在,Turn your nose up ,打个赌,看完或许会改变看法呢。
首先我们先要确定的一个事情是 SQL 是具有关系代数,和关系演算的双重特点的语言。关系代数,元祖关系演算,和域关系演算三种语言在表达能力上是等价的。其中会带出来三个完整性,其中两个完整性是必须的,实体完整性和参照完整性,这两个可以理解为我们平时的 主外键关系中的,带有主键的表和带有外键的表的“文雅的叫法”。
估计说到这里有人不耐烦了,马上上操作符。
1 根据上面图中 RS ,我们可以分析出 R(X.Y) S(Y,Z)为什么因为R和S 主键有同类和异类,所以同类用Y 表示 不一样的分别为 X 和 Z。
这可以通过对应我们的类似下面的查询语句来表示:
select A.X,A.Y,B.Y,B.Z
from A
inner join B on A.Y=B.Y
OK 先来一个魔术
上面这张图等于
select R.A3
from R
inner join S on R.A1A2 = S.A1A2 and S.A1 < 3
上面这个语句的select 结果是 4
是这样的吗 我们来逐一拆解这个图里面的公式。
1 下图的意思,仅仅是对S 集合的数据的过滤 1< 3 的意思是 S 表的第一列的值要小于3 那我们就先对S 进行了一个WHERE 的条件操作 选中的数据
({1,9,1},{2,1,8})并且投影的S的字段是 A1A2
2 剩下的除法,在关系代数的意思就是找到两个集合中除号前面集合中与除号后面集合中不同的列,这里就是 RA3, 所以上面的 select R.A3 就是我们最后要输出的结果。并且前面的括号里面要求投影的S字段是 A1A2
select R.A3
from R
inner join S on R.A1A2 = S.A1A2 and S.A1 < 3
这就是上面那个公式转换下来的SQL 语句,上边的公式所表达的也叫关系代数。
另外在数据库中,不是所有的数据库都支持所有的连接方式。
内连接 inner join 外连接 left join right join 或者叫left outer join right outer join 基本上都是支持的,而full outer join的方式某些数据库是不支持的。
那不支持FULL OUTER JOIN 的数据库怎么来处理
SELECT * FROM R
LEFT JOIN S ON R.A1A2 = S.A1A2
UNION
SELECT * FROM R
RIGHT JOIN S ON R.A1A2 = S.A1A2
就可以达到上面图中的效果。
—— / END / ——
职位热招中
①【北京】TalkingData
资深银行行业BD-华北/华东JD、资深非银行业BD-华东/华南JD、数据分析师JD丨点击“这里”了解详情
②【北京】金山云云智能解决方案中心大数据团队
大数据架构师、Java架构师丨点击“这里”了解详情
③【上海】数数科技
大数据运维支持工程师、大数据研发工程师、SDK研发工程师、数据分析师、销售经理(上海、北京、深圳)、高级数据产品经理、测试开发工程师丨点击“这里”了解详情
④【杭州+上海+北京+成都】蚂蚁金服大数据部
均为实习生招募—研发类:数据研发工程师、JAVA工程师、前端工程师丨算法类:机器学习算法工程师丨产品类:数据产品经理丨点击“这里”了解详情
⑤【杭州】阿里数据中台品牌团队
均为市场及品牌岗位:数据品牌管理、数据中台整合营销、数据中台内容运营、数据中台渠道策略运营丨点击“这里”了解详情
⑥【杭州】数字浙江
社招:JAVA开发工程师丨校招:数据开发工程师、JAVA开发工程师丨点击“这里”了解详情
提示:如贵公司近期有职位发布需求,可发送内容至数据猿寻求友情扩散[email protected]
2019数据猿年度榜单:
●2019大数据产业趋势人物榜TOP 10
●2019大数据产业创新服务企业榜TOP 15
●2019大数据产业创新服务产品榜TOP 40
数据猿公益策划活动
#榜样的力量#
寻找新冠战“疫”,中国数据智能产业先锋力量