Mysql第二章 多表查询的操作
这里写自定义目录标题
- 一 外连接与内连接的概念
- sql99语法实现 默认是内连接
- sql99语法实现左外连接,把没有部门的员工也查出来
- sql99语法实现右外连接,把没有人的部门查出来
- sql99语法实现满外连接,mysql不支持这样写
- mysql中如果要实现满外连接的效果,推荐使用union关键字
- 二 自连接和非自连接的概念
- 三 等值连接和非等值连接的概念
- 1.1 等值连接
- 1.1 非等值连接
- 四 七种JOIN的实现
- 1 内连接 A∩B
- 2 左外连接
- 3 右外连接
- 4 A - A∩B
- 5 B - A∩B
- 6 满外连接
- 7 满外连接- 内连接
- 五 natural join与USING
因为直接连接多表时,笛卡尔积的问题引出了多表联查的问题,多表查询基本分为三类,外连接和内连接,等值和非等值,自连接和非自连接
一 外连接与内连接的概念
这些连接关系,归根结底是集合的交并补运算
求出两个表的公共部分,叫做内连接,相当于是交集
求出两个表的公共部分加上左边的,叫做左外连接
如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为从表
如果是右外连接,则连接条件右边的表称为主表,左边的表称为从表
sql99语法实现 默认是内连接
SELECT last_name,department_name
FROM employees e INNER JOIN departments d
on e.department_id=d.department_id
结果显示为102条数据:
sql99语法实现左外连接,把没有部门的员工也查出来
SELECT last_name,department_name
FROM employees e LEFT OUTER JOIN departments d
on e.department_id=d.department_id;
结果为103条数据
相当于是左边是员工表的全部信息,右边是部门表的部分信息
员工表和部门表的交集,e交d,和部门表为NULL但员工表有人的信息
sql99语法实现右外连接,把没有人的部门查出来
SELECT last_name,department_name
FROM employees e RIGHT OUTER JOIN departments d
on e.department_id=d.department_id;
结果如图可见,有119条信息
也就是关键是右边的部门表,所以叫做,右外连接,首要查出的是所有的部门
sql99语法实现满外连接,mysql不支持这样写
SELECT last_name,department_name
FROM employees e
FULL OUTER departments d
ON e.department_id=d.department_id
mysql中如果要实现满外连接的效果,推荐使用union关键字
Union关键字,返回一个并集,类似于A并B,会执行去重检索的操作
union all 返回并集加上交集 ,优点是效率比较高
- 查询部门编号>90或邮箱包含a的员工信息
SELECT * FROM employees WHERE email LIKE '%a%'
UNION SELECT * FROM employees WHERE department_id>90;
- 查询所有部门号和所有员工姓名,需要去重
#查找所有的员工名字,以及所有的部门
SELECT last_name,department_name
FROM employees e LEFT OUTER JOIN departments d
on e.department_id=d.department_id
UNION
SELECT last_name,department_name
FROM employees e RIGHT OUTER JOIN departments d
on e.department_id=d.department_id;
结果显示出来118条信息
这里出现了一个问题,那就是,右外连接的数据,居然比去重后的并集数目还要多,以后再解决吧
- 查询所有部门号和所有员工姓名,不需要去重
结果222条信息
SELECT last_name,department_name
FROM employees e LEFT OUTER JOIN departments d
on e.department_id=d.department_id
UNION ALL
SELECT last_name,department_name
FROM employees e RIGHT OUTER JOIN departments d
on e.department_id=d.department_id;
二 自连接和非自连接的概念
- 自连接,就是多表查询中自己引用自己
查询员工id,员工姓名,管理者的ID和姓名
# 查询员工id,员工姓名,管理者的ID和姓名
SELECT emp.employee_id,emp.last_name,mgr.employee_id 经理工号,mgr.last_name 经理名字
FROM employees emp,employees mgr
WHERE emp.manager_id=mgr.employee_id;
- 非自连接,普通的多表查询
SELECT last_name,department_name
FROM employees e INNER JOIN departments d
on e.department_id=d.department_id
三 等值连接和非等值连接的概念
1.1 等值连接
等值连接也称为显示内连接,在进行多表联合查询时通过“=”等号来连接多张表之间相字段对应的值,其产生的结果会出现重复列。意思是,如果对多张表进行等值连接操作,那么前提要求是这多张表之间必须有相同的字段名。,比方说一个表的主键是另一个表的外键
SELECT last_name,department_name
FROM employees e INNER JOIN departments d
on e.department_id=d.department_id
1.1 非等值连接
非等值连接最大的特点就是:连接条件中的关系是非等量关系
查询一个员工的名字,工资和所处的等级
SELECT last_name,salary,grade_level
FROM employees e,job_grades j
WHERE e.salary BETWEEN j.lowest_sal and j.highest_sal;
四 七种JOIN的实现
1 内连接 A∩B
# 内连接 A∩B
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
JOIN departments d
ON e.department_id=d.department_id;
2 左外连接
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id;
3 右外连接
# 右外连接,右边的项目作为主表,左边的是从表
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id =d.department_id;
4 A - A∩B
# A - A∩B 有名字,没有部门
SELECT e.employee_id ,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id
WHERE d.department_id
IS NULL;
5 B - A∩B
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;
6 满外连接
左外连接并上B - A∩B
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
union all
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id;
7 满外连接- 内连接
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
union all
SELECT e.employee_id ,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id
WHERE d.department_id
IS NULL;
五 natural join与USING
自动查询两张连接表中 所有相同的字段 ,然后进行 等值 连接
SELECT employee_id,last_name,department_name
FROM employees e NATURAL JOIN departments d;
USING相对于natural join 优化了一点
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
USING (department_id);
多表查询需要限制,太多了相当于多重for循环,消耗资源
相关文章:
Mysql第二章 多表查询的操作
这里写自定义目录标题 一 外连接与内连接的概念sql99语法实现 默认是内连接sql99语法实现左外连接,把没有部门的员工也查出来sql99语法实现右外连接,把没有人的部门查出来sql99语法实现满外连接,mysql不支持这样写mysql中如果要实现满外连接的…...
ESP32-CAM:TinyML 图像分类——水果与蔬菜
目录 故事 硬件参数: 在 Arduino IDE 上安装 ESP32-Cam 使用 BLINK 测试电路板 测试无线网络 运行您的 Web 服务器 水果与蔬菜-图像分类 下载数据集 使用 Edge Impulse Studio 训练模型...
如何防止订单重复支付
想必大家对在线支付都不陌生,今天和大家聊聊如何防止订单重复支付。 看看订单支付流程 我们来看看,电商订单支付的简要流程: 订单钱包支付流程 从下单/计算开始: 下单/结算:这一步虽然不是直接的支付起点,但…...
不是那么快乐的五一
大家好,我是记得诚。 五一假期结束了,明天开始上班了。 这个假期没休息好,也没出去玩。 放假前一天,接到通知让加班。 第一天就去公司加班了,属实很难受,我心想如果别人有了出远门的安排,还…...
Maven命令和配置详解
Maven命令和配置详解 1. pom基本结构2. build基本结构3. Maven命令详解3.1 打包命令3.2 常用命令3.3 批量修改版本-父子pom4. Maven配置详解4.1 settings.xml4.2 项目内的maven工程结构Maven POM构建生命周期工程实践1. pom基本结构 <?xml versi...
P3029 [USACO11NOV]Cow Lineup S 双指针 单调队列
“五一”小长假来了趟上海,在倒数第二天终于有时间做了一会儿题目,A了之后过来写一篇题解 【问题描述】 农民约翰雇一个专业摄影师给他的部分牛拍照。由于约翰的牛有好多品种,他喜欢他的照片包含每个品种的至少一头牛。 约翰的牛都站在一条沿…...
数据结构与算法之链表: Leetcode 83. 删除排序链表中的重复元素 (Typescript版)
删除排序链表中的重复元素 https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 示例 1 输入:head [1,1,2] 输出&…...
ubuntu16.04升级到20.04后报错 By not providing “FindEigen.cmake“
编译问题: CMake Error at modules/perception/lidar/CMakeLists.txt:14 (find_package): By not providing "FindEigen.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Eigen&…...
设计模式——模板方法模式
是什么? 在我们的实际开发中尝尝会遇到这种问题:在设计一个系统时知道了算法所需要的关键步骤,而且确定了这些步骤的执行顺序,但是某些步骤的具体实现还不知道,或者说某些步骤的实现与具体的环境相关,例如每…...
15 | Qt的自定义信号
1 前提 Qt 5.14.2 2 具体操作 2.1 自定义信号 2.1.1 UI界面设置 2.1.1.1 widget.ui 2.1.1.2 setdialog.ui 2.1.2 headers 2.1.2.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui {class Widget; } QT_END_NAMESP…...
线性表,顺序表,链表
线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线 …...
洛谷 P2782 友好城市 线性DP 最长上升子序列 二分查找 lower_bound
🍑 算法题解专栏 🍑 洛谷:友好城市 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对…...
easyexcel读取excel合并单元格数据
普通的excel列表,easyexcel读取是没有什么问题的。但是,如果有合并单元格,那么它读取的时候,能获取数据,但是数据是不完整的。如下所示的单元格数据: 我们通过简单的异步读取,最后查看数据内容&…...
2023哪款蓝牙耳机性价比高?200左右高性价比蓝牙耳机推荐
现如今的蓝牙耳机越来越多,人们在选择时不免纠结,不知道选什么蓝牙耳机比较好?针对这个问题,我来给大家推荐几款性价比高的蓝牙耳机,一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机 参考价:299 蓝牙版本&am…...
Java代码弱点与修复之——Masked Field(掩码字段)
弱点描述 MF: Masked Field (FB.MF_CLASS_MASKS_FIELD) 是 FindBugs 代码分析工具的一个警告信息, 属于中风险的代码弱点。 Masked Field,翻译过来是掩码字段, 字段可以理解为属性, 那么掩码是什么意思呢? 掩码是什么? 掩码是一串二进制代码对目标字段进行位与运算,屏…...
C语言编程入门之刷题篇(C语言130题)(8)
(题目标题可以直接跳转此题链接) BC72 平均身高 描述 从键盘输入5个人的身高(米),求他们的平均身高(米)。 输入描述: 一行,连续输入5个身高(范围0.00~2.00…...
QML动画类型总结
目录 一 常用动画 二 特殊场景动画 一 常用动画 有几种类型的动画,每一种都在特定情况下都有最佳的效果,下面列出了一些常用的动画: 1、PropertyAnimation(属性动画)- 使用属性值改变播放的动画; 2、Num…...
编译一个魔兽世界开源服务端Windows需要安装什么环境
编译一个魔兽世界开源服务端Windows需要安装什么环境 大家好我是艾西,去年十月份左右wy和bx发布了在停服的公告。当时不少小伙伴都在担心如果停服了怎么办,魔兽这游戏伴随着我们渡过了太多的时光。但已经发生的事情我们只能顺其自然的等待GF的消息就好了…...
HTML5字体集合的实践经验
随着互联网的发展,网站已成为人们获取信息和交流的重要平台。而一个好的网站,不仅需要有美观的界面,还需要有良好的用户体验。其中,字体是影响用户体验的一个重要因素。下面就让我们来看看HTML字体集合的相关内容。 HTML字体集合是…...
Mybatis 框架 ( 一 ) 基本步骤
1.概念 1.1.什么是Mybatis框架 (1)Mybatis是一个半ORM(Object Relation Mapping 对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、…...
【华为OD机试真题】We Are A Team(C++javapython)100%通过率 超详细代码注释 代码优化
We Are A Team 题目描述: 总共有n个人在机房,每个人有一个标号(1<=标号<=n) ,他们分成了多个团队,需要你根据收到的m条消息判定指定的两个人是否在 一个团队中,具体的: 1、消息构成为abc,整数a、b分别代表两个人的标号,整数C代表指令 2、c = = 0 代表a和b在一…...
Oracle_Workflow_Builder工作流工具(一)
简介 目标WORKFLOW是oracle 公司的一个标准产品,它通过图形化的方式来表达业务处理过程。用户使用工作流可以灵活地定义或更改流程的结构。WORKFLOW是建立在数据库基础上的一个应用,它由后台的数据对象和前台的客户端程序组成。本文档主要介绍工作流的基…...
JavaWeb学习--RequestResponse
目录 JavaWeb学习--Request&Response 1,Request和Response的概述 request:获取请求数据 response:设置响应数据 **小结** 2,Request对象 **小结** 2.2 Request获取请求数据 **小结** 2.4 请求参数中文乱码问题 URL编码 2.5 Request请求转…...
Linux cat 命令
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数说明: -n 或 --number:由 1 开始对所有输出的行数编…...
力扣sql中等篇练习(十四)
力扣sql中等篇练习(十四) 1 最后一个能进入电梯的人 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 在表某一个范围内的可以考虑自连接的方式,注意连接的表只需要精准的字段 # 需要排序是因为它需要找到最后一个上车的用户 SELECT q1.person_name…...
什么是Spring FactoryBean?有什么作用?
1、什么是Spring Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IOC和AOP为内核。含有七大核心模块 2、Spring的七大模块 (1)Spring Core:核心容器提供了Spring的基本功能。核心容器的核心功能是用IOC 容器来管理类的依赖关系ÿ…...
Python List pop()方法
在Python中,列表(list)是一种有序的可变集合,可以包含任何数据类型的元素。列表对象提供了许多方法来处理列表中的元素,其中之一是pop()方法。 pop()方法用于从列表中移除并返回指定位置的元素。如果不指定位置&#…...
HJ51 输出单向链表中倒数第k个结点
写在前面: 做题环境如下: 题目渠道:牛客网 HJ51 输出单向链表中倒数第k个结点 华为机试题 编程语言:C 一、题目描述 描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针…...
c#笔记-内置类型
内置类型 内置类型是一些有关键字表示的类型。关键字具有非常高的优先级,可以让你在没有别的配置的情况下, 只要用的是c#就可以使用。这也意味着这些类型是非常重要,或是基本的东西。 整数:byte, sbyte, short, ushort, int, ui…...
功能齐全的 DIY ESP32 智能手表设计之原理图讲解一
相关设计资料下载ESP32 智能手表带心率、指南针设计资料(包含Arduino源码+原理图+Gerber+3D文件).zip 目录 USB部分原理图讲解 供电部分原理图讲解 USB转串口原理图讲解...
用苹果cms做电影网站/最好的免费信息发布平台
需求: python代码实现 1. 按层打印二叉树 2. 需要打印二叉树层与层之间的斜线 3. 结点的下一层如果没有子节点,以‘N’代替 方法: 使用namedtuple表示二叉树使用StringIO方法,遍历时写入结果,最后打印出结果打印…...
抖音代刷网站推广快速/nba最新消息新闻
2006-05-122.多元函数的值域是否为区间2.多元函2。多元函数的值域是否为区间【说是一个实数集更妥当,在大多数情形下,初等函数的值域是区间或若干个区间的并】3。一、详解一元函数为何:(1)可导←→可微【书上有专门的定理,并严格给出了证明】…...
增加网站访问量/成都谷歌seo
在第一次安装的时候出现这个错误信息 解决办法: 修改config.inc.php文件里的两个属性值为: $tlCfg->log_path TL_ABS_PATH . logs . DIRECTORY_SEPARATOR ;$g_repositoryPath TL_ABS_PATH . "upload_area" . DIRECTORY_SEPARATOR; 配置中文 在config…...
自己做网站服务器要多少钱/淘宝搜索关键词排名查询工具
前言作为后端程序员的我们,通常我们要构建API服务,要写服务端接口,自然少不了写接口文档,否则就要口述,但口述的痛点也很多。一般情况下,我们的接口文档要写两份:1.给前端团队看的word接口文档。…...
给个网站谢谢各位了/域名查询系统
1.股票 股票是股份有限公司签发的证明股东所持股份的凭证。股票具有权利性、非返还性、风险性和流通性等特点。目前,我国发行的股票按照投资主体的不同,可分为国家股、法人股、内部职工股和社会公众个人股;按照股东权益和风险大小,可以分为普…...
做网站的外包公司上班好不好/seochan是什么意思
背景: 因为移动端APP和Msite手机注册发送短信验证码没有添加图片验证码功能。公司的短信接口被恶意刷取。所以我们就觉得在移动端添加一个图片验证码功能。分享一下大体实现方式思路。PS demo是自己写的。跟公司代码还是有很大差距的。 一. 图片验证码第一版 1. 建立图片…...