连接
连接(join)是将两个表中在共同数据项上相互匹配的那些行合并起来, HiveQL 的连接分为内连接、左向外连接、右向外连接、全外连接和半连接 5 种。

a. 内连接(等值连接)
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

首先,我们先把以下内容插入到course表中(自行完成)。

  1.  
    1 3
  2.  
    2 1
  3.  
    3 1

下面, 查询stu和course表中学号相同的所有行,命令如下:

    select stu.*, course.* from stu join course on(stu .id=course .sid);

执行结果如下:

b. 左连接左连接的结果集包括“LEFT OUTER”子句中指定的左表的所有行, 而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行, 则在相关联的结果集中右表的所有选择列均为空值,命令如下:

    select stu.*, course.* from stu left outer join course on(stu .id=course .sid); 

执行结果如下:

c. 右连接

右连接是左向外连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。命令如下:

    select stu.*, course.* from stu right outer join course on(stu .id=course .sid); 

执行结果如下:

d. 全连接全连接返回左表和右表中的所有行。当某行在另一表中没有匹配行时,则另一个表的选择列表包含空值。如果表之间有匹配行,则整个结果集包含基表的数据值。命令如下:

    select stu.*, course.* from stu full outer join course on(stu .id=course .sid); 

执行结果如下:

e. 半连接

半连接是 Hive 所特有的, Hive 不支持 in 操作,但是拥有替代的方案; left semi join, 称为半连接, 需要注意的是连接的表不能在查询的列中,只能出现在 on 子句中。命令如下:

    select stu.* from stu left semi join course on(stu .id=course .sid); 

执行结果如下:

子查询标准 SQL 的子查询支持嵌套的 select 子句,HiveQL 对子查询的支持很有限,只能在from 引导的子句中出现子查询。

注意,在定义或是操作表时,不要忘记指定所需数据库。

 

转载自林子雨老师《大数据原理及应用》课程。

 
posted on 2021-10-23 15:46  sean1246  阅读(39)  评论(0编辑  收藏  举报