加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Apache Flink 漫谈系列 - JOIN 算子

发布时间:2018-11-20 20:07:11 所属栏目:教程 来源:孙金城
导读:聊什么 在《Apache Flink 漫谈系列 - SQL概览》中我们介绍了JOIN算子的语义和基本的使用方式,介绍过程中大家发现Apache Flink在语法语义上是遵循ANSI-SQL标准的,那么再深思一下传统数据库为啥需要有JOIN算子呢?在实现原理上面Apache Flink内部实现和传统

内联接在SQL92中 ON 表示联接添加,可选的WHERE子句表示过滤条件,如开篇的示例就是一个多表的内联接,我们在看一个简单的示例: 查询成绩大于80分的学生学号,学生姓名和成绩:

  1. mysql> SELECT 
  2.     ->   stu.no, stu.name , s.score 
  3.     -> FROM student stu JOIN score s ON  sstu.no = s.s_no 
  4.     -> WHERE s.score > 80; 
  5. +------+-------+-------+ 
  6. | no   | name  | score | 
  7. +------+-------+-------+ 
  8. | S001 | Sunny |    98 | 
  9. | S003 | Kevin |    88 | 
  10. +------+-------+-------+ 
  11. 2 rows in set (0.00 sec) 

上面按语义的逻辑是:

  • 第一步:先进行student和score的内连接,如下:
    1. mysql> SELECT 
    2.     ->   stu.no, stu.name , s.score 
    3.     -> FROM student stu JOIN score s ON  sstu.no = s.s_no ; 
    4. +------+-------+-------+ 
    5. | no   | name  | score | 
    6. +------+-------+-------+ 
    7. | S001 | Sunny |    80 | 
    8. | S001 | Sunny |    98 | 
    9. | S001 | Sunny |    76 | 
    10. | S003 | Kevin |    78 | 
    11. | S003 | Kevin |    88 | 
    12. | S003 | Kevin |    68 | 
    13. +------+-------+-------+ 
    14. 6 rows in set (0.00 sec) 
  • 第二步:对内联结果进行过滤, score > 80 得到,如下最终结果:
    1. -> WHERE s.score > 80; 
    2. +------+-------+-------+ 
    3. | no   | name  | score | 
    4. +------+-------+-------+ 
    5. | S001 | Sunny |    98 | 
    6. | S003 | Kevin |    88 | 
    7. +------+-------+-------+ 
    8. 2 rows in set (0.00 sec)  

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读