首页 > 其他分享 >hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接

时间:2022-12-28 15:36:04浏览次数:37  
标签:join 左外 hive id employee 多表 连接 select


目录

  • ​​hive outline​​
  • ​​hive 内连接 inner join​​
  • ​​hive 左外连接 left join​​
  • ​​hive 右外连接 right join​​
  • ​​hive 满外连接 full join​​
  • ​​hive left semi join​​
  • ​​hive cross join​​
  • ​​hive 多表连接​​
  • ​​hive 隐式联接​​

hive outline

​​链接​​

hive 内连接 inner join

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_内连接


​内连接:​​2个表的交集,表b中3条记录可以匹配上表a中的1条,left join后记录会有3条,inner join后记录只会有1条

求员工编号,员工名字和所在部门编号

select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;

hive 左外连接 left join

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_外连接_02

​左外连接:​​以左表为基准

  1. 如果 表1 中的某条记录在 表2 中刚好只有一条记录可以匹配,那么在返回的结果中会生成一个新的行
  2. 如果 表1 中的某条记录在 表2 中有 N 条记录可以匹配,那么在返回结果中也会生成 N 个新的行,新的N行中会把 表1 的字段进行N次重复
  3. 如果 表1 中的某条记录在 表2 中没有匹配的记录,那么在返回结果中仍然会生成一个新的行,只是该行所包含的 表2 的字段值都是 NULL

求员工编号,员工名字和所在部门编号

select e.empno, e.ename, d.deptno from emp e left join dept d on e.deptno = d.deptno;

hive 右外连接 right join

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_hive_03

求员工编号,员工名字和所在部门编号

​右外连接:​​以右表为基准,原理同上

hive (default)> select e.empno, e.ename, d.deptno from emp e right join dept d on e.deptno = d.deptno;

hive 满外连接 full join

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_内连接_04

求员工编号,员工名字和所在部门编号

​满外连接:​​类似于求并集(右表中有,左表没有,左表补为NULL)(左表中有,右表没有的,右表补为NULL)

select e.id, e.name, e_a.city, e_a.street
from employee e
full outer join employee_address e_a on e.id = e_a.id;

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_外连接_05

hive left semi join

​功能:​​​类似于inner join,但只返回左表的结果
​​​优点:​​比 inner join 效率高一些

select * from employee;
select * from employee_address;

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_内连接_06

select e.*,e_addr.*
from employee e
inner join employee_address e_addr
on e.id = e_addr.id;

id

name

deg

salary

dept

1204

prasanth

dev

30000

AC

1206

kranthi

admin

20000

TP

1201

gopal

manager

50000

TP

1202

manisha

cto

50000

TP

hive cross join

cross join:交叉连接 ,会返回两个表的笛卡尔积

​注意:​​cross join就是无条件的inner join

--下列A、B、C 执行结果相同,但是效率不一样:
--A:
select a.*, b.*
from employee a,
employee_address b
where a.id = b.id; -- 隐式连接

select a.*, b.*
from employee a
inner join employee_address b
where a.id = b.id; -- 显示连接

--B:
-- on:生成临时表时使用的条件 where:临时表生成后,对临时表进行过滤的条件
select *
from employee a
cross join employee_address b on a.id = b.id;
select *
from employee a
cross join employee_address b
where a.id = b.id;

--C:
select *
from employee a
inner join employee_address b on a.id = b.id;

--一般不建议使用方法A和B,因为如果有where子句的话,往往会先进行笛卡尔积返回数据然后才根据where条件从中过滤,因此,如果两个表太大,将会非常非常慢,不建议使用。

hive 多表连接

求员工名字,所在部门编号,和公司所在位置

SELECT e.ename, d.deptno, l.loc_name
FROM emp e
JOIN dept d
ON d.deptno = e.deptno
JOIN location l
ON d.loc = l.loc;

hive 隐式联接

从hive 0.13.0开始,支持隐式联接表示法(默认是inner join)。这​​允许FROM子句连接以逗号分隔表列表​​,而省略JOIN关键字。例如

select a.*, b.*
from employee a,
employee_address b
where a.id = b.id; -- 隐式连接

select a.*, b.*
from employee a
inner join employee_address b
where a.id = b.id; -- 显示连接

例如有这样的一份数据

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_外连接_07


隐式连接

SELECT *
FROM (SELECT * FROM plant_carbon) t1,
(SELECT * FROM plant_carbon) t2;

hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接_外连接_08


标签:join,左外,hive,id,employee,多表,连接,select
From: https://blog.51cto.com/u_14009243/5975075

相关文章

  • 删除软连接
    创建软连接:ln-s源文件链接删除软连接:unlink链接注:如果链接为目录,使用rm删除链接可能会误操作删除源文件,所以不建议使用rm删除链接,除非有百分之两百的把握,毕竟刘备......
  • APP自动化测试总结一:Appium连接参数与第一个脚本
    1fromappium.webdriverimportRemote234caps={5"platformName":"Android",6"appPackage":"com.lemon.lemonban",7"appActivity":......
  • go简易tcp/udp连接测试工具
    packagemainimport( "fmt" "io" "log" "net" "os")funcshowBytes(bytes[]byte)string{ varstr[]byte for_,b:=rangebytes{ ifb>=33&&b......
  • 麒麟990sp1连接蓝牙教程
    分享一个麒麟990sp1连接蓝牙教程,其他型号请自行确认有蓝牙并有驱动再尝试。华为海思麒麟990芯片的电脑自带蓝牙硬件,银河麒麟SP1操作系统已默认安装好驱动,图形界面设置方法为......
  • MySQL多表关联查询+子查询_R
    MySQL多表关联查询+子查询--**************关联查询(多表查询)****************--多表查询规则:1)确定查询哪些表。2)确定哪些字段。3)表与表之间连接关系(规律:连接条件数......
  • Kettle 连接 MySql 驱动:Driver class 'org.gjt.mm.mysql.Driver' could not be found
    异常:Driverclass'org.gjt.mm.mysql.Driver'couldnotbefound,makesurethe'MySQL'driver(jarfile)isinstalled.org.gjt.mm.mysql.DriverLink1:https://mvnrep......
  • SDK连接节点失败排查思路
    https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/faq/connect.html Important:前置说明1.jdk版本支持JavaSDK原则上支持从jdk1.8到jdk15的......
  • 数据库连接池Druid使用总结
    根据综合性能,可靠性,稳定性,扩展性,易用性等因素替换成最优的​​数据库​​连接池。Druid:druid-1.0.29数据库 Mysql.5.6.17替换目标:替换掉C3P0,用druid来替换替换原因:1、......
  • SSH连接原理及ssh-key
    第1章SSH服务1.1ssh介绍SSH是SecureShellProtocol的简写,由IETF网络工作小组(NetworkWorkingGroup)制定:在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密......
  • Linux 关闭正在连接的用户
    1、检查当前在线的用户w  2、通知连接的用户,需要关闭当前连接echo"Iwillcloseyourconnection">/dev/pts/2 3、一定的时间后,关闭当前用户连接fuser-k/......