mysql和hive实现关联查询_hive的关联查询

在hive中没有外键和主键之分。

但是可以进行多表关联查询(值关联)。只要这两个值相等就可以作为关联条件,其实在mysql中也是支持。

mysql中的关联查询

left join左连接

right join右连接

inner

join全连接、内连接

============

t_user

id name

1 zs

2 ls

3 ww

CREATETABLEt_user(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY

'\t';

t_order

id name u_id

1 p1 1

2 p2 1

3 p1 2

CREATETABLEt_order(id int,name string,u_id int) ROW FORMAT DELIMITED FIELDS

TERMINATED BY '\t';

hive当中的关联查询

1、全连接

join-----两边的数据必需要有关联才会显示。

select *

from t_user join t_order on t_user.id=t_order.u_id

2、左外连接

left outer

join是来自于oracle数据库的语法(左表就没有关联右表数据也会进行显示,只是右表的字段全是null)

select *

from t_user left outer join t_order on t_user.id=t_order.u_id

3、右外连接

select *

from t_user right outer join t_order on t_user.id=t_order.u_id

4、半连接left semi join

已经有一张人口信息表,需要查询出四川、重庆、广州三个省份的人员信息

mysql如何实现?

select *

from t_user where省份=四川or省份=重庆or省份=广州

另一种方式是采用in

select *

from t_user where省份in (四川,重庆,广州)

hive中没有in的语法。但是有一个left semi join【半连接】

select *

from t_user left semi join t_order on t_user.id=t_order.u_id

from后面的表为显示表,left semi join后面的表为条件表,只会显示显示表中的内容

执行结果是相同:

select *

from t_user where id in (select u_id from t_order);

======================

当你做多重关联查询的时候,是否存在一个加载数据的顺序?

顺序第一张是越大越好,还是越小越好?

select *

from a1 left outer join b1 on a1.id=b1.a_id left outer join c on c1.id=b.c_id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值