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

Mysql梳理10——使用SQL99实现7中JOIN操作

10  使用SQL99实现7中JOIN操作

10.1  使用SQL99实现7中JOIN操作

本案例的数据库文件分享:

通过百度网盘分享的文件:atguigudb.sql
链接:https://pan.baidu.com/s/1iEAJIl0ne3Y07kHd8diMag?pwd=2233 
提取码:2233 

# 正中图
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
on e.department_id=d.department_id;
#左上图
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id=d.department_id;
#右上图
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id=d.department_id;
# 左中图(A-A∩B)
select employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d 
on e.department_id=d.department_id
where d.department_id is null;
# 右中图(B-A∩B)
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d 
on e.department_id=d.department_id
where e.department_id is null;
#左下图:满外连接
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d 
ON e.department_id=d.department_id
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id=d.department_id
WHERE e.department_id is null;
#右下图:满外连接-A∩B
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d 
ON e.department_id=d.department_id
WHERE d.department_id is null
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d 
ON e.department_id=d.department_id
WHERE e.department_id is null;

10.2  语法格式小结

#中间图
#实现A∩B(内连接)
select 字段列表
from A表 inner join从表
on 关联条件#左上图
#实现A
select 字段列表
from A表 left join 从表
on 关联条件
where 从表关联字段 is null and 等其他子句;#左中图 
#实现A - A∩B
select 字段列表
from 主表 left join 从表(B)
on 关联条件
where 从表关联字段 is null ;#右上图
#实现B
select 字段列表
from 主表 right join 从表(B)
on 关联条件
where 从表关联字段 is null and 等其他子句;#右中图
#实现B - A∩B
select 字段列表
from 主表 right join 从表(B)
on 关联条件
where 从表关联字段 is null ;#左下图
#实现查询结果是A∪B
###      用左外的A,union all 右外的B-(A∩B)
select 字段列表
from 主表 left join 从表(B)
on 关联条件
where 等其他子句
union all
select 字段列表
from 主表 right join 从表(B)
on 关联条件
where 等其他子句;#右下图
select 字段列表
from 主表 left join 从表
on 关联条件
where 从表 is null
union all
select 字段列表
from 主表 right join 从表
on 关联条件
where 从表 is null;


10.3  SQL99语法新特性

10.3.1  自然连接

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

在SQL92标准中:

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id
AND e.manager_id = d.manager_id;

在 SQL99 中你可以写成:

SELECT employee_id,last_name,department_name
FROM employees e NATURAL JOIN departments d;

10.3.2  USING连接

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

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
USING (department_id);

你能看出与自然连接 NATURAL JOIN 不同的是,USING 指定了具体的相同的字段名称,你需要在 USING的括号 () 中填入要指定的同名字段。同时使用 JOIN...USING 可以简化 JOIN ON 的等值连接。

它与下面的 SQL 查询结果是相同的:

SELECT employee_id,last_name,department_name 
FROM employees e ,departments d 
WHERE e.department_id = d.department_id;

10.4  章节小结

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

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

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

#关联条件
#把关联条件写在where后面SELECT last_name,department_name
FROM employees,departments
WHERE employees.department_id = departments.department_id;#把关联条件写在on后面,只能和JOIN一起使用SELECT last_name,department_name
FROM employees INNER JOIN departments
ON employees.department_id = departments.department_id;SELECT last_name,department_name
FROM employees CROSS JOIN departments
ON employees.department_id = departments.department_id;SELECT last_name,department_name
FROM employees JOIN departments
ON employees.department_id = departments.department_id;#把关联字段写在using()中,只能和JOIN一起使用
#而且两个表中的关联字段必须名称相同,而且只能表示=
#查询员工姓名与基本工资SELECT last_name,job_title
FROM employees INNER JOIN jobs USING(job_id);
#n张表关联,需要n-1个关联条件
#查询员工姓名,基本工资,部门名称SELECT last_name,job_title,department_name FROM employees,departments,jobs
WHERE employees.department_id = departments.department_id
AND employees.job_id = jobs.job_id;SELECT last_name,job_title,department_name
FROM employees INNER JOIN departments INNER JOIN jobs
ON employees.department_id = departments.department_id
AND employees.job_id = jobs.job_id;

 我们要 控制连接表的数量 。多表连接就相当于嵌套 for 循环一样,非常消耗资源,会让 SQL 查询性能下 降得很严重,因此不要连接不必要的表。在许多 DBMS 中,也都会有最大连接表的限制。

【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;

多表关联查询时, 保 证被关联的字段需要有索引。

说明:即使双表 join 也要注意表索引、SQL 性能。 

相关文章:

Mysql梳理10——使用SQL99实现7中JOIN操作

10 使用SQL99实现7中JOIN操作 10.1 使用SQL99实现7中JOIN操作 本案例的数据库文件分享: 通过百度网盘分享的文件:atguigudb.sql 链接:https://pan.baidu.com/s/1iEAJIl0ne3Y07kHd8diMag?pwd2233 提取码:2233 # 正中图 SEL…...

24.9.27学习笔记

Xavier初始化,也称为Glorot初始化,是一种在训练深度神经网络时用于初始化网络权重的策略。它的核心思想是在网络的每一层保持前向传播和反向传播时的激活值和梯度的方差尽可能一致,以避免梯度消失或梯度爆炸的问题。这种方法特别适用于激活函…...

C++第3课——保留小数点、比较运算符、逻辑运算符、布尔类型以及if-else分支语句(含视频讲解)

文章目录 1、课程笔记2、课程视频 1、课程笔记 #include<iostream>//头文件 input output #include<cmath> //sqrt()所需的头文件 #include<iomanip>//setprecision(1)保留小数点位数所需的头文件 using namespace std; int main(){/*复习上节课内容1、…...

韩媒专访CertiK首席商务官:持续关注韩国市场,致力于解决Web3安全及合规问题

作为Web3.0头部安全公司&#xff0c;CertiK在KBW期间联合CertiK Ventures举办的活动引起了业界的广泛关注。CertiK一直以来与韩国地方政府保持着紧密合作关系&#xff0c;在合规领域提供强有力的支持。而近期重磅升级的CertiK Ventures可以更好地支持韩国本地的区块链项目。上述…...

计算机毕业设计之:宠物服务APP的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(3)嵌入式系统的存储体系

目录 感悟 一、存储系统的层次结构 存储器系统 二、内存管理单元 三、RAM和ROM的种类与选型 1、RAM RAM分类 2、ROM ROM分类 四、高速缓存Cache 五、其他存储设备 flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺软考中级嵌入式系统设计师系列总目录https…...

Unity android 接USBCamera

目录 一、前提 1. unity打包android后&#xff0c;链接USB摄像头&#xff0c;需要USB权限。 二、流程 1.Unity导出android工程&#xff0c;Player配置如图&#xff1a; 2.导出android工程 3.在android工程中找到AndroidManifest.xml加入usb权限相关 <?xml version&quo…...

演示:基于WPF的DrawingVisual开发的频谱图和律动图

一、目的&#xff1a;基于WPF的DrawingVisual开发的频谱图和律动图 二、效果演示 波形图 极坐标 律动图极坐标图 律动图柱状图 Dock布局组合效果 三、环境 VS2022,Net7,Win10&#xff0c;NVIDIA RTX A2000 四、主要功能 支持设置起始频率&#xff0c;终止频率&#xff0c;中心…...

【数据结构初阶】排序算法(中)快速排序专题

文章目录 1. 快排主框架2. 快排的不同实现2. 1 hoare版本2. 2 挖坑法2. 3 lomuto前后指针法2. 4 快排的非递归版本 3. 快排优化3. 1 快排性能的关键点分析:3. 1 三路划分3. 2 introsort自省排序 1. 快排主框架 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。 其…...

Redis缓存双写一致性笔记(上)

Redis缓存双写一致性是指在将数据同时写入缓存&#xff08;如Redis&#xff09;和数据库&#xff08;如MySQL&#xff09;时&#xff0c;确保两者中的数据保持一致性。在分布式系统中&#xff0c;缓存通常用于提高数据读取的速度和减轻数据库的压力。然而&#xff0c;当数据更新…...

PCB基础

一、简介 PCB&#xff1a;printed circuit board&#xff0c;印刷电路板 主要作用&#xff1a;传输信号、物理支撑、提供电源、散热 二、分类 2.1 按基材分类 陶瓷基板&#xff1a;包括氧化铝、氮化铝、碳化硅基板等&#xff0c;具有优异的导热性&#xff0c;适用于高温和高…...

PostgreSQL 17:新特性与性能优化深度解析

目录 引言核心新特性 块级别增量备份与恢复逻辑复制槽同步参数SQL/JSON的JSON_TABLE命令PL/pgSQL支持数组%TYPE和%ROWTYPE 性能优化 IO合并读取性能参数真空处理过程的内存管理改进写前日志&#xff08;WAL&#xff09;锁的改进 升级建议结语 引言 PostgreSQL 17版本于2024年…...

[Linux#58][HTTP] 自己构建服务器 | 实现网页分离 | 设计思路

目录 一. 最简单的HTTP服务器 二.服务器 2.0 Protocol.hpp httpServer.hpp 子进程的创建和退出 子进程退出的意义 父进程关闭连接套接字 httpServer.cc argc (argument count) argv (argument vector) 三.服务器和网页分离 思考与补充&#xff1a; 一. 最简单的HTT…...

7.MySQL内置函数

目录 日期函数时间函数字符串函数数学函数其他函数 日期函数 函数名称描述current_date()当前日期current_time()当前时间current_timesamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date, interval d_value_tyep)在date中添加日期函数或时间。interval后…...

如何快速自定义一个Spring Boot Starter!!

目录 引言&#xff1a; 一. 我们先创建一个starter模块 二. 创建一个自动配置类 三. 测试启动 引言&#xff1a; 在我们项目中&#xff0c;可能经常用到别人的第三方依赖&#xff0c;又是引入依赖&#xff0c;又要自定义配置&#xff0c;非常繁琐&#xff0c;当我们另一个项…...

【音视频】ffmpeg其他常用过滤器filter实现(6-4)

最近一直在研究ffmpeg的过滤器使用&#xff0c;发现挺有意思的&#xff0c;这里列举几个个人感觉比较有用的过滤器filter&#xff0c;如下是代码实现&#xff0c;同样适用于命令行操作&#xff1a; 1、视频模糊&#xff1a;通过boxblur可以将画面进行模糊处理&#xff0c;第1个…...

云栖3天,云原生+ AI 多场联动,新产品、新体验、新探索

云栖3天&#xff0c;云原生 AI 20场主题分享&#xff0c;三展互动&#xff0c;为开发者带来全新视听盛宴 2024.9.19-9.21 云栖大会 即将上演“云原生AI”的全球盛会 展现最新的云计算技术发展与 AI技术融合之下的 “新探索” 一起来云栖小镇 见证3天的云原生AI 前沿探索…...

jackson对于对象序列化的时候默认空值和手动传入的null的不同处理

Jackson 在序列化对象时如何处理默认的空值和手动传入的 null&#xff0c;其实归结于它的序列化机制和注解配置。默认情况下&#xff0c;Jackson 不区分 手动设置的 null 和 对象中字段的默认空值&#xff0c;但可以通过配置来改变其行为。具体细节如下&#xff1a; 1. 默认行为…...

L8打卡学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 SVM与集成学习 SVMSVM线性模型SVM非线性模型SVM常用参数 集成学习随机森林导入数据查看数据信息数据分析随机森林模型预测结果结果分析 个人总结 SVM 超平面&…...

VBA解除Excel工作表保护

Excel工作表保护解除 工作表保护后无法编辑内容&#xff0c;可能是密码忘记&#xff0c;不可暴力破解隐私 1 打开需的Excel 2 Alt F11 打开代码编辑&#xff0c;点击任意代码编辑项&#xff0c;将如下代码复制&#xff0c;并运行。 Public Sub GetWorkbookPassword()Dim w1 A…...

【实战指南】110kV变电站电气设计全流程解析:从主变压器选型到防雷接地

1. 110kV变电站电气设计核心流程 110kV变电站作为电力系统的关键节点&#xff0c;其电气设计质量直接影响区域供电可靠性和安全性。我在参与多个变电站项目后发现&#xff0c;设计过程就像搭积木&#xff0c;必须从底层开始稳扎稳打。整个流程可分为四个关键阶段&#xff1a; …...

Nginx 安装部署

Yum在线安装部署 Nginx- 记录常用服务的版本&#xff1a;1.22.1- 选用稳定版本&#xff0c;上一个稳定版本1&#xff09;配置 yum 源[rootweb01 ~]# vim /etc/yum.repos.d/nginx.repo[nginx-stable]namenginx stable repobaseurlhttp://nginx.org/packages/centos/$releasever/…...

OpenClaw对话式编程:Qwen3-32B私有镜像调试代码

OpenClaw对话式编程&#xff1a;Qwen3-32B私有镜像调试代码 1. 为什么选择OpenClawQwen3-32B组合 去年我在重构一个Python数据分析项目时&#xff0c;每天要花大量时间反复执行"写代码-调试-优化"的循环。传统IDE的补全功能对复杂业务逻辑帮助有限&#xff0c;直到…...

foobar2000 DUI界面深度解析:foobox-cn技术架构与实战配置完整指南

foobar2000 DUI界面深度解析&#xff1a;foobox-cn技术架构与实战配置完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn是针对foobar2000播放器开发的现代化DUI&#xff08;默认用户…...

UniApp项目实战:手把手教你集成百度离线人脸SDK实现App实名认证(含完整代码)

UniApp实战&#xff1a;百度离线人脸SDK集成全流程与避坑指南 移动应用开发中&#xff0c;实名认证功能已成为金融、社交、电商等领域的标配需求。对于使用UniApp框架的开发者而言&#xff0c;如何高效集成百度离线人脸SDK实现安全可靠的认证流程&#xff0c;是提升产品竞争力的…...

百考通:AI全流程智能化赋能答辩PPT,让学术展示更高效从容

毕业季、开题季&#xff0c;一份专业出彩的PPT是顺利通过答辩的关键。但从论文中提炼核心观点、规划答辩逻辑、设计美观版式&#xff0c;往往让学生们焦头烂额。百考通&#xff08;https://www.baikaotongai.com&#xff09; 凭借AI技术深度赋能&#xff0c;打造出一站式答辩PP…...

AI率太高被退稿?这5款工具帮你稳过查重+降AI双关!

&#x1f525; 2026实测推荐&#xff1a;5款真正管用的工具1️⃣ 毕业之家 AI&#xff08;毕业季救星&#xff09;AI率效果&#xff1a;<8%亮点&#xff1a;专为国内高校定制&#xff0c;自动适配学校格式要求&#xff0c;连页眉页脚都不用手调价格&#xff1a;本科套餐199元…...

Tendis与Redis Cluster对比分析:性能、成本与适用场景深度评测

Tendis与Redis Cluster对比分析&#xff1a;性能、成本与适用场景深度评测 【免费下载链接】Tendis Tendis is a high-performance distributed storage system fully compatible with the Redis protocol. 项目地址: https://gitcode.com/gh_mirrors/te/Tendis 在当今…...

Microstation v8与Terrasolid插件安装全攻略:从零到精通

1. MicroStation v8安装前的准备工作 在开始安装MicroStation v8之前&#xff0c;我们需要做好充分的准备工作。首先确保你的电脑满足最低系统要求&#xff1a;Windows 7/8/10操作系统&#xff08;32位或64位均可&#xff09;、至少4GB内存、2GB可用磁盘空间。我建议使用独立显…...

从WordPress同步到数据库:一个真实案例拆解n8n节点间的“数据对话”

从WordPress到数据库&#xff1a;用n8n构建数据管道的实战解剖 当你点击WordPress后台的"发布"按钮时&#xff0c;一篇新文章如何穿越数字世界&#xff0c;精准落入目标数据库的表格中&#xff1f;这背后是一场由n8n节点编排的精密数据芭蕾。本文将带你走进一个真实的…...