第九章 - 多表查询(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 位于浏览器和服务器之间,主要起到缓存…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
