MySQL(4)多表查询
引言:为什么需要多表的查询?
A:提高效率,多线进行。
高内聚、低耦合。
一、多表查询的条件
1、错误的多表查询:
SELECT employee_id,department_name
FROM employees,departments;
SELECT employee_id,department_name
FROM employees CROSS JION departments;
每个员工与每个部门都进行一次匹配,出现笛卡尔积的错误。
错误原因:缺少了多表的连接条件。
解决方案:用WHERE关键字加入连接条件
2、若查询语句中出现多个表中都存在的字段,必须指明此字段所在的表。
3、可以给表起别名,在SELECT和WHERE中使用。
SELECT department_name,employee_id,departments.deps_id
FROM departments deps,employees emps
WHERE emps.department_id = deps.department_id;
但是,如果为表起了别名,则不能再使用原名。否则报错。
4、如果有n个表实现多表的查询,则至少有n-1个连接条件
二、多表查询的分类
(1)等值连接与非等值连接
等值连接即为:连接条件为相等运算的语句。
非等值连接:连接条件中不使用等号。
可以使用BETWEEN…AND、>=、<=等。
例如:
SELECT e.salary,e.last_name
FROM employees e,job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
(2)自连接与非自连接
自连接:
使用同一张表,通过取别名的方式进行SELECT的区分,使用WHERE写明查找的条件。
SELECT emp.employee_id,emp.last_name,mag.employee_id,mag.last_name
FROM employees emp,employees mag
WHERE emp.manager_id = mag.employee_id;
(3)内连接与外连接
内连接:合并具有同一列的两个以上的表的行,结果集中不包含员工表与另一个表不匹配的行
理解为;合并两个以上的表中满足WHERE条件的行
外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表语另一个表匹配的行之外,还查询了左表或右表中不匹配的行。
可以理解为:除了内连接的表内容,还查询了两张表中内连接内容以外的内容。
外连接的分类;左外连接、右外连接、满外连接。
注意,查询所有的、不同的表中的数据,使用外连接。
MySQL不支持SQL92的外连接写法。
SQL99中使用JOIN … ON 实现外连接的写法。如果加入多张表,则依次使用JOIN ON进行连接。
SQL99中使用JION..ON的方式实现多表的查询
SQL99实现内连接:
SELECT employee_id,department_name,city
FROM employees e JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON d.location_id = l.location_id;
SQL99实现外连接:
左外连接:
SELECT last_name,department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.employee_id = d.department_id;
右外连接:
SELECT last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id;
满外连接:
SELECT last_name,department_name
FROM employees e FULL JOIN departments d
ON e.department_id = d.department_id;
关于满外连接,MySQL不支持,Oracle支持。
OUTER可以省略。
UION关键字的使用:合并查询结果
SELECT……FROM……
UNION
SELECT……FROM……
UNION ALL操作符:在满外连接的情况下,加上两表的交集,对两表重复的部分不去重
三、SQL99的七种JOIN操作

1、左外连接
2、满足左外连接的条件并且右表为空
举例理解:
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_id IS NULL;
3、内连接
4、右外连接
5、满足右外连接的条件并且左表为空
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.employee_id IS NULL;
6、不去重的UNION ALL
取一个左外连接和去掉交集的右表。
或者取一个右外连接和去掉交集的左表。
SELECT employee_id,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,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id;
7、去重的UNION
可视作2、5相连接
SELECT employee_id,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,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.employee_id IS NULL;
NATURAL JOIN与USING
SQL99语法的新特性1:自然连接
NATURAL JOIN:自动查询两张连接表中所有相同的字段,然后进行等值连接
但不够灵活。
新特性2:USING
USING可以替换等值条件。
当两张表中左等值的字段同名时可以采用。
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
USIING (department_id);
相关文章:
MySQL(4)多表查询
引言:为什么需要多表的查询? A:提高效率,多线进行。 高内聚、低耦合。 一、多表查询的条件 1、错误的多表查询: SELECT employee_id,department_name FROM employees,departments; SELECT employee_id,department…...
web前端3--css
注意(本文一切代码一律是在vscode中书写) 1、书写位置 1、行内样式 //<标签名 style"样式声明"> <p style"color: red;">666</p> 2、内嵌样式 1、style标签 里面写css代码 css与html之间分离 2、css属性:值…...
【Nacos】Nacos快速上手
Nacos快速上手 项目环境介绍一、服务注册/服务发现1.引入Spring Cloud Alibaba依赖2.引入Nacos相关的依赖3.引入Load Balance依赖4.配置Nacos的地址 二、修改远程调用代码三、测试四、启动多个服务,测试负载均衡五、可能出现的问题 项目环境介绍 请你确保你的服务器…...
C++otlv4连接sql serveer使用记录(注意点)
C使用otlv4在做插入时,有一些设计的坑需要注意 插入数据: 当要给表中插入单个字符时,数据库表设计使用varchar(1)是合理的,但是otlv4一直报错char。 后续查很久才知道,otlv4所写的绑定的字符数组的长度应该实际数组…...
在Linux中,如何查询已安装软件包的版本信息?
在Linux中,查询已安装软件包的版本信息可以使用多种方法,具体取决于你使用的Linux发行版及其所采用的包管理器。 RPM-based Linux系统(如Red Hat、CentOS、Dedora) 使用rpm命令查询所有已经安装的特定软件包及其版本:…...
搜广推实习面经四
字节跳动TAC 广告算法 一、回归任务的评价指标有哪些 1.均方误差(Mean Squared Error, MSE)/均方根误差(Root Mean Squared Error, RMSE) M S E 1 n ∑ i 1 n ( y i − y ^ i ) 2 MSE \frac{1}{n} \sum_{i1}^{n} (y_i - \ha…...
【Elasticsearch】inference ingest pipeline
Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline,你可以执行各种数据转换和富化操作,包括使用机器学习模型进行推理(inference)。这在处理词嵌入、情感分析、图像识别等场景…...
AQS公平锁与非公平锁之源码解析
AQS加锁逻辑 ReentrantLock.lock public void lock() {sync.acquire(1);}AbstractQueuedSynchronizer#acquire public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}addWaiter就是将节点加入…...
若依框架在企业中的应用调研
若依框架作为一款基于 Spring Boot 的轻量级 Java 快速开发框架,在企业级应用开发中发挥着重要作用。以下是对其在企业中应用的调研情况: 应用现状 广泛应用于多种管理系统:在众多企业中,若依框架常被用于构建各类后台管理系统&a…...
【Day23 LeetCode】贪心算法题
一、贪心算法 贪心没有套路,只有碰运气(bushi),举反例看看是否可行,(运气好)刚好贪心策略的局部最优就是全局最优。 1、分发饼干 455 思路:按照孩子的胃口从小到大的顺序依次满足…...
2025年PHP面试宝典,技术总结。
面试是进入职场的第一道坎,因为我本身学校太一般的问题在面试中遇到了各种不爽,和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师,主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点࿰…...
Qt中的按钮组:QPushButton、QToolButton、QRadioButton和QCheckBox使用方法(详细图文教程)
💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 &a…...
influxdb+grafana+jmeter
influxdb influxd先启动 启动完成后执行 influxdb的端口号 grafana的启动 通过grafana-server.exe启动grafana 启动后打开 http://localhost:8087/...
Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
leetcode 479. 最大回文数乘积
题目如下 看完题目后没有想到取巧的办法所以尝试使用枚举法。 使用枚举法之前先回答两个问题: 1. 如何构造回文串? 2. 如何判断是否存在两个n位整数相乘可以得到这个回文串? 显然n位数与n位数相乘必然是2n位数也就是说最大回文整数长度必然…...
独立搭建UI自动化测试框架
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 今天给大家分享一个seleniumtestngmavenant的UI自动化,可以用于功能测试,也可按复杂的业务流程编写测试用例,今天此篇文章不过多…...
62,【2】 BUUCTF WEB [强网杯 2019]Upload1
进入靶场 此处考点不是SQL,就正常注册并登录进去 先随便传一个 进行目录扫描,我先用爆破代替 先随便后面写个文件名 为了提供payload位置 www.tar.gz真的存在 返回浏览器修改url就自动下载了 看到tp5,应该是ThinkPHP5框架 参考此博客的思路方法c[强网杯…...
Spring Boot 整合 ShedLock 处理定时任务重复执行的问题
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
常见Arthas命令与实践
Arthas 官网:https://arthas.aliyun.com/doc/,官方文档对 Arthas 的每个命令都做出了介绍和解释,并且还有在线教程,方便学习和熟悉命令。 Arthas Idea 的 IDEA 插件。 这是一款能快速生成 Arthas命令的插件,可快速生成…...
Glide加载gif遇到的几个坑
Glide本身支持gif格式的动画加载,但是大多数情况下我们用Glide都是去加载一些静态图片,加载gif动态图的需求不是很多,因此这次使用Glide加载gif就遇到了一些令人匪夷所思的问题 问题一:加载gif图片会有明显的卡顿 通常情况下我们…...
深入解析gbplanner_ros:基于图的自主探索路径规划算法在复杂地下环境中的应用
1. 什么是gbplanner_ros? 如果你正在研究机器人自主探索技术,特别是针对地下矿洞这类复杂环境,那么gbplanner_ros这个基于图的路径规划算法可能会引起你的兴趣。我第一次接触这个算法是在一个地下管道巡检机器人项目中,当时我们尝…...
Makefile 入门与 C/C++ 项目构建指南
Makefile 入门与 C/C 项目构建指南 本文面向 C/C 初学者与日常维护多文件工程的开发者,系统说明 GNU Make 与 Makefile 的作用、执行逻辑、常用语法与可复用模板,帮助从「手动敲 gcc」过渡到可维护的自动化构建,并具备阅读、修改常见开源项目…...
什么是网站结构优化_它在 SEO 中的作用是什么_网站速度优化有哪些方法_它在 SEO 中的作用是什么
什么是网站结构优化?它在 SEO 中的作用是什么 网站结构优化,简称“结构优化”,是指通过优化网站的层级结构、导航系统和内容组织方式,以提升用户体验和搜索引擎的抓取效率的一系列措施。网站结构的良好设计,不仅可以让用户更容易…...
PyTorch训练中的retain_graph使用指南:如何避免Saved variables already freed错误
PyTorch中retain_graph的深度解析:从原理到实战避坑指南 在PyTorch的动态图机制中,retain_graph参数就像一位默默无闻的后台管理员,平时很少被提及,但一旦出现问题就会让整个训练流程崩溃。许多开发者在遇到"Saved variable…...
5分钟快速上手:用Docker一键部署Milvus向量数据库(附常见错误解决)
5分钟极速部署Milvus:Docker实战指南与高频避坑手册 当我们需要快速验证一个AI项目的可行性时,最头疼的往往不是模型本身,而是基础设施的搭建。上周我正准备测试一个图像检索系统,结果在向量数据库部署环节就卡了整整两天——各种…...
Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置
Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置 1. 引言 想象一下,你开发了一个超酷的复古像素风语音设计工具,用户只需要输入文字和语气描述,就能生成各种情绪饱满的AI配音。这个工具在本地测试时运行完美&a…...
如何高效提取PDF表格数据?Tabula的非典型使用指南
如何高效提取PDF表格数据?Tabula的非典型使用指南 【免费下载链接】tabula Tabula is a tool for liberating data tables trapped inside PDF files 项目地址: https://gitcode.com/gh_mirrors/ta/tabula 在数字化办公中,PDF文件常被用作数据交换…...
ESP32开发板选型指南:从Arduino到NodeMCU,哪款更适合你的项目?
ESP32开发板选型指南:从Arduino到NodeMCU,哪款更适合你的项目? 在物联网和嵌入式开发领域,ESP32系列开发板凭借其出色的性价比和丰富的功能,已经成为众多开发者的首选。面对市场上琳琅满目的ESP32开发板型号࿰…...
揭秘银行核心系统C++内存池崩溃真相:基于真实生产环境的17GB/日内存碎片数据复盘
第一章:银行核心系统C内存池崩溃事件全景概览某大型商业银行在一次日终批量交易高峰期,核心账务系统突发大规模服务中断,平均响应延迟飙升至12秒以上,部分交易返回“内存分配失败”错误码。事后根因分析确认:问题源于自…...
Tsuru平台终极选型指南:如何选择最适合你的PaaS解决方案
Tsuru平台终极选型指南:如何选择最适合你的PaaS解决方案 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru 在当今快速发展的云原生时代,选择合适的PaaS平台…...
