OldWang带你了解MySQL(七)

news2024/9/20 18:34:04

文章目录

    • 🔥多表查询
    • 🔥SQL92标准中的查询
    • 🔥非等值连接
    • 🔥自连接
    • 🔥SQL99标准中的查询
    • 🔥SQL99中的自然连接(NATURAL JOIN)
    • 🔥SQL99中的内连接(INNER JOIN)
    • 🔥外连接查询(OUTER JOIN)
    • 🔥全外连接(FULL OUTER JOIN)

🔥多表查询

多表查询简介
在这里插入图片描述

笛卡尔乘积
在这里插入图片描述

笛卡尔乘积 :
当一个连接条件无效或被遗漏时,其结果是一个笛卡尔乘积 (Cartesian product),其中所有行的组合都被显示。第一个表中的所有行连接到第二个表中的所有行。一个笛卡尔乘积会产生大量的行,其结果没有什么用。你应该在 WHERE 子句中始终包含一个有效的连接条件,除非你有特殊的需求,需要从所有表中组合所有的行。

在这里插入图片描述

多表查询分类
⭐ sql92标准:内连接(等值连接 、非等值连接、 自连接)。
⭐ sql99标准:内连接、外连接(左外、右外、全外(MySQL不支持全外连接))、交叉连接。

🔥SQL92标准中的查询

等值连接
在这里插入图片描述

等值连接
为了确定一个雇员的部门名,需要比较EMPLOYEES 表中的 DEPARTMENT_ID 列与DEPARTMENTS 表中的 DEPARTMENT_ID 列的值。在 EMPLOYEES 和DEPARTMENTS 表之间的关系是一个相等 (equijoin)关系,即,两 个 表中DEPARTMENT_ID 列的值必须相等。

等值连接特点:
1.多表等值连接的结果为多表的交集部分;
2. n表连接,至少需要n-1个连接条件;
3. 多表不分主次,没有顺序要求;
4. 一般为表起别名,提高阅读性和性能;
5. 可以搭配排序、分组、筛选….等子句使用;

注意:
等值连接也被称为简单连接 (simple joins) 或内连接 (inner joins)。

等值连接的使用
在这里插入图片描述

⭐ SELECT 子句指定要返回的列名:
− employee last name、employee number 和 department number,这些是 EMPLOYEES 表中的列
− department number、department name 和 location ID,这些是 DEPARTMENTS 表中的列

⭐ FROM 子句指定数据库必须访问的两个表:
− EMPLOYEES 表
− DEPARTMENTS 表

⭐ WHERE 子句指定表怎样被连接:
EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID,因为DEPARTMENT_ID 列是两个表的同名列,它必须用表名做前缀以避免混淆。

增加搜索条件
在这里插入图片描述

添加查询条件

除连接之外,可能还要求用 WHERE 子句在连接中限制一个或多个表中的行。

限制不能缺的列
在这里插入图片描述

限制不明确的列名

⭐ 需要在 WHERE 子句中用表的名字限制列的名字以避免含糊不清。没有表前缀,DEPARTMENT_ID列可能来自 DEPARTMENTS 表,也可能来自 EMPLOYEES 表,这种情况下需要添加表前缀来执行查询。

⭐ 如果列名在两个表之间不相同,就不需要限定列。但是,使用表前缀可以改善性能,因为MySQL服务器可以根据表前缀找到对应的列。

⭐ 必须限定不明确的列名也适用于在其它子句中可能引起混淆的那些列,例如 SELECT子句或 ORDER BY 子句。

使用表别名
在这里插入图片描述

表别名定义原则
⭐ 表别名不易过长,短一些更好。
⭐ 表别名应该是有意义的。
⭐ 表别名只对当前的 SELECT 语句有效。

多表连接
在这里插入图片描述

🔥非等值连接

一个非等值连接是一种不同于等值操作的连接条件。 EMPLOYEES 表 和JOB_GRADES A 表之间的关系有一个非等值连接例子。在两个表之间的关系是EMPLOYEES 表中的 SALARY 列必须是 JOB_GRADES 表的LOWEST_SALARY 和HIGHEST_SALARY 列之间的值。使用不同于等于 (=) 的操作符获得关系。
在这里插入图片描述

🔥自连接

在这里插入图片描述

自连接
连接一个表到它自己。有时需要连接一个表到它自己。为了找到每个雇员的经理的名字,则需要连接 EMPLOYEES 表到它自己,或执行一个自连接。
在这里插入图片描述

图片中的例子连接 EMPLOYEES 表到它自己。为了在 FROM 子句中模拟两个表,对于相同的表 EMPLOYEES,用两个别名,分别为 worker 和 manager。在该例中,WHERE 子句包含的连接意味着 “一个工人的经理号匹配该经理的雇员号”。

🔥SQL99标准中的查询

MySQL5.7 支持部分的SQL99 标准。

SQL99中的交叉连接(CROSS JOIN)
在这里插入图片描述

示例:

使用交叉连接查询 employees 表与 departments 表。

select * from employees cross join departments;

🔥SQL99中的自然连接(NATURAL JOIN)

在这里插入图片描述

自然连接
连接只能发生在两个表中有相同名字和数据类型的列上。如果列有相同的名字,但数据类型不同,NATURAL JOIN 语法会引起错误。

自然连接查询
在这里插入图片描述

在图片例子中,LOCATIONS 表被用LOCATION_ID 列连接到 DEPARTMENT表,这是在两个表中唯一名字相同的列。如果存在其它的同名同类型的列,自然连接会使用等值连接的方式连接他们,连接条件的关系为and。

自然连接也可以被写为等值连接:

 SELECT d.department_id,d.department_name,
 d.location_id , l.city
FROM
 departments d , locations l
 WHERE
 d.location_id = l.location_id;

示例:

使用自然连接查询所有有部门的雇员的名字以及部门名称。

select e.last_name,d.department_name 
from employees e natural join departmentsd;

🔥SQL99中的内连接(INNER JOIN)

在这里插入图片描述

语法:

⭐ SELECT 查询列表;
⭐ FROM 表1 别名;
⭐ INNER JOIN 连接表(INNER关键字可省略);
⭐ ON 连接条件;

用ON子句指定连接条件
在这里插入图片描述
用ON子句指定更多的连接条件
在这里插入图片描述

🔥外连接查询(OUTER JOIN)

在这里插入图片描述

孤儿数据(Orphan Data)

孤儿数据是指被连接的列的值为空的数据。

左外连接(LEFT OUTER JOIN)
在这里插入图片描述
在这里插入图片描述

左外连接

左边的表 (EMPLOYEES) 中即使没有与DEPARTMENTS 表中匹配的行,该查询也会取回 EMPLOYEES 表中所有的行。

右外连接
在这里插入图片描述
在这里插入图片描述
右外连接

右边的表 (DEPARTMENTS ) 中即使没有与 EMPLOYEES 表中匹配的行,该查询也会取回 DEPARTMENTS 表中所有的行。

🔥全外连接(FULL OUTER JOIN)

在这里插入图片描述

注意: MySQL 中不支持 FULL OUTER JOIN 连接
可以使用 union 实现全完连接。
⭐ UNION: 可以将两个查询结果集合并,返回的行都是唯一的,如同对整个结果集合使用了DISTINCT。
⭐ UNION ALL: 只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据, 那么返回的结果集就会包含重复的数据了。

语法结构

(SELECT 投影列 FROM 表名 LEFT OUTER JOIN 表名 ON 连接条件)
UNION
(SELECT 投影列 FROM 表名 RIGHT OUTER JOIN 表名 ON 连接条件)

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

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

相关文章

行业那么多,为什么计算机领域这么火?

行业那么多,为什么计算机领域这么火?计算机领域火已经不是一天两天了,从开始的进入互联网时代、到“互联网”、再到大数据、人工智能时代、数字化经济……计算机技术从行业内部的自我发展逐渐渗透到各行各业,甚至成为社会整体经济…

NLP深度网络中self.embedding(x)词嵌入后降维方法

在自然语言处理中的循环神经网络中,经常使用torch定义类,self.embedding(x)中,x是输入,介绍self.embedding(x)返回结果,以及结果的形状,并解释这个形状 在自然语言处理中的循环神经网…

P4158 [SCOI2009]粉刷匠(分组背包问题+前缀和优化)

[TOC](P4158 [SCOI2009]粉刷匠(分组背包问题)) 一、问题 [SCOI2009]粉刷匠 题目描述 windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 …

Spring Cloud Gateway: 网关

文章目录 网关Hello world路由: Route谓词: Predicate过滤器: FilterGateway实现限流: RequestRateLimiter过滤器使用Gateway实现服务降级 自定义全局过滤器GateWay中执行流程 网关 API网关就是实现了前端项目和服务端项目之间的统一入口 Nginx实现的是用户和前端项目之间调用…

【Linux】环境变量相关笔记

文章目录 echo $PATHexport和环境变量相关的命令main(int argc,char* argv[],char *env[])三个参数介绍getenv()通过系统调用获取su与su - 的区别:exportsource 和 .优先级 echo $PATH 是用来查环境变量的 export 从下面的图片当中可以看到,的确是将文…

ubuntu 20.04设置开机自启动脚本

1 建立开机启动服务 在 路径下 /lib/systemd/system/rc-local.service 的 rc-local.service 的脚本,内容规定了 rc.local 的启动顺序和行为 这行代码规定了这个service在开机启动时所执行的命令是:/etc/rc.local start。即运行 /etc/rc.local 脚本。不过…

《面试1v1》HashMap

没有人比中国人更懂 HashMap 我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官:HashMap 是Java程序员用得最频繁的集合之一,可以给我简单介绍一下它的内部实现机制吗? 候选人: Hash…

C++ -3- 类和对象 (中) | 拷贝构造函数 赋值运算符重载

文章目录 4.拷贝构造函数什么是拷贝构造函数?应用——示例:日期计算器什么情况下需要自己实现拷贝构造函数? 5.赋值运算符重载运算符重载(重要)赋值运算符重载 拷贝构造函数和赋值重载函数 4.拷贝构造函数 什么是拷贝…

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16格式位深度的图像保存(C++)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16位深度的图像保存(C) Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1:引用合适的类文件2:BGAPI SDK在图像回调中联合OpenCV保…

Effective C++条款条款42:了解typename的双重意义(Understand the two meanings of typename)

Effective C条款条款42:了解typename的双重意义(Understand the two meanings of typename) 条款42:了解typename的双重意义1、从属名称和非从属名称2、typename在traits机制中的运用3、牢记 总结 《Effective C》是一本轻薄短小的…

1.17 从0开始学习Unity游戏开发--场景切换

前面的所有文章我们都在一个固定的游戏场景内进行开发,在最开始介绍场景这个概念的时候就已经提及,这个场景可以是一张地图,或者是一个对战房间等等,所以显然这个场景可以有多个,并且可以从一个场景切换到另外一个场景…

Collection接口

文章目录 1. Java集合框架概述2. Collection接口中15个方法的使用3. Iterator(迭代器)接口4. Connection子接口一:List4.1 List的实现类4.2 源码分析4.2.1 ArrayList源码分析4.2.2 LinkedList源码分析4.2.3 Vector源码分析 4.3 List接口中的常用方法 5. Collection子…

死锁---银行家算法例题

1、知识点 1.银行家算法使用的四个必要的数据结构是: 可用资源向量Available,最大需求矩阵Max,分配矩阵Allocation,需求矩阵Need。 2.银行家算法是不是破坏了产生死锁的必要条件来达到避免死锁的目的?若是,请简述破…

【数字 IC / FPGA】 有关建立/保持时间计算的思考

引言 最近准备一些数字IC的机试,刷到了一些有关静态时序分析的题目。有一些比较经典的题目,在这里整理分享一下。 有什么疑问可以在评论区交流~互相进步 双D触发器典型电路 假设时钟周期为Tcycle,Tsetup,Thold分别为触发器建立保持时间,为…

Mac OS挂载ext4硬盘

一、安装macFUSE Home - macFUSE 如下载macfuse-4.4.3dmg安装 安装过程可能会遇到“若要要启用系统扩展,您需要在恢复环境中修改安全性设置”的提示,如下图: 解决: 关机,直到键盘灯全灭了! 再按住开机键&#xff0c…

机器视觉技术分享-彩色图像处理 含c++ ,python代码说明

彩色图像处理是指对彩色图像进行数字处理和分析的过程,其目的是提取图像的有用信息,改善图像质量,实现图像的增强、复原、分割、匹配、识别等功能。 针对彩色图像处理,可以采用以下一些常见的方法: 1. 颜色空间转换&…

简简单单认识一下Inscode

CSDN最新推出的Inscode服务是一个在线编程工具,旨在为开发者提供一个便捷的编写、运行和分享代码的环境,让开发者无需在本地搭建编程环境,即可快速编写和运行代码。 Inscode支持多种编程语言,包括Java、Python、C等,同…

C语言进阶之回调函数详解分析方法

一、函数指针 在讲回调函数之前,我们需要了解函数指针。 我们都知道,C语言的灵魂是指针,我们经常使用整型指针,字符串指针,结构体指针等。 int *p1; char *p2; STRUCT *p3; // STRUCT为我们定义的结构体 但是好像我…

PlumGPT【告别梯子,拥抱AI】

相信很多人苦于没有openai账号或者有着种种原因至今还没有使用过chatgpt,今天向大家推荐一个网站,在国内也可以任意方便使用,让你的办公效率最大化。 那就是PlumGPT:https://plumgpt.com/ PlumGPT(国内版的chatgpt&a…

Mybatis分页实现

1. Rowbounds Rowbounds将所有符合条件的数据加载到内存&#xff0c;然后再实现逻辑切割。 Override public List<User> getAllUser() {RowBounds rowBounds new RowBounds(1, 2);return userMapper.getAllUser(rowBounds); }查询sql&#xff08;没有任何分页逻辑&…