当前位置:   article > 正文

Hive表连接----内连接,全连接,左连接,右连接_hive sql 将两张表无关联字段进行全连接

hive sql 将两张表无关联字段进行全连接
数据准备:员工表,部门表   
建表语句:12个员工,3个部门
  1. create table emp(
  2. id int,
  3. name string,
  4. deptno int
  5. )clustered by (id) into 2 buckets row format delimited fields terminated by ",";
  6. truncate table emp;
  7. insert into emp (id, name, deptno)
  8. values (1,"zhangsan",10),(2,"lisi",20),(3,"wangwu",30),(4,"zhaoliu",10),(5,"xiaoqi",30),(6,"gouba",10),
  9. (7,"jiujiu",20),(8,"shishi",30),(9,"shiyi",null),(10,"shier",10),(11,"shisan",10),(12,"shisi",30);
  10. select *
  11. from emp order by id;
  12. truncate table dept;
  13. create table dept(
  14. deptno int,
  15. deptname string
  16. )clustered by (deptno) into 3 buckets row format delimited fields terminated by ",";
  17. insert into dept
  18. values (10,"研发部"),(20,"开发部"),(30,"宣传部");
  19. select *
  20. from dept;
1.内连接:只返回两个表中满足连接条件的记录。当某一表中的记录在另一表中没有匹配时,这些记录将被排除在结果之外。
  1. select *
  2. from emp e inner join dept d on e.deptno = d.deptno order by id;
  3. 1,zhangsan,10,10,研发部
  4. 2,lisi,20,20,开发部
  5. 3,wangwu,30,30,宣传部
  6. 4,zhaoliu,10,10,研发部
  7. 5,xiaoqi,30,30,宣传部
  8. 6,gouba,10,10,研发部
  9. 7,jiujiu,20,20,开发部
  10. 8,shishi,30,30,宣传部
  11. 10,shier,10,10,研发部
  12. 11,shisan,10,10,研发部
  13. 12,shisi,30,30,宣传部
2.全连接:返回两个表中所有的记录,无论是否满足连接条件。对于没有匹配的记录,另一表中的字段将显示为NULL。
  1. -- 全连接
  2. select *
  3. from emp e full join dept d on e.deptno = d.deptno order by id;
  4. 1,zhangsan,10,10,研发部
  5. 2,lisi,20,20,开发部
  6. 3,wangwu,30,30,宣传部
  7. 4,zhaoliu,10,10,研发部
  8. 5,xiaoqi,30,30,宣传部
  9. 6,gouba,10,10,研发部
  10. 7,jiujiu,20,20,开发部
  11. 8,shishi,30,30,宣传部
  12. 9,shiyi,,,
  13. 10,shier,10,10,研发部
  14. 11,shisan,10,10,研发部
  15. 12,shisi,30,30,宣传部
3.左连接:返回左表中的所有记录,以及右表中满足连接条件的记录。对于左表中没有匹配的记录,右表中的字段将显示为NULL。
  1. select *
  2. from emp e left join dept d on e.deptno = d.deptno order by id;
  3. 1,zhangsan,10,10,研发部
  4. 2,lisi,20,20,开发部
  5. 3,wangwu,30,30,宣传部
  6. 4,zhaoliu,10,10,研发部
  7. 5,xiaoqi,30,30,宣传部
  8. 6,gouba,10,10,研发部
  9. 7,jiujiu,20,20,开发部
  10. 8,shishi,30,30,宣传部
  11. 9,shiyi,,,
  12. 10,shier,10,10,研发部
  13. 11,shisan,10,10,研发部
  14. 12,shisi,30,30,宣传部
4.右连接:返回右表中的所有记录,以及左表中满足连接条件的记录。对于右表中没有匹配的记录,左表中的字段将显示为NULL(两个或者两个以上的数据只显示一条null)。
  1. -- 修改表数据,将右表某个只设置为空
  2. truncate table dept;
  3. insert into dept
  4. values (10,"研发部"),(null,"开发部"),(30,"宣传部");
  5. select id, name, e.deptno, d.deptno, deptname
  6. from emp e right join dept d on e.deptno = d.deptno order by id;
  7. ,,,,开发部
  8. 1,zhangsan,10,10,研发部
  9. 3,wangwu,30,30,宣传部
  10. 4,zhaoliu,10,10,研发部
  11. 5,xiaoqi,30,30,宣传部
  12. 6,gouba,10,10,研发部
  13. 8,shishi,30,30,宣传部
  14. 10,shier,10,10,研发部
  15. 11,shisan,10,10,研发部
  16. 12,shisi,30,30,宣传部

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/890015
推荐阅读
相关标签
  

闽ICP备14008679号