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

Apache Flink 漫谈系列 - JOIN 算子

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

如上INNER JOIN的结果我们发现少了Tom同学的成绩,原因是Tom同学没有参加考试,在score表中没有Tom的成绩,但是我们可能希望虽然Tom没有参加考试但仍然希望Tom的成绩能够在查询结果中显示(成绩 0 分),面对这样的需求,我们怎么处理呢?交叉联接可以帮助我们:

  • 第一步 student和course 进行交叉联接:
    1. mysql> SELECT 
    2.     ->   stu.no, c.no, stu.name, c.name 
    3.     -> FROM student stu JOIN course c  笛卡尔积 
    4.     -> ORDER BY stu.no; -- 排序只是方便大家查看:) 
    5. +------+-----+-------+-------+ 
    6. | no   | no  | name  | name  | 
    7. +------+-----+-------+-------+ 
    8. | S001 | C03 | Sunny | Spark | 
    9. | S001 | C01 | Sunny | Java  | 
    10. | S001 | C02 | Sunny | Blink | 
    11. | S002 | C03 | Tom   | Spark | 
    12. | S002 | C01 | Tom   | Java  | 
    13. | S002 | C02 | Tom   | Blink | 
    14. | S003 | C02 | Kevin | Blink | 
    15. | S003 | C03 | Kevin | Spark | 
    16. | S003 | C01 | Kevin | Java  | 
    17. +------+-----+-------+-------+ 
    18. 9 rows in set (0.00 sec) 
  • 第二步 将交叉联接的结果与score表进行左外联接,如下:
    1. mysql> SELECT 
    2.     ->   stu.no, c.no, stu.name, c.name, 
    3.     ->    CASE 
    4.     ->     WHEN s.score IS NULL THEN 0 
    5.     ->     ELSE s.score 
    6.     ->   END AS score 
    7.     -> FROM student stu JOIN course c  -- 迪卡尔积 
    8.     -> LEFT JOIN score s ON sstu.no = s.s_no and c.no = s.c_no -- LEFT OUTER JOIN 
    9.     -> ORDER BY stu.no; -- 排序只是为了大家好看一点:) 
    10. +------+-----+-------+-------+-------+ 
    11. | no   | no  | name  | name  | score | 
    12. +------+-----+-------+-------+-------+ 
    13. | S001 | C03 | Sunny | Spark |    76 | 
    14. | S001 | C01 | Sunny | Java  |    80 | 
    15. | S001 | C02 | Sunny | Blink |    98 | 
    16. | S002 | C02 | Tom   | Blink |     0 | -- TOM 虽然没有参加考试,但是仍然看到他的信息 
    17. | S002 | C03 | Tom   | Spark |     0 | 
    18. | S002 | C01 | Tom   | Java  |     0 | 
    19. | S003 | C02 | Kevin | Blink |    88 | 
    20. | S003 | C03 | Kevin | Spark |    68 | 
    21. | S003 | C01 | Kevin | Java  |    78 | 
    22. +------+-----+-------+-------+-------+ 
    23. 9 rows in set (0.00 sec) 

经过CROSS JOIN帮我们将Tom的信息也查询出来了!(TOM 虽然没有参加考试,但是仍然看到他的信息)

2. INNER JOIN

(编辑:西安站长网)

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

推荐文章
    热点阅读