Mysql之多表查询上篇

Mysql之多表查询上篇

  • 多表查询
    • 什么是多表查询
    • 笛卡尔积(交叉连接)
      • 产生笛卡尔积的条件
      • 避免笛卡尔积的方法
  • 多表查询的分类
    • 1.等值连接 VS 非等值连接
      • 等值连接
      • 非等值连接
      • 扩展1表的别名
      • 扩展2:连接多个表
    • 2.自连接与非自连接
        • 扩展3:SQL语法标准
      • 内连接
        • SQL92语法实现内连接
        • SQL99语法实现内连接
      • 外连接
        • 左外连接
        • 右外连接
        • 满外连接

多表查询

什么是多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。

前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联

笛卡尔积(交叉连接)

在学习MySQL的表连接时,笛卡尔积是必须知道的一个概念。
在没有任何限制条件的情况下,两表连接必然会形成笛卡尔积。

如果表1有m行a列,表2有n行b列,两表无条件连接时会将两表里所有行两两组合到一起,所形成的表就有m*n行,a+b列。
如果表1或表2的记录数很多时,连接后会形成一张非常大的表,在这种大表里查询效率特别低,所以在数据库查询时,应尽量避免笛卡尔积的出现

产生笛卡尔积的条件

  1. 省略多个表的连接条件(或关联条件)
    2.连接条件(或关联条件)无效
    3.所有表中的所有行互相连接

避免笛卡尔积的方法

用where,添加连接条件

注意:
如果表中有相同的列,那么要在这列前面加上表的前缀在这里插入图片描述

多表查询的分类

1.等值连接 VS 非等值连接

等值连接

在这里插入图片描述

如果所示,这种的就是等值连接,表中有相同的列,并且列的值都对应相等

非等值连接

在这里插入图片描述

如图所示,这就是非等值连接的例子

扩展1表的别名

用表的别名

  1. 使用别名可以简化查询。
    2.列名前使用表名前缀可以提高查询效率

需要注意的是,如果我们使用了表的别名,在查询字段中、过滤条件中就只能使用别名进行代替, 不能使用原有的表名,否则就会报错

扩展2:连接多个表

连接 n个表,至少需要n-1个连接条件。
比如,连接三个表,至少需要两个连接条件

2.自连接与非自连接

扩展3:SQL语法标准

SQL的语法标准,主要的就是SQL92语法和SQL99语法
92语法就是1992年颁布的,99语法就是1999年颁布的
99语法比92语法更多,完善了一些92语法

在这里插入图片描述

内连接

内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

SQL92语法实现内连接
#SQL 92语法 实现内连接
SELECT employee_id, department_name
FROM employees e, departments d 
WHERE e.employee_id = d.department_id

在这里插入图片描述

SQL99语法实现内连接

99语法中,去掉了92语法的 ,
改成以JOIN ON的形式,来实现内连接

#SQL99语法实现内连接
SELECT employee_id, department_name, city
FROM employees e JOIN departments d
ON e.employee_id = d.department_id
JOIN locations l 
ON d.department_id = l.location_id;

实际上这里内连接,是省略了INNER, 这里默认是INNER,你也可以加上

#SQL99语法实现内连接
SELECT employee_id, department_name, city
FROM employees e INNER JOIN departments d
ON e.employee_id = d.department_id
JOIN locations l 
ON d.department_id = l.location_id;

外连接

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时

结果表中相应的列为空(NULL)。 如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。
如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表

注意:SQL92语法不支持实现外连接
所以我们采用SQL99语法来实现外连接
其实在JOIN前面,加一个OUTER,关键字便可以实现外连接

左外连接
SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

当然这里JOIN前面的OUTER, 可以省略
直接就LEFT JOIN

SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT JOIN departments d
ON (e.department_id = d.department_id) ;
右外连接
SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

当然这里JOIN前面的OUTER, 可以省略
直接就LEFT JOIN

SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON (e.department_id = d.department_id) ;
满外连接

满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据

SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。
需要注意的是,MySQL不支持FULL JOIN

具体怎么实现,多表查询下篇将为大家介绍

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

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

相关文章

03 贝尔曼公式

贝尔曼公式 前言1、Motivating examples2、state value3、Bellman equation:Derivation4、Bellman equation:Matrix-vector form4、Bellman equation:Solve the state value5、Action value 前言 本文来自西湖大学赵世钰老师的B站视频。本节课主要介绍贝尔曼公式。 本节课概要…

Jmeter之JSR223

一、JSR223组件 JSR是Java Specification Requests的缩写,意思是Java规范提案。JSR已成为Java界的一个重要标准. JSR223其实包含了有好几种组件,但是其用法都是一致的,并且都是执行一段代码,主要分类如下: JSR223 PreProcessor JSR223 Timer JSR223 S…

LeetCode热题100——链表

链表 1. 相交链表2. 反转链表3. 回文链表4. 环形链表5. 合并两个有序链表 1. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 // 题解:使用A/B循环遍…

mysql驱动包引起的告警问题using SSL the verifyServerCertificate property is set to ‘false‘

tomcat启动时报以下ssl的连接错误,mysql版本为5.7.17,虽然系统可以使用,但是日志量太大,还是处理下,只需要修改mysql的连接格式: url.db “jdbc:mysql://localhost:3306/disis3?userroot&passwordXXXX…

gitee.com[0: xxx.xx.xxx.xx]: errno=Unknown error

git在提交或拉取代码的时候,遇到以下报错信息: Unable to connect to gitee.com[0: xxx.xx.xxx.xx]: errnoUnknown error 解决问题步骤: 1、找到自己的电脑上的git用户配置文件 文件位置位于:C:\Users\用户名\.gitconfig 比如我…

最新ChatGPT商业运营系统源码+支持GPT4/支持ai绘画+支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

WebSocket Day03 : SpringMVC整合WebSocket

前言 在现代Web应用程序中,实时性和即时通信变得越来越重要。传统的HTTP请求-响应模式无法满足实时数据传输和双向通信的需求。随着技术的发展,WebSocket成为了一种强大而灵活的解决方案。 WebSocket是HTML5提供的一种新的通信协议,它通过一…

JavaEE的渊源

JavaEE的渊源 1. JavaEE的起源2. JavaEE与Spring的诞生3. JavaEE发展历程(2003-2007)4. JavaEE发展历程(2009-至今)5. Java的Spec数目与网络结构 1. JavaEE的起源 我们首先来讲一下JavaEE的起源 ,为什么要来讲起源 ? …

CORS 跨域访问, 实现跨域的原理, CORS漏洞利用

CORS跨域, 实现跨域的原理, CORS漏洞利用 一, CORS跨域的原理 1. 跨域实验 202服务器: <?php $person array("name" > "John Doe","age" > 30,"occupation" > "Developer" );$jsonString json_encode($p…

Unit1_3:分治算法之排序问题

文章目录 一、归并排序二、快速排序思路伪代码流程图时间复杂度改进 三、堆排序结构插入提取最小值排序抽象 四、比较排序总结决策树模型 一、归并排序 归并排序子操作的思路和Unit1_2逆序计算一样 下面写一下伪代码 if left < right thencenter←L(left right)/2];Merge…

使用 Clipdrop 替换长安三万里电影海报中的天空

长安三万里是一部不久前上映的古装动画电影&#xff0c;讲述了李白和高适的故事。电影海报中的天空是一片晴朗的月空&#xff0c;与扬州城的景色相得益彰。 最近&#xff0c;我发现了一款名为 Clipdrop 的软件&#xff0c;可以用来替换图片中的天空。这款软件使用人工智能技术&…

MyBatis缓存详解

1. MyBatis缓存 MyBatis中的缓存是用来提高性能&#xff0c;减少数据库交互次数的机制。它分为一级缓存&#xff08;Local Cache&#xff09;和二级缓存&#xff08;Global Cache&#xff09;。 1.1 一级缓存&#xff08;Local Cache&#xff09; 作用范围&#xff1a;一级缓…

SpringBoot与ES7实现多条件搜索

SpringBoot与ES7实现多条件搜索 利用Kibana内置的航班数据&#xff0c;查询从威尼斯到中国按票价升序排列的前10条航班数据。 第一步&#xff0c;新建SpringBoot功能&#xff0c;pom.xml引入四个依赖。 <dependency><groupId>org.elasticsearch.client</groupI…

深入了解汽车级功率MOSFET NVMFS2D3P04M8LT1G P沟道数据表

汽车级功率MOSFET是一种专门用于汽车电子领域的功率MOSFET。它具有高电压、高电流、高温、高可靠性等特点&#xff0c;能够满足汽车电子领域对功率器件的严格要求。汽车级功率MOSFET广泛应用于汽车电机驱动、泵电机控制、车身控制等方面&#xff0c;能够提高汽车电子系统的效率…

Flume从入门到精通一站式学习笔记

文章目录 什么是FlumeFlume的特性Flume高级应用场景Flume的三大核心组件Source&#xff1a;数据源channelsink Flume安装部署Flume的使用案例&#xff1a;采集文件内容上传至HDFS案例&#xff1a;采集网站日志上传至HDFS 各种自定义组件例如&#xff1a;自定义source例如&#…

使用 uni-app 开发项目,日期和时间如何格式化?

功能需求描述 在开发项目时&#xff0c;往往需要对从后端查询到的时间进行格式化&#xff0c;查到的时间格式一般都是时间戳&#xff0c;一堆数字&#xff0c;这时候怎么转化成类似于 2023年8月15日 08:12:10 这样的格式&#xff1f; 在组件显示格式化后的日期 其实 uni-app…

【RtpSeqNumOnlyRefFinder】webrtc m98: ManageFrameInternal 的帧决策过程分析

Jitterbuffer(FrameBuffer)需要组帧以后GOP内的参考关系 JeffreyLau 大神分析 了组帧原理而参考关系(RtpFrameReferenceFinder)的生成伴随了帧决策 FrameDecisionFrameDecision 影响力 帧的缓存。调用 OnAssembledFrame 传递已经拿到的RtpFrameObject 那么,RtpFrameObject…

安全性在外卖系统开发中的重要性

外卖系统的开发需要强调安全性&#xff0c;因为系统中涉及用户的个人信息、支付信息以及交易数据。确保这些信息的安全对于用户信任和系统的成功至关重要。以下是在外卖系统开发中提升安全性的一些建议。 数据加密 用户信息和支付数据应该经过加密处理。对于敏感信息&#x…

计算机的主存储器与辅助存储器

文章目录 前言一、主存储器&#xff08;内存&#xff09;1.主存储器特征2.主存储器构成3.主存储器和CPU如何交互4.主存储器和操作系统位数的关系 二、辅助存储器&#xff08;磁盘&#xff09;1.辅助存储器构成2.辅助存储器特征3.磁盘的调度算法3.1先来先服务算法3.2最短寻道时间…