SQL助你面大厂(Join家族介绍)

news2024/11/15 5:05:34

      在学习SQL时候,在多表查询的时候你肯定使用过Join,无非就是把两表联合在一起进行多表查询,但是你是真的了解它们的用法么?

Join家族一般有left Join、Rigth Join、Inner Join、Left Semi Join、Left Anti Join、Full Join为主

CREATE TABLE people(
id INT,
NAME VARCHAR(20),
sex VARCHAR(20),
age INT
)

INSERT INTO people(id,NAME,sex,age)VALUES(1,'张三','男',20),(2,'李四','男',29),(3,'王五','男',19)
,(4,'赵六','女',26),(5,'田七','女',25)

CREATE TABLE thing(
user_id INT,
TYPE VARCHAR(20)
)
INSERT INTO thing(user_id,TYPE)VALUES(1,'诈骗'),(2,'逾期'),(3,'套现')

 

       假如你是一家银行的审核人员,有人向你进行贷款,但是你要查询出哪些人有不诚信记录,然后根据查询的结果判断是否放贷,你会怎么利用你学过的知识去解决这些问题?

  • Left Join(左表的全部以右表的关联列)

SELECT p.*,
 IF(user_id IS NOT NULL,'True','False') AS falg
FROM people p
LEFT JOIN thing t 
ON p.id=t.user_id

 但是现在我们值需要查询违规名单上出现的人员名单,我们应该:

SELECT*FROM
(SELECT p.*,
 IF(user_id IS NOT NULL,'True','False') AS falg
FROM people p
LEFT JOIN thing t 
ON p.id=t.user_id) AS g
WHERE falg='true'

 如果我们要查询的是没有违规的人员名单,直接将上面的where falg='fasle'就可以成功实现

  • Right Join(右边的全部以及左表的相关列)

SELECT *
FROM thing t
RIGHT JOIN people p
ON p.id=t.user_id

       在我们生活中左翩子比较多,所以right join不经常用,可以用right join也可以用left join进行替换,left join用起来比较顺手

  • Inner Join(等值连接)

SELECT *
FROM thing t
INNER JOIN people p
ON p.id=t.user_id

  • Left Semi Join(查找另一张表在这张表存在的数据,不存在的不会显示,只会显示当前表的内容 )
SELECT *
FROM thing t
LEFT semi JOIN people p
ON p.id=t.user_id

 这种方式等价于:

SELECT p.*
FROM people p 
LEFT JOIN
thing t  ON p.id=t.user_id
WHERE t.user_id IS NOT NULL

 同时也等价于inner join

  • Left Andi Join(剔除另一张表在这张表存在的数据,只会显示当前表的内容 )
SELECT p.*
FROM people p 
LEFT anti JOIN
thing t  ON p.id=t.user_id

 有的版本不一样是不支持left semi join 和left anti join的连接方式的

  • Full Join
CREATE TABLE dept(
user_id INT,
amount VARCHAR(20)
)
INSERT INTO dept(user_id,amount)VALUES(1,'2000'),(2,'2900'),(3,'2100')

CREATE TABLE debt(
user_id INT,
amount VARCHAR(20)
)
INSERT INTO debt(user_id,amount)VALUES(3,'2500'),(4,'2000'),(5,'2120')

 因为SqlYog不支持Full Join,所以我这里用left join union right join进行替换

SELECT * FROM 
dept p LEFT JOIN debt b ON p.user_id=b.user_id
UNION 
SELECT * FROM dept p
RIGHT JOIN debt b ON p.user_id=b.user_id

 这里还是用full join来讲解吧,SqlYog中的函数真的是少的可怜

 

 coalesce(**,**,**)函数返回参数中第一个不为null的值,经常和full join联合使用

比如:coalesce(215,269)返回的是215    coalesce(null,22) 返回的是22

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

补充1 MATLAB_GUI_修改普通按钮(PushButton)的参数创建一个长按回调按钮

目录 一、实例效果二、补充的知识点(两种回调函数)三、步骤  1. 先建一个空白的GUI。  2.在GUI Figure 上添加一个按钮(PushButton)组件,并设置其属性,例如位置、大小和文本等。  3.CtrS保存一下GUI。…

强推9个研究生必备的免费论文下载网站

一、文献党下载器 文献党下载器把庞大的中外文献数据库资源集成在一个平台,就是把大量的中外数据库资源整合在一个站(目前文献资源量名列前茅)。不论是中文还是外文文献,不论是哪种文献类型,不论是哪个学科领域该网站…

<kernel>kernel 6.4 USB-之-hub_port_connect()分析

<kernel>kernel 6.4 USB-之-hub_port_connect()分析 kernel 6.4 USB系列文章如下: <kernel>kernel 6.4 USB-之-hub_event()分析 <kernel>kernel 6.4 USB-之-port_event()分析 <kern…

全球机器传感器市场价值约为142亿美元,预计将以超过7.5%的增长率增长

机器传感器是一类用于检测、测量和感知机器环境中物理量、化学量或其他特定参数的设备。这些传感器将实际的物理现象转化为电信号或数字信号,以便计算机或控制系统进行处理、分析和控制。机器传感器在工业、自动化、物联网、机器人、汽车等领域有广泛应用。 根据阿…

部门来了个新同事,听说是00后,上来一顿操作给我看呆了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

OD动态调试exe

之前一直卡,好不容易搞懂一点,记下来记下来 分析exe文件,用ida打开,找到主函数main,分析主函数可以发现,main在判断之后调用了l02等函数 因为判断部分的逻辑还是有点复杂,因此想让他直接打印函…

基于PaddleOCR2.7.0发布WebRest服务测试案例

基于PaddleOCR2.7.0发布WebRest服务测试案例 #WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. #警告:这是一个开发服务器。不要在生产部署中使用它。请改用生产WSGI服务器。 输出结果…

smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...

下载地址:百度网盘 请输入提取码 SQL操作返回历史记录: 2023-08-21 20:42:08:220 输入:select version as 版本号 2023-08-21 20:42:08:223 输出:当前数据库实例版本号:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) …

司徒理财:黄金美盘继续看跌,黄金原油最新走势分析及操作建议

黄金走势分析及策略      黄金上周继续回落收跌,周线连续第四周走低,而且还破了周的低点1892,空头力量仍占据优势,暗示后市仍有继续走低的动力和空间,日线方面,黄金一直是承压5日均线下行,是…

@Slf4j报错:Not generating field log: A field with same name already exists

错误出处: 错误原因: 同时使用了Slf4j注解以及LittlecLogger private static final LittlecLogger log LittlecLoggerFactory.getLogger(TimeTrackController.class); 修复方法: 将log改为LOG,便于区分,代码即用到了…

服务运营|斯坦福大学商学院Yue Hu :基于排队论的医院急诊部人员配置策略

作者:李舒湉, 陈盈鑫, XinW 编者按 本次解读的文章是“Prediction-Driven Surge Planning with Application in the Emergency Department”。论文第一作者是斯坦福大学商学院(Stanford Graduate School of Business) 的Yue Hu&a…

浅谈煤矿井下电力监控系统的应用研究

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:主要介绍了应用煤矿井下电力监控系统的重要意义,并对煤矿井下电力监控系统的主要原理和基本构成做了简要介绍,并从隔爆监控单元设计、通信协议设计和组态监控系统设计等方面提出了电力监…

小白到运维工程师自学之路 第七十八集 (安装Jenkins)

一、环境概述 随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作&#xf…

【考研数学】解决求解微分方程时,常数的结合问题以及是否能直接去掉绝对值的讨论

文章目录 引言例子 1例子 2总结 引言 在微分方程,尤其是一阶线性微分方程的求解过程中,经常出现求 ∫ 1 x d x \int\frac{1}{x}dx ∫x1​dx 等原函数需要加绝对值的不定积分。如果放在不定积分里,肯定毫不犹豫会加上绝对值,也就…

OpenCV 中的色彩空间 (C++ / Python)

在本教程中,我们将了解计算机视觉中使用的流行色彩空间,并将其用于基于颜色的分割。我们还将分享 C++ 和 Python 的演示代码。

在Flutter应用内部实现分屏功能

前言 这一次被要求实现屏幕上同时展示两个页面,并且两个页面的逻辑,功能互不影响,通俗一点讲就是在Flutter内部实现一个类似于分屏的功能,这可难不倒我。 方法 要在 Flutter 中实现一个屏幕的上半部分和下半部分展示不同的页面…

【C++】C 语言 和 C++ 语言中 const 关键字分析 ② ( const 常量分配内存时机 | const 常量在编译阶段分配内存 )

文章目录 一、const 常量内存分配时机二、使用如下代码验证 const 常量内存分配时机三、分析验证结果 - const 常量在编译阶段分配内存 一、const 常量内存分配时机 在上一篇博客中 , 讲到了获取 const 常量的地址 , 代码如下 : // 定义常量// 该常量定义在了 符号表 中// 符号…

通过cpolar在外远程查看家里内网监控

通过cpolar在外远程查看家里内网监控 文章目录 通过cpolar在外远程查看家里内网监控前言1. 在cpolar官网预留一个空白隧道2. 完成空白数据隧道,生成地址3. 设置空白隧道的出口4. 空白数据隧道的出口设置5. 获取公网地址6. 打开本地电脑“远程桌面”7. 打开Windows自…

赶紧看看!这才是对制造业最大的优化

​随着全球商业环境的不断变化,资产管理系统在帮助企业实现精细化管理、提高效率和降低风险方面发挥着关键作用。 在这个数字化时代,资产管理系统不仅是一种管理工具,更是推动企业创新和增长的关键因素之一。通过充分利用这些系统&#xff0c…

【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

一、工具的选择 近期想将vuejselementUI的项目升级为vue3tselementUI plus,以获得更好的开发体验,并且vue3也显著提高了性能,所以在此记录一下升级的过程对于一个正在使用的项目手工替换肯定不是个可实现的解决方案,更优方案是基于…