hiveSQL基本语句三-----连接查询--inner join、left join、full join、union all、union

2023-11-03

一、(inner) join

连接2个表,取出公共部分

  • 必须重命名
  • on后连接条件键值唯一
  • 连接前注意去重,提高效率
  • inner可省略
select * from user_list_1 as a 
inner join user_list_2 as b
on a.user_id=b.user_id;

三表连接

select a.user_name 
from
(select distinct user_name from data1)as a 
inner join (select distinct user_name from data2) as b
on a.user_name=b.user_name
inner join (select distinct user_name from data3) as c 
on b.user_name=c.user_name;

二、left /right join

left join:以左表为全集,返回能匹配上的匹配结果,没匹配上的显示NULL;
应用:取出表1中存在,表2中不存在的项

select *
from user_list_1 a
left join user_list_2 b
on a.user_id=b.user_id;

在这里插入图片描述

三、full join全连接

并列将2个表的信息展示

select *
from user_list_1 a
full join user_list_2 b
on a.user_id=b.user_id;

在这里插入图片描述

coalesce函数
coalesce(expression_1,expression_2,…,expression_n)
依次取值,遇到非空立即返回并停止对后面参数取值。若所有参数都为空,最终返回一个空值

select coalesce(a.user_name,b.user_name)
from user_list_1 a
full join user_list_2 b
on a.user_id=b.user_id;

在这里插入图片描述

四、union all/union联合

增加行

  • 字段名称必须一致
  • 字段顺序必须一致
  • 无连接条件

== union all和union的区别:==
union会去重且排序

在这里插入图片描述

  • union all
select a.user_id,a.user_name
from user_list_1 a
union all
select b.user_id,b.user_name
from user_list_2 b;

在这里插入图片描述

  • union
select a.user_id,a.user_name
from user_list_1 a
union
select b.user_id,b.user_name
from user_list_2 b;

在这里插入图片描述

练习
练习1:2019年购买后又退款的用户性别分布(user_trade/user_refund/user_info)

select c.sex,count(c.user_name)
from (select distinct user_name from user_trade where year(dt) =2019) a
join (select distinct user_name from user_refund where year(dt)=2019) b
on a.user_name=b.user_name
join user_info c
on b.user_name=c.user_name
group by c.sex;

在这里插入图片描述
练习2:在2018年购买,但是没有在2019年购买的用户城市分布(user_trade、user_info)

select d.city,count(d.user_name)
from
(select a.user_name
from
(select distinct user_name from user_trade where year(dt) =2018) a
left join (select distinct user_name from user_trade where year(dt) =2019) b
on a.user_name=b.user_name
where b.user_name is NULL) c
join user_info d
on c.user_name=d.user_name
group by d.city;

在这里插入图片描述
练习3:2017-2019年,有交易但是没有退款的手机品牌分布(trade_2017/trade_2018/trade_2019/user_refund/user_info)

select d.phone_brand,count(d.user_name)
from 
(select a.user_name
from
(select user_name from trade_2017
union
select user_name from trade_2018
union
select user_name from trade_2019) a
left join
(select distinct user_name from user_refund where dt > '0') b
on a.user_name=b.user_name
where b.user_name is NULL) c
join
(select user_name,get_json_object(extra1,'$.phonebrand') phone_brand from user_info) d
on c.user_name=d.user_name
group by d.phone_brand;

在这里插入图片描述
最开始的思路,user_info不用提前处理,由于’ . p h o n e b r a n d ′ 中 .phonebrand'中 .phonebrand后没加点失败,加了后成功,注意注意

select get_json_object(d.extra1,'$.phonebrand'),count(d.user_name)
from 
(select a.user_name
from
(select user_name from trade_2017
union
select user_name from trade_2018
union
select user_name from trade_2019) a
left join
(select distinct user_name from user_refund where year(dt) >= 2017 and year(dt)<= 2019) b
on a.user_name=b.user_name
where b.user_name is NULL) c
join user_info d
on c.user_name=d.user_name
group by get_json_object(d.extra1,'$.phonebrand');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hiveSQL基本语句三-----连接查询--inner join、left join、full join、union all、union 的相关文章

随机推荐

  • Playwright + Pytest 自动化测试实战应用

    工具介绍 Playwright是微软公司开发的一款非常强大的开源自动化测试工具 之所以强大有以下原因 支持所有主流浏览器 Chrome Firefox Safari MS Edge 支持无头模式和有头模式运行 提供同步 异步的API 可以结
  • 简述WINDOWS系统重装步骤

    目录 一 备份 二 准备安装媒体 三 BIOS设置 四 安装windows系统 总结 在使用WINDOWS系统的电脑产品时 有时候我们会遇到系统使用过久导致系统卡顿 整理电脑磁盘时误删了系统文件并彻底清除导致电脑无法正常启动或者电脑磁盘因下
  • Linux文件压缩和解压命令【gzip、gunzip、zip、unzip、tar】【详细总结】

    解压和压缩 gzip gunzip gzip 压缩文件 gunzip 解压缩文件 zip unzip zip 命令语法 命令选项 实例 unzip 语法 命令选项 实例 tar 语法 实例 例一 将文件打包成tar包 例二 查阅 tar包内
  • socket.gaierror: [Errno -2] Name or service not known

    执行socket gethostbyname socket gethostname 报 socket gaierror Errno 2 Name or service not known 错误 分析记录如下 更正前 执行命令vi etc h
  • redis主从复制+sentinel集群

    Redis主从介绍 主从服务就是用户在主服务器写入数据后 从服务器在写一份数据 一般用在如下场景 1 辅助实现备份 2 高可用 主从复制只是redis高可用的前提 3 异地容灾 4 分摊负载 redis主从特点介绍 1 redis使用异步复
  • windows下在anaconda中安装tensorflow和keras

    windows下在anaconda中安装tensorflow和keras 一 在anaconda中创建一个新的python环境并安装tensorflow 1 创建环境名为tensorflow python38的python环境 python
  • 微信小程序wx.getUserProfile接口获取用户信息的使用

    前言 调整原因 很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗 如果用户点击拒绝 无法使用小程序 这种做法打断了用户正常使用小程序的流程 同时也不利于小程序获取新用户 调整策略 推荐使用 wx getUserProfi
  • 【Seata】03 - Seata AT 模式全局锁相关知识简单整理

    文章目录 前言 参考目录 版本说明 分析整理 1 全局锁的引入说明 2 全局锁相关源码整理 2 1 流程简图 2 2 事务分支注册前的 SQL 相关操作 2 3 注册分支 获取全局锁 前言 上一篇文章介绍了 AT 模式的调用流程 但是有个比
  • Unity位置动画

    1 场景中创建一个Cube 2 为这个Cube添加Animator组件 3 选中这个Cube 然后选择Window Animation 打开animation窗口 下面就开始K关键帧了 很简单 两步走 1 选中这个Cube对象 在第0帧 移
  • Java读取.zip文件为ZipInputStream,并读取压缩文件。

    最近遇到一个需求 要调取接口获取一个zip文件流 解析zip包 读取启动的文件内容来进行业务处理 以下是处理读取zip压缩包方法 话不多说直接上代码 读取zip文件流 解析压缩文件 public static void main Strin
  • 【blockly教程】第一章 Google Blockly教学应用手册

    1 1 Google Blockly概述 美国计算科学教育一直认为计算机作为当今各个领域的基础技术工具 有必要让学生尽早的了解和学习计算机工作原理 理解基础的编程思维 在2006年周以真教授提出计算思维概念 这很大程度上促进了人们对计算机编
  • POI getDataFormat() 格式对照

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 参照org apache poi ss usermodel BuiltinFormats的说明 Open Declaration org apache poi ss use
  • C#获得DataGrid单元格的值

    WPF中的DataGrid控件类似于WindowsForm中的DataGridView 但是DataGridView中的单元格值获取非常简单直观 如下 string cellvalue datagridview Rows rowindex
  • RuntimeError: CUDA error: device-side assert triggered

    RuntimeError CUDA error device side assert triggered解决办法 这是由于数据标签默认是从0开始的 比如标签类别为5类 默认是 0 1 2 3 4 而自己是 1 2 3 4 5 只需要在标签数
  • Scala的基础语法(超详细版)

    Scala的基础语法 文章目录 Scala的基础语法 1 声明值和变量 2 数据类型 3 算术和操作符重载 4 控制结构语句 4 1条件分支语句 4 2循环语句 5 方法与函数 5 1方法 5 2 函数 5 3 方法转换成函数 1 声明值和
  • python爬虫-北京租房可视化分析

    目的 使用scrapy框架爬取租赁信息 对数据进行处理利用python中的seaborn matplotlib库进行可视化分析 最后查看昌平区待租量排前十小区对应地铁站点 及其平均租房价格 1 爬虫 使用scrapy框架爬取beike租房信
  • chatGPT做算法题

    今天突发奇想 自己编了一道算法题让newbing和chatgpt做 问newbing后 没搜索到相关内容 回复无法理解题目 问chatGPT后给出了回答 见下图 一开始我很震惊 算法居然如此简洁 我知道这个题可以用动态规划解 但是算法也没有
  • CocosCreator查找图片引用

    相信大家可能需要查找图片在哪个Prefab中使用到 于是我们像下图这样查找一下 查找的时候CocosCreator会给出我们查找的图片资源的uuid 比如 我的uuid 33a791ca 5a28 4c2a b451 7c6b8f9a037
  • 简单C语言两数相加

    在C语言中 相加两数是一个基本的要求 但其实也有复杂操作 比如高精度加法 或者链表相加 还要考虑进位 都是比较难的 那么今天我们来聊一聊简单的problem a b 先发代码 include
  • hiveSQL基本语句三-----连接查询--inner join、left join、full join、union all、union

    一 inner join 连接2个表 取出公共部分 必须重命名 on后连接条件键值唯一 连接前注意去重 提高效率 inner可省略 select from user list 1 as a inner join user list 2 as