MySOL常见四种连接查询
1、内联接
(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。
2、外联接
外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
3、交叉联接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。
一、交叉连接(CROSS JOIN)
交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。
例如:下面的语句1和语句2的结果是相同的。
语句1:隐式的交叉连接,没有CROSS JOIN。
SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAME
FROM ORDERS O , CUSTOMERS C
WHERE O.ID=1;
语句2:显式的交叉连接,使用CROSS JOIN。
SELECT O.ID,O.ORDER_NUMBER,C.ID,
C.NAME
FROM ORDERS O CROSS JOIN CUSTOMERS C
WHERE O.ID=1;
语句1和语句2的结果是相同的,查询结果如下:
二、内连接(INNER JOIN)
内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。
例如:下面的语句3和语句4的结果是相同的。
语句3:隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积。
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C,ORDERS O
WHERE C.ID=O.CUSTOMER_ID;
语句4:显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;
语句3和语句4的查询结果:
三、外连接(OUTER JOIN)
外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:
左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。
说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,OUTER 关键字是可省略的。
注意:MySQL是不支持全外的连接的,这里给出的写法适合Oracle和DB2。但是可以通过左外和右外求合集来获取全外连接的查询结果。下图是上面SQL在Oracle下执行的结果:
四、联合连接(UNION JOIN)
这是一种很少见的连接方式。Oracle、MySQL均不支持,其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。
五、自然连接(NATURAL INNER JOIN)
说真的,这种连接查询没有存在的价值。
自然连接无需指定连接列,SQL会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用ON语句,不允许指定显示列,显示列只能用*表示(ORACLE环境下测试的)。对于每种连接类型(除了交叉连接外),均可指定NATURAL。
六、SQL查询的基本原理
两种情况介绍。
第一、单表查询: 根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。
第二、两表连接查询: 对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
第三、多表连接查询: 先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
理解SQL查询的过程是进行SQL优化的理论依据。
七、ON后面的条件(ON条件)和WHERE条件的区别
ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。
WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件。
在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。
从这里可以看出,将WHERE条件移入ON后面是不恰当的。推荐的做法是:
ON只进行连接操作,WHERE只过滤中间表的记录。
八、总结
连接查询是SQL查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:
1、 查两表关联列相等的数据用内连接。
2、 Col_L是Col_R的子集时用右外连接。
3、 Col_R是Col_L的子集时用左外连接。
4、 Col_R和Col_L彼此有交集但彼此互不为子集时候用全外。
5、 求差操作的时候用联合查询。
多个表查询的时候,这些不同的连接类型可以写到一块。例如:
SELECT T1.C1,T2.CX,T3.CY
FROM TAB1 T1INNER JOIN TAB2 T2 ON (T1.C1=T2.C2)INNER JOIN TAB3 T3 ON (T1.C1=T2.C3)LEFT OUTER JOIN TAB4 ON(T2.C2=T3.C3);
WHERE T1.X >T3.Y;
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
MySOL常见四种连接查询
1、内联接 (典型的联接运算,使用像 或 <> 之类的比较运算符)。包括相等联接和自然联接。 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。 2、…...
数智融合 开启金融数据治理新时代
11月24日,由上海罗盘信息科技有限公司(罗盘科技)主办,北京酷克数据科技有限公司(酷克数据)支持协办的“博学近思 切问治理”数据治理分享会在上海成功举行。 本次会议深度聚焦金融行业数智化转型ÿ…...
数据结构——利用堆进行对数组的排序
今天文章的内容是关于我们如何利用堆的特性对我们的数组进行排序,还有就是我们的TopK的问题,这次我们放在的是文件种,我们放入一亿个数字,然后我们取出一亿个数字中最大的十个数,利用上章堆的问题进行解决。 首先就是我…...
Unity 场景切换
Unity场景切换可使用以下方法: 1、SceneManager.LoadScene()方法: using UnityEngine.SceneManagement;// 切换到Scene2场景 SceneManager.LoadScene("Scene2"); 2、使用SceneManager.LoadSceneAsync()方法异步加载场景,异步加载…...
【PTA题目】7-12 N个数求和 分数 20
7-12 N个数求和 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。 输入格式: 输入第一行…...
智能AIGC写作系统ChatGPT系统源码+Midjourney绘画+支持GPT-4-Turbo模型+支持GPT-4图片对话
一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…...
List转string 逗号分隔
List转string 逗号分隔 1、将list转化为逗号分割的字符串 String str String.join(",", list); String str StringUtils.json(list.toArray(), ","); 2、将逗号分隔的字符串转换为List List<String> list Arrays.asList(str.split("…...
手机文件怎么传到电脑?简单方法分享!
将手机文件传输到电脑可以将其备份,以防数据丢失或意外情况发生。并且电脑具有更强大的处理能力,可以将文件进行编辑、修改、转换等操作,大大提高了工作效率。那么,手机文件怎么传到电脑?本文将为大家提供简单易懂的解…...
计算机基础知识59
MySQL的卸载流程 1、先停止MySQL服务:右键“此电脑”,选择“管理”,之后选择“服务和应用程序”--“服务”,在服务中找到“MySQL”,右键选择“停止”。 2、找到“控制面板”--“程序和功能”,找到MySQL&…...
RK3568基于openharmony3.2版本之MIPI屏幕调试
mipi调试过程 1、前言2、开发环境3、调试过程3.1、下载openharmony3.2源码3.2、设备树上增加mipi-dsi屏幕的节点3.3、 分析kernel显示不出来画面3.4、 mipi屏幕显示效果图1、前言 由于工作需要,RK3568需要支持openharmony3.2系统版本,需要重新移植下载源码并且适配自家公司的…...
pycharm安装PyQt5及其工具
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程_pycharm pyqt5-CSDN博客 上面是原文链接,根据原文链接,我重新记录一下。IDE:pycharm 2023.2.5 一共需要安装5个。 在PyCharm中如何完整优雅地安装配置…...
百度人工智能培训第一天笔记
参加了百度人工智能初步培训,主要是了解一下现在人工智能的基本情况,以便后续看可以参与一些啥? 下面就有关培训做一些记录,以便后续可以继续学习。 一、理论基础部分 二、实际操作部分 主要学习的百度人工智能平台如下…...
阿里云ACE认证之国际版与国内版对比!
大厂疯狂裁员,互联网行业迎来寒冬,技术人员被动陷入疯狂内卷。在愈加内卷的IT领域,“云计算”作为少有的蓝海,无疑是打工人未来实现职场提升、摆脱内卷的绝佳选择! 对于云计算行业的人来说,最值得考的肯定是…...
Java 简易版王者荣耀
所有包和类 GameFrame类 package newKingOfHonor;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;im…...
【Linux】 file命令使用
file命令 file命令用于辨识文件类型。 语法 file [参数] [文件名] who命令 -Linux手册页 命令选项及作用 执行令 file --help 执行命令结果 参数 -b 列出辨识结果时,不显示文件名称;-i:显示MIME类型;-z:对…...
MFC设置单选按钮点击自己可以可选和不可选
mfc是c的一个框架,可谓是经久不衰。最近博主遇到一个问题,就是单选按钮点击自己可以设置可选和不可选,貌似类似复选框一样,但领导分发的任务上要求的是用单选按钮实现复选框这种类似功能,实现效果类似如下图࿱…...
【数据结构】二叉树之链式结构
🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、前置说明二、二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历2.4 层序遍历 三、…...
完美的输出打印 SQL 及执行时长[MyBatis-Plus系列]
导读 Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。 在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,以及了解它的执行时间,方便分析是否出现了慢SQL问题。 MyBatis-Plus提供了两种SQL分析打印的方式,用于输出每条SQL语句及其执行时间,针…...
跨标签页通信的8种方式(下)
跨标签页通信是指在浏览器中的不同标签页之间进行数据传递和通信的过程。在传统的Web开发中,每个标签页都是相互独立的,无法直接共享数据。然而,有时候我们需要在不同的标签页之间进行数据共享或者实现一些协同操作,这就需要使用跨…...
笔记二十、使用路由Params进行传递参数
20.1、在父组件中设置路由参数 <NavLink to{classify/${this.state.name}} className{this.activeStyle}>classify</NavLink> 父组件 Home/index.jsx import React from "react"; import {NavLink, Outlet} from "react-router-dom";class Ap…...
5步打造专业虚拟摄像头:OBS插件从部署到精通
5步打造专业虚拟摄像头:OBS插件从部署到精通 【免费下载链接】obs-virtual-cam obs-studio plugin to simulate a directshow webcam 项目地址: https://gitcode.com/gh_mirrors/ob/obs-virtual-cam OBS虚拟摄像头插件是一款能够将OBS Studio的专业直播画面转…...
OneRec:生成式推荐模型在短视频场景下的端到端实践与优化
1. 生成式推荐模型为何成为短视频行业新宠 最近两年,生成式推荐模型正在悄悄改变短视频平台的推荐逻辑。传统推荐系统像流水线上的工人,每个环节各司其职:召回负责大海捞针,粗排快速筛选,精排细致打分,最后…...
如何深度定制WSA环境:Magisk与Google服务集成完全指南
如何深度定制WSA环境:Magisk与Google服务集成完全指南 【免费下载链接】WSA-Script Integrate Magisk root and Google Apps into WSA (Windows Subsystem for Android) with GitHub Actions 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Script 你是否…...
用于计算系统状态的卡尔曼最优增益和最小均方误差(MMSE)估计研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...
5分钟快速解锁QQ音乐加密文件:qmc-decoder终极使用指南
5分钟快速解锁QQ音乐加密文件:qmc-decoder终极使用指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经在QQ音乐下载了喜欢的歌曲,却发现…...
如何构建ElasticJob监控大盘:关键指标与业务监控融合实践指南
如何构建ElasticJob监控大盘:关键指标与业务监控融合实践指南 【免费下载链接】shardingsphere-elasticjob Distributed scheduled job 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob ElasticJob作为一款分布式调度任务框架&…...
新手零基础指南:利用快马ai生成你的第一个openclaw飞书机器人
今天想和大家分享一个特别适合新手入门的实战项目——用OpenClaw框架快速搭建一个飞书机器人。作为一个刚接触企业级应用开发的小白,我最初看到"机器人开发"这个词时觉得特别高大上,但实际体验后发现借助InsCode(快马)平台的AI辅助,…...
ai一键生成tomcat配置脚本,三分钟搞定java web服务器环境搭建
今天想和大家分享一个超级实用的技巧——如何用AI工具快速搞定Tomcat服务器的安装和配置。作为一个Java Web开发者,每次在新环境搭建Tomcat总免不了要折腾半天,直到发现了InsCode(快马)平台的AI生成功能,整个过程变得异常简单。 环境自动适配…...
5个步骤彻底掌握拯救者工具箱:释放笔记本隐藏性能的完整指南
5个步骤彻底掌握拯救者工具箱:释放笔记本隐藏性能的完整指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 如果…...
开源广告拦截工具AdGuard浏览器扩展:全平台部署与效率优化指南
开源广告拦截工具AdGuard浏览器扩展:全平台部署与效率优化指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension 【价值解析】AdGuard扩展如何重塑你的网络浏览体…...

