第九章 - 多表查询(join,left join 等)与合并查询(union union all)
第九章 - 多表查询(join,left join 等)与合并查询(union)
- 交叉链接(笛卡尔积)
- 内连接查询
- 外连接查询
- 左链接: left join
- 右链接:right join
- 组合查询 union & union all
- 使用数据下载:
在日常工作中,需要查询的数据一般是存在多个不同的数据表中,比如用户的基本数据信息,商品的信息,用户的行为,订单信息等,都是不同的表,通过用户ID,订单ID等信息可以链接多个表进行多表查询。
多表链接的几种常见的方法:
交叉链接(笛卡尔积)
交叉链接会产生笛卡尔积,所以基本不会用此种链接查询。
select 字段名称 from 表a,表b
实例:
select*
fromraw_sample,user_profile
可以看到显示的结果是没有对应关系的,这样的结果也是不能使用的。

内连接查询
内连接查询可以通过指定的条件来匹配两张或多张表中的数据,能按照条件匹配上就显示,匹配不上就不显示。
有两种写法:
1.完整写法
select 字段名称 from 表a inner join 表b on 对应条件
2.省略写法
select 字段名称 from 表a,表b where 对应条件
虽然两种写法查询的结果是一样的,但是还是建议使用完整的写法,更规范一些,而且在别人看的时候会更容易理解一些。尤其是在写一些比较复杂的查询代码的时候。
举个例子:查询所有男性的点击行为。
- user_profile 为用户基本信息表,其中userid为用户id,final_gender_code为用户性别字段(男=1,女=2)。
- behavior_log 为用户性别信息表,btag为用户点击行为(ipv = 浏览,cart = 加入购物车,fav = 喜欢,buy = 购买)
1.完整写法:
selecta.userid, # 用户ida.final_gender_code, # 性别 1男,2女b.btag # 行为(ipv = 浏览,cart = 加入购物车,fav = 喜欢,buy = 购买)
from# as 别名也可以对表用,此处就用a,b来替代原来的表名# on表示表时间的关联条件,此处为关联用户iduser_profile as a inner join behavior_log as b on a.userid = b.user
where # 性别为1男性a.final_gender_code = 1
输出结果:

2.省略写法
selecta.userid, # 用户ida.final_gender_code, #性别b.btag # 行为(ipv = 浏览,cart = 加入购物车,fav = 喜欢,buy = 购买)
fromuser_profile as a , behavior_log as b
where# 链接条件为用户ID,筛选条件为1男性a.userid = b.user and a.final_gender_code = 1
输出结果:

外连接查询
左链接: left join
左外连接,也是最常用的一种链接方式,是以左边表为基本表,用右边表去匹配左边表中对应的数据,匹配上就显示,没有匹配上就用null来填充。
select 字段名称 from 表a left outer join 表b on 对应条件outer 可以省略,一般直接写为 left join
举个例子:
selecta.userid, # 用户IDb.user, # 用户IDb.btag # 行为(ipv = 浏览,cart = 加入购物车,fav = 喜欢,buy = 购买)
from# 以左边表user_profile为准,用behavior_log中的数据去匹配# on 链接条件为 用户IDuser_profile as a left join behavior_log as b on a.userid = b.user
order by# 以userid列正序排序a.userid
输出结果:

以左表user_profile的userid为准,用右表去匹配左表,当右表没有对应数据的时候就用null来填充显示
右链接:right join
右外连接,和左外连接相反,是以右边表为基本表,用左边表去匹配右边表中对应的数据,匹配上就显示,没有匹配上就用null来填充。
不过一般情况下基本都是用左连接。
select 字段名称 from 表a right outer join 表b on 对应条件outer 可以省略,一般直接写为 right join
举个例子:
selecta.userid, # 用户IDb.user, # 用户IDb.btag #行为(ipv = 浏览,cart = 加入购物车,fav = 喜欢,buy = 购买)
from# 以右边表behavior_log为准,用左边表user_profile中的数据去匹配。# 筛选条件 on 为用户IDuser_profile as a right outer join behavior_log as b on a.userid = b.user
order by# 按user列正序排序b.user
输出结果:

从结果可以看到,左边userid没有匹配到user上面数据的,也是用null来填充。
组合查询 union & union all
组合查询是可以执行多个select查询,并且可以将结果作为单个查询结果返回。
使用要点:
- 选择的字段数量需要一致
- 相对应字段的数据类型需要一致
- 列名在显示的时候会使用第一条
select的列名 union的结果会进行去重操作union all不会进行去重,所以计算速度会快一些。- 可以用于合并链接数据,或者合并多个查询结果。
语法格式:
select 字段名称 from 表 (where 条件)union (或者union all)select 字段名称 from 表 (where 条件)
举个例子1:基本拼接数据
例子使用用union,如果不需要去重可以替换为union all 。
selectuserid,final_gender_code
fromuser_profile
# union会进行去重操作
# 如果允许有重复值出现,可以使用 union all
unionselectadgroup_id,price
fromad_feature
输出结果:
列名是以第一条select的列名来显示的

举个例子2:用来链接聚合后的数据
- 一般使用
select进行多个数据汇总的时候,数据结果是在一行数据上显示的,如果想要把数据结果用竖列显示,可以尝试适合用此方法。
select# 添加新的行内容和列名"人数" as "分类",# 设置新的列名count(distinct userid) as "结果"
fromuser_profileunionselect# 添加新行的内容"价格",sum(price)
fromad_feature
输出结果:

使用数据下载:
SQL演示数据集 - ad-feature(广告基本信息表)
SQL演示数据集 - user-profile(用户基本信息)
SQL演示数据集 - behavior-log(行为数据表)
SQL演示数据集 - raw-sample(样本骨架数据)
相关文章:
第九章 - 多表查询(join,left join 等)与合并查询(union union all)
第九章 - 多表查询(join,left join 等)与合并查询(union)交叉链接(笛卡尔积)内连接查询外连接查询左链接: left join右链接:right join组合查询 union & union all使…...
matplotlib学习笔记(持续更新中…)
目录 1. 安装,导入 2. figure,axes(图形,坐标图形) 2.1 figure对象 2.2 axes对象 2.3 代码演示 2.3 subplot() 方法 3. 图表的导出 3.1 savefig() 方法 3.2 代码演示 1. 安装,导入 pip install m…...
STM32 SystemInit()函数学习总结
拿到程序后如何看系统时钟?User文件夹——system_stm32f4xx程序,先找systemcoreclock(系统时钟)但是这里这么多个系统时钟应该如何选择?点击魔法棒,然后点击C/C可以看到define的是F40_41XXX.USE这一款 ,对应着就找出了…...
【Spring Boot 原理分析】- 自动配置
【Spring Boot 原理分析】- 自动配置 Condition 注解 Condition 是 Spring 4.0 增加的条件判断功能,通过这个功能可以实现选择的创建 Bean 操作 👑 我们在使用 Spring 的时候,只需导入某个依赖的坐标,就可以直接通过 Autwired 注…...
简明易懂的JVM理解
文章目录简明易懂的JVM和GC理解写在前面Java虚拟机(JVM)的组成基本介绍结构类加载子系统(ClassLoader SubSystem)介绍类加载过程类加载过程小结双亲委派模型(Parent-Delegation Model)简介优点Java9的类加载的委派关系变动双亲委派模型小结运行时数据区(Runtime Data Areas)介绍…...
新考纲下的PMP考试有多难?
PMP考试在6月25号考试结束后,在网上引起一片哗然,新考纲领域与考点的转变使得考试难度加大:PMP考试敏捷和混合内容比重大,考试难度加大很多;考题更加注重考生的知识应用能力,领域更宽; 接下来我…...
朗润国际期货:知名投行/大佬打Call记
知名投行/大佬打Call记 2023年知名投行/大佬看好哪些投资标的 中国股市 高盛(2023年1月):将上涨15% 花旗(2023年1月):上半年会成为投资两点 摩根大通(2022年11月):M…...
遗传算法及Python实现
0 建议学时 4学时 1 人工智能概述 2020中国人工智能产业年会在苏州召开,会上发布的《中国人工智能发展报告2020》显示,过去十年(2011-2020) ,中国人工智能专利申请量达389571件,占全球总量的74.7%,位居世界第一。 报…...
零基础 Ubuntu 20.04.01 下搭建51单片机开发环境[开源编译器SDCC]
原创首发于CSDN,转载请注明出处,谢谢! 文章目录为何会在Linux下开发单片机个人系统环境与所用开发板安装开源编译器 sdccSTC MCU ISP 闪存工具 stcgal 的安装单片机代码的编译与测试|编写主代码 main.c|使用 sdcc 编译…...
手摸手快速入门 正则表达式 (Vue源码中的使用)
vue2源码 在 vue2 源码的 src\compiler\parser\html-parser.js 文件中 里面有大量的正则表达式,如下图 可以看到非常的长,不是我说,就前几行,如果没有相关的 正则表达式 的工具,我可能就被劝退了😭 这里…...
TCP/IP网络协议族分成及其每层作用
1、可以分为应用层、传输层、网络层、链路层 2、各层的作用 应用层(可以想象成是快递打包过程) 决定了向用户提供应用服务时通信的活动,将要进行的操作或者数据进行一个打包。 传输层(可以理解为选择顺丰、圆通等快递公司) 提供数据传输的方…...
041、子序列类型问题(labuladong)
子序列类型问题 一、经典动态规划:编辑距离 基于labuladong的算法网站,经典动态规划:编辑距离; 总结: 一般来说涉及到两个字符串的问题,需要依赖上一次的各种操作,一般使用dp tableÿ…...
linux系统开机文段释义
第一段Version 2.01.1204. Copyright (C) 2010American Megatrends, Inc.Press <DEL> or <F2> to entersetup. Press <F7> for BBS POPUP Menu.设备上电,提示按DEL键或者F2键进入BIOS设置。按F8可以调出启动设备列表,可以选择性的启动…...
抽奖动画大转盘抽奖思路与做法
抽奖是各类营销活动中最常见的一种形式,本产品需求大致如下:转盘周围跑马灯交替闪烁,点击抽奖,大转盘旋转,调用接口获取抽奖结果,大转盘指针指向对应的奖品。高保如下图12.整体思路本需求要求跑马灯交替闪烁…...
Java实现 - 华为2016研发工程师编程题
文章目录删数字符集合数独删数 题目描述 有一个数组 a[N] 顺序存放 0 ~ N-1 ,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以 8 个数 (N7) 为例 :{ 0,1,2…...
nginx的七层负载均衡
文章目录一、负载均衡介绍二、nginx的配置文件三、实验过程总结一、负载均衡介绍 四层负载均衡 所谓四层负载均衡是指OSI七层模型中的传输层, 那么传输层Nginx已经支持TCP/IP的控制, 所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载, 那么他的好处是性能非常快,…...
信息加密技术
介绍信息加密 信息加密是实现数据保密性的手段。 信息加密(Encryption)是将明文信息转换为密文信息,使之在缺少特殊信息时不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。 现…...
RS485通信总线详解
RS485 总线详解 RS-485 是美国电子工业协会(EIA)在 1983 年批准了一个新的平衡传输标准(Balanced Transmission Standard)也称作差分,EIA 刚开始将 RS(Recommended Standard)做为标准的前缀&am…...
罗技LogitechFlow技术--惊艳的多电脑切换体验
作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。所以可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。…...
社招中级前端笔试面试题总结
HTTP世界全览 互联网上绝大部分资源都使用 HTTP 协议传输;浏览器是 HTTP 协议里的请求方,即 User Agent;服务器是 HTTP 协议里的应答方,常用的有 Apache 和 Nginx;CDN 位于浏览器和服务器之间,主要起到缓存…...
机器学习模型评估中的构念效度:超越基准测试分数的科学推断
1. 项目概述与核心问题在机器学习的日常研究和工程实践中,我们每天都在和各种各样的基准测试(Benchmark)打交道。无论是为了比较新提出的ResNet变体在ImageNet上的Top-1准确率,还是评估一个大型语言模型在MMLU上的常识推理能力&am…...
基于LM22678的树莓派硬盘专用电源设计:解决供电不稳与电流冲击
1. 项目概述:为什么我们需要一个“专用”电源?如果你正在用树莓派搭配一块机械硬盘搭建一个家庭服务器或者个人云存储,可能已经遇到了一个不大不小的麻烦:供电不稳。树莓派官方推荐的5V/3A电源,单独带树莓派4B跑满负载…...
极致精简,功能强大的PDF编辑工具
这是一款功能全面的PDF编辑工具 你只需要导入一份PDF格式文件 就可以快速的对它进行插入 批注编辑保护转换等各种操作 而且无需登录 也可以直接使用 在插入选项中可以进行插入文字图片 页面页眉页脚页码文档背景水印视频音频等 在批注选项中可以管理批注隐藏批注 高亮显示 文本…...
2026长沙智能家居品牌实测,这些本地老牌值得选
2026年,长沙的智能家居市场已经从“概念热”转向“落地战”。我走访了长沙多个本地服务商,实测了不同品牌在别墅、酒店、大平层等场景的真实表现。今天,结合数据与案例,分享几个值得关注的本地品牌,尤其是深耕8年以上的…...
电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案
在2026年的电信行业,海量工单处理已不再仅仅是效率问题,而是合规与生存的底线。随着2026年5月20日《电信和互联网服务 基础电信企业网上营业厅服务规范》国家标准的正式实施,监管层对“信息透明、流程闭环、计费精准”的要求达到了前所未有的…...
多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?
多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?关键词 多智能体系统、自动谈判、博弈论、纳什均衡、帕累托最优、双边/多边谈判、强化学习谈判、动态定价 摘要 想象一个没有人类中介的世界:电商平台上的智能客服自动和批发商砍价、供…...
二十六.签名与脚本(1)--脚本介绍
1.区块链脚本介绍在之前的章节中,我们了解了签名与验证相关,但是btc的交易数据,签名和验证,不是单纯的,还有脚本深度参与其中。我们从开始来:bool SendMoney(CScript scriptPubKey, int64 nValue, CWalletT…...
Ubuntu经常安装软件
1、垃圾清理工具stacer sudo apt updatesudo apt install stacer apt cleanapt autocleanapt autoremove 2、类似与everything的工具Fsearcch 1sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-stable 2sudo apt update 3sudo apt install fsearch (注…...
Keil µVision反汇编窗口内容导出方案与调试技巧
1. 问题背景与需求解析在嵌入式开发过程中,调试环节往往占据大量时间。Keil Vision作为业界广泛使用的集成开发环境(IDE),其调试器功能强大但某些细节功能仍有提升空间。最近我在使用C251架构开发汽车电子控制单元时,就遇到了一个看似简单却影…...
Hermes Agent工具如何自定义接入Taotoken提供商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent工具如何自定义接入Taotoken提供商 Hermes Agent 是一款功能强大的AI智能体开发框架,它支持通过自定义提供…...
