当前位置: 首页 > news >正文

第九章 - 多表查询(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_profileuserid为准,用右表去匹配左表,当右表没有对应数据的时候就用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查询,并且可以将结果作为单个查询结果返回。
使用要点:

  1. 选择的字段数量需要一致
  2. 相对应字段的数据类型需要一致
  3. 列名在显示的时候会使用第一条select的列名
  4. union 的结果会进行去重操作
  5. union all 不会进行去重,所以计算速度会快一些。
  6. 可以用于合并链接数据,或者合并多个查询结果。

语法格式:

select 字段名称 from 表 (where 条件)union (或者union allselect 字段名称 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&#xff…...

linux系统开机文段释义

第一段Version 2.01.1204. Copyright (C) 2010American Megatrends, Inc.Press <DEL> or <F2> to entersetup. Press <F7> for BBS POPUP Menu.设备上电&#xff0c;提示按DEL键或者F2键进入BIOS设置。按F8可以调出启动设备列表&#xff0c;可以选择性的启动…...

抽奖动画大转盘抽奖思路与做法

抽奖是各类营销活动中最常见的一种形式&#xff0c;本产品需求大致如下&#xff1a;转盘周围跑马灯交替闪烁&#xff0c;点击抽奖&#xff0c;大转盘旋转&#xff0c;调用接口获取抽奖结果&#xff0c;大转盘指针指向对应的奖品。高保如下图12.整体思路本需求要求跑马灯交替闪烁…...

Java实现 - 华为2016研发工程师编程题

文章目录删数字符集合数独删数 题目描述 有一个数组 a[N] 顺序存放 0 ~ N-1 &#xff0c;要求每隔两个数删掉一个数&#xff0c;到末尾时循环至开头继续进行&#xff0c;求最后一个被删掉的数的原始下标位置。以 8 个数 (N7) 为例 :&#xff5b; 0&#xff0c;1&#xff0c;2…...

nginx的七层负载均衡

文章目录一、负载均衡介绍二、nginx的配置文件三、实验过程总结一、负载均衡介绍 四层负载均衡 所谓四层负载均衡是指OSI七层模型中的传输层, 那么传输层Nginx已经支持TCP/IP的控制, 所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载, 那么他的好处是性能非常快,…...

信息加密技术

介绍信息加密 信息加密是实现数据保密性的手段。 信息加密&#xff08;Encryption&#xff09;是将明文信息转换为密文信息&#xff0c;使之在缺少特殊信息时不可读的过程。只有拥有解密方法的对象&#xff0c;经由解密过程&#xff0c;才能将密文还原为正常可读的内容。 现…...

RS485通信总线详解

RS485 总线详解 RS-485 是美国电子工业协会&#xff08;EIA&#xff09;在 1983 年批准了一个新的平衡传输标准&#xff08;Balanced Transmission Standard&#xff09;也称作差分&#xff0c;EIA 刚开始将 RS&#xff08;Recommended Standard&#xff09;做为标准的前缀&am…...

罗技LogitechFlow技术--惊艳的多电脑切换体验

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。所以可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。…...

社招中级前端笔试面试题总结

HTTP世界全览 互联网上绝大部分资源都使用 HTTP 协议传输&#xff1b;浏览器是 HTTP 协议里的请求方&#xff0c;即 User Agent&#xff1b;服务器是 HTTP 协议里的应答方&#xff0c;常用的有 Apache 和 Nginx&#xff1b;CDN 位于浏览器和服务器之间&#xff0c;主要起到缓存…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...