MySQL基础篇补充 | 多表查询中使用SQL99实现7种JOIN操作、SQL99语法新特性

news2024/11/17 13:41:42

目录

一:多表查询中使用SQL99实现7种JOIN操作 

二:SQL99语法新特性

1. 自然连接Natural

2. USING连接


一:多表查询中使用SQL99实现7种JOIN操作 

在多表查询中,除了遇到最多的内连接、左外连接和右外连接,还有其它的连接方式;接下来就聊聊其它的连接方式,如下图:  ​​​​​​

并且在正式讲解之前,需要先了解UNION的使用,因为有些结果集我们可以使用其它结果集合并的方式得到!

UNION的使用

合并查询结果:利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。

语法格式:

SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2

UNION操作符:返回两个查询的结果集的并集,去除重复记录。

UNION ALL操作符:返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

注意:执行UNION ALL语句时所需要的资源比UNION语句少。如果明确知道合并数据后的结果数据不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。  

首先查询三张表:

员工表emp

部门表dept

等级表salgrade

1. 内连接 A∩B---》对应上图3

需求:找出每个员工的上级领导?(不包括上级领导为null的King)

SELECT e1.ename '员工',e2.ename '领导'
FROM emp e1
INNER JOIN emp e2
ON e1.mgr = e2.empno;

执行结果:13条数据,只有e1表和e2表ON中等值关系能对上才会显示,相当于A∩B

2. 左外连接---》对应上图1

需求:找出每个员工的上级领导?(所有员工必须全部查询出来包括King)

select e1.ename '员工',e2.ename '领导'
from emp e1
Left outer join emp e2
on e1.mgr = e2.empno;

执行结果:14条数据,此时相当于e1表是主表,e2是副表,主表的内容会全部显示;所以KING虽然没有上级领导也会显示

3. 右外连接---》对应图2

需求:找出每个员工的上级领导?(所有员工必须全部查询出来包括King)

SELECT e1.ename '员工',e2.ename '领导'
FROM emp e2
RIGHT OUTER JOIN emp e1
ON e1.mgr = e2.empno;

执行结果:14条数据,和左外连接差不多,此时还是e1是主表,e2是副表;因为是右外连接,此时把原来两张表的位置调换一下即可

4. 左中图 A - A∩B ---》对应图4

需求:取出上级领导为NULL的员工

SELECT e1.ename '员工',e2.ename '领导'
FROM emp e1
LEFT OUTER JOIN emp e2
ON e1.mgr = e2.empno
WHERE e2.empno IS NULL;

执行结果:前面我们使用左外连接取出所有的员工对应的领导,所以这里在使用where加一个限制条件就能取出上级领导为NULL的员工;就等同于A - A∩B

5. 右中图 B-A∩B ---》对应图5

需求:取出上级领导为NULL的员工

SELECT e1.ename '员工',e2.ename '领导'
FROM emp e2
RIGHT OUTER JOIN emp e1
ON e1.mgr = e2.empno
WHERE e2.empno IS NULL;

6. 满连接---》对应图6

对于满连接我们可以使用UNION ALL把 “图1和图5” 或者 “图2和图4”拼接在一起就能得到!

SELECT e1.ename '员工',e2.ename '领导'
FROM emp e1
LEFT OUTER JOIN emp e2
ON e1.mgr = e2.empno;
UNION ALL
SELECT e1.ename '员工',e2.ename '领导'
FROM emp e2
RIGHT OUTER JOIN emp e1
ON e1.mgr = e2.empno
WHERE e2.empno IS NULL;

7. 右下图--》对应图7

使用UNION ALL把 “图4和图5” 拼接在一起就能得到!

SELECT e1.ename '员工',e2.ename '领导'
FROM emp e1
LEFT OUTER JOIN emp e2
ON e1.mgr = e2.empno
WHERE e2.empno IS NULL;
UNION ALL
SELECT e1.ename '员工',e2.ename '领导'
FROM emp e2
RIGHT OUTER JOIN emp e1
ON e1.mgr = e2.empno
WHERE e2.empno IS NULL;

注:上面我使用的是表的自连接,例子不太恰当!主要理解原理会掌握使用即可! 

二:SQL99语法新特性

1. 自然连接Natural

SQL99 在 SQL92 的基础上提供了一些特殊语法,比如 NATURAL JOIN 用来表示自然连接。我们可以把 自然连接理解为 SQL92 中的等值连接。它会帮你自动查询两张连接表中所有相同的字段 ,然后进行等值连接

需求:显示每个员工信息,并显示所属的部门名称

在SQL92标准中:

SELECT e.ename,d.dname
FROM emp e,dept d
WHERE e.deptno = d.deptno;

在 SQL99 中可以写成:

# 使用join...on
SELECT e.ename,d.dname
FROM emp e
JOIN dept d
ON e.deptno = d.deptno;

# 使用自然连接---就相当于等值连接
SELECT e.ename,d.dname
FROM emp e
NATURAL JOIN dept d;

优缺点:虽然简化了连接操作的代码,但是不够灵活,因为它会把两张表或者多张表中所有相同的字段都关联起来;在实际开发中我们可能只需要某一个字段关联,而不是多个字段!

2. USING连接

①当我们进行连接的时候,SQL99还支持使用 USING 指定数据表里的 同名字段 进行等值连接。但是只能配合JOIN一起使用

②实际上USING是自然连接Natural Join的一种优化,但是必须是同名字段才可以这样使用,例如:表的自连接就无法使用,因为不是同一个字段。

# 使用join...on
SELECT e.ename,d.dname
FROM emp e
JOIN dept d
ON e.deptno = d.deptno;

# 使用USING
SELECT e.ename,d.dname
FROM emp e
JOIN dept d
USING(deptno);

总结表连接的约束条件可以有三种方式:WHERE, ON, USING

①WHERE:适用于所有关联查询。

②ON :只能和JOIN一起使用,只能写关联条件。虽然关联条件可以并到WHERE中和其他条件一起写,但分开写可读性更好。

③USING:只能和JOIN一起使用,而且要求两个关联字段在关联表中名称一致,而且只能表示关联字段值相等。

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

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

相关文章

GPT-4与人工智能的未来:微软CTO对话比尔·盖茨

一系列技术变革引领我们走到今天,并深刻影响着人类社会。如今,随着人工智能技术的快速发展,ChatGPT、New Bing、GPT-4 等新产品和新技术的陆续发布,又将如何帮助我们创造未来?在微软与 OpenAI 的密切合作中&#xff0c…

Packet Tracer - 使用 CLI 配置 IOS 入侵防御系统 (IPS)

Packet Tracer - 使用 CLI 配置 IOS 入侵防御系统 (IPS) 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/1 S0/0/0 10.1.1.1 255.255.255.252 不适用 不适用 R2 S0/0/0 (DCE) 10.1.1.…

服装生产erp都有哪些功能?该如何选服装生产erp?

各位开服装工厂的老板是否遇到这些难题: 库存管理成本高,大量库存积压导致资金紧张; 车间用人成本高,工人工作效率低,浪费大量时间和资金成本; 生产、加工、成品出库等各环节无法顺畅衔接,补单困…

Wikidata 数据包下载+格式转换+入库MySQL

1. Wikidata 简介 维基数据是一个自由的协作式的多语言辅助数据库,用于收集结构化的数据,旨在支援维基百科、维基共享资源以及其他维基媒体运动中的项目,也支援世界上的每一个人。 官网:https://www.wikidata.org/wiki/Wikidata:M…

在“裸奔”时代保护我们的隐私:网络攻击、数据泄露与隐私侵犯的应对策略与工具

摘要:随着信息技术的普及和发展,个人隐私和数据安全问题日益受到威胁。本文将讨论如何有效应对网络攻击、数据泄露和隐私侵犯,并提供一系列实用的技巧和工具,以帮助我们在“裸奔”时代更好地保护数据安全和隐私。 当今社会&#…

Http知识

一、http协议 目前存在HTTP1.1(当前广泛运用的版本)、HTTP2.0和HTTP3.0协议,有以下的优点和缺点 1. HTTP1.1 优点:默认支持长连接,即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的…

浅浅地优化下视频流播放体验

作者:唐子玄 这一篇将从如何播放视频开始,接着介绍如何封装播放器,再将视频播放和列表结合形成视频流,然后一步步地优化视频流的播放体验。 播放视频 ExoPlayer 基本使用 这次我选择的是ExoPlayer,添加依赖如下&…

13个UI设计软件,一次满足你的UI设计需求

UI设计师的角色是当今互联网时代非常重要的一部分。许多计算机和移动软件都需要UI设计师的参与,这个过程复杂而乏味。这里将与您分享13个UI设计软件,希望帮助您正确选择UI设计软件,节省工作量,创建更多优秀的UI设计作品。 1.即时…

4.共享模型之管程

4.共享模型之管程 4.1 共享带来的问题 Java的体现 import lombok.extern.slf4j.Slf4j;/*** author xc* date 2023/5/6 13:00*/ Slf4j public class Test14 {static int i 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(()…

Android Framework开发前景分析~

Android Framework是Android操作系统中的重要组成部分,它提供了一系列的API(应用程序接口)和服务,方便开发人员创建Android应用程序。随着Android设备的普及和移动互联网市场的快速发展,Android Framework开发有着广泛…

Linux下进程守护Supervisor搭建

简介:Supervisor是在linux上的进程管理员,是一个管理工具。当进程停止的时候Supervisor能够自动启动它,可以运行在各种类unix的机器上,supervisor是使用python开发的一套通用的进程管理工具,能够把普通脚本、命令行进程…

一起Talk Android吧(第五百四十三回:如何实现流水动画)

文章目录 概念介绍实现方法平移动画逐帧动画 经验总结 各位看官们大家好,上一回中咱们说的例子是"无进度值ProgressBar",本章回中介绍的例子是" 如何实现流水动画"。闲话休提,言归正转,让我们一起Talk Android吧&#x…

Linux命令·ss

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 当服务器的socket连接数量变得非常…

triton 疑难手册

config.pbtxt 配置参数手册 backend或platform参数用于指示nvidia triton用对应的backend加载模型参数,它的使用示例如下: name: "xxx" platform: "pytorch_libtorch"max_batch_size: 8 input [ {name: "input0"data_ty…

算法加密与解密、字符编码与字符集

加密算法 加密保证数据不会被窃取或者修改 可逆和不可逆加密 区分在于加密后的结果是否可以还原 可逆加密:安全传输数据时使用(如jwt中的数据) AES:流加密 DES:块加密 RSA HS256 不可逆加密:同一个文件或内容每次加密的结果一…

GL绘制自定义线条2_手写曲线应用贝塞尔曲线

上一篇文章的曲线是由触摸点直接生成的,但触摸点并非连续的,而是离散的,而且屏幕触摸点采样的间隔时间其实不短,因此如果单纯只用触摸点生成OpenGL触摸曲线,在高速书写时会导致曲线看起来就像多个线段合起来一样&#…

为何ChatGPT一出现让巨头们都坐不住?

近几个月来,ChatGPT都是当仁不让的舆论话题。 上一次AI在全球范围内引起轰动,还是谷歌的AI机器人AlphaGO下棋战胜围棋世界冠军的时候。 ChatGPT的出现,让国内外几乎所有的科技巨头都坐立不安。 2月1日,谷歌母公司Alphabet首席执…

C++跨平台“点绘机” 代码解读

前言 球球大作战可以自定义皮肤,用画刷绘制。 想着用软件来绘制。 初次尝试,没有达成最终目的,不过也有很大收获。 仓库链接:https://github.com/sixsixQAQ/dolphin 问题 这个半成品,已经有了基本结构了&#xff…

高德地图api 地理编码(地址-->坐标)geocoder.getLocation在官方可以测试出结果,下载代码到本地却用不了 问题解决

问题 高德地图api 地理编码(地址-->坐标)功能,通过输入 地址信息 得到 经纬度信息。geocoder.getLocation在官方可以测试出结果,下载代码到本地却用不了。 官方示例测试,可以从地址得到坐标 下载官方代码本地运行却…

常见注意力机制解析

1.Squeeze-and-Excitation(SE) SE的主要思想是通过对输入特征进行压缩和激励,来提高模型的表现能力。具体来说,SE注意力机制包括两个步骤:Squeeze和Excitation。在Squeeze步骤中,通过全局平均池化操作将输…