MySQL基础篇 - 多表查询

devtools/2024/10/19 9:32:19/

01 多表关系

【1】概念:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各表结构之间也存在着各种联系,基本上分为三种:一对多(多对一),多对多(要建立中间表),一对一。

02 多表查询概述

【1】概念:多表查询就是指在多张表中查询数据

【2】如果直接查询有多表关系的表:

         例如:select * from emp , dept; 则查询出来的结果将是两张表的笛卡尔积个数据。

         但其实我们只需要一些数据,则此时我们可以通过外键关系在where里面写上条件即可(消除无效笛卡尔积)

         例如:select * from emp , dept where emp.dept_id = dept.id;

【3】多表查询的分类:

03 内连接

【1】内连接:查询两个表有外键关联的数据,如果子表中某个外键数据没有与父表主键关联的值则不会被查出来。

【2】分类:

   ① 隐式内连接:select 字段列表 from 表1 as 别名,表2 as 别名 where 外键关系;

   ② 显示内连接:select 字段列表 from 表1 as 别名 inner join 表2 as 别名 on 外键关系;

【说明】:在多表查询时,我们通常会给表取别名,注意:一旦我们给表取别名后不能再直接使用表名了。

04 外连接

【1】左外连接:查询表1的数据,以及表1和表2交集部分的数据。

【2】右外连接:查询表2的数据,以及表1和表2交集部分的数据。

【3】分类:外连接:如果子表中某个外键数据没有与父表主键关联的值也会被查出来。

   ① 左外连接:select 字段列表 form 表1 as 别名 left outer join 表2 as 别名 on 外键关系;

   ② 右外连接:select 字段列表 form 表1 as 别名 right outer join 表2 as 别名 on 外键关系;

【4】说明:下图案例中很好的说明了:

         内连接:如果子表中某个外键数据没有与父表主键关联的值则不会被查出来。

         外连接:如果子表中某个外键数据没有与父表主键关联的值也会被查出来。

05 自连接

【1】场景:表中的外键关联的是自己所在表的某个字段,例如:查询某个员工的领导,而领导也是员工。

【2】语法:其实就是利用取别名,把一张表看成两张表,可以内查询也可以外查询。

    ① 内连接(隐式写法):select 字段列表 form 表一 别名,表一 别名 where 外键关系;

    ② 外连接(左外连接):select 字段列表 from 表一 别名 left outer join 表一 别名 on 外键关系;

06 联合查询

【1】概念:union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

【2】注意:

   ① 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

       (比如查多张成绩单上满足某条件的数据,然后把它合并起来形成一张表)

   ② union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。

【3】语法:

         select 字段列表 from 表a ...

         union all/union

         select 字段列表 from 表b ...

07 子查询

【1】概念:SQL语句中嵌套select语句,称为嵌套查询,即子查询。

【2】子查询外部的语句可以是insert/update/delete/select的任何一个,select会用得多一些。

【3】举例:select * from t1 where column1 = (select column1 from t2)

【4】分类:根据子查询的结果分为:

   ① 标量子查询(子查询结果为单个值)

   ② 列子查询(子查询结果为一列)

   ③ 行子查询(子查询结果为一行)

   ④ 表子查询(子查询结果为多行多列)

【5】根据子查询位置,分为:where之后,form之后,select之后。

07_01 标量子查询

【1】标量子查询:子查询返回的查询结果是单个值(数字,字符串,日期等)

【2】标量子查询中常用的操作符:=,<>,>,>=,<,<=

07_02 列子查询

【1】列子查询:子查询的结果是一列(可以是多行)

【2】列子查询中常用的操作符:in,not in,any,some,all

【3】in是只要满足其中的一种,any是只要=,<>,>,>=,<,<= 其中一种

07_03 行子查询

【1】行子查询:返回的结果是一行(可以是多列)

【2】行子查询中常用的操作符:=,<>,in,not in

【3】注意:a = 12 && b = 13 可以写成 (a, b)= (12, 13),因此下图示例中的写法才是那样。

07_04 表子查询

【1】表子查询:返回的结果是多行多列的。

【2】表子查询常用的操作符:in


http://www.ppmy.cn/devtools/120493.html

相关文章

【深度学习】—线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降

【深度学习】— 线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降 线性回归线性回归的基本元素 线性模型损失函数解析解随机梯度下降小批量随机梯度下降梯度下降算法的详细步骤解释公式 线性回归 回归&#xff08;regression&#xff09;是能为⼀个或多个⾃…

Android-Handle消息传递和线程通信

本文为作者学习笔记&#xff0c;如有误&#xff0c;请各位大佬指点 目录 一、同步异步 二、Java多线程通信 三、Handler是什么 四、Handler相关的类 五、Handler常用方法 1. 发送消息 2. 接收处理消息 3. 切换线程 六、使用Handler 使用Handler更新UI 使用Handler延…

JavaScript for循环语句

for循环 循环语句用于重复执行某个操作&#xff0c;for语句就是循环命令&#xff0c;可以指定循环的起点、终点和终止条件。它的格式如下 for(初始化表达式;条件;迭代因子){语句} for语句后面的括号里面&#xff0c;有三个表达式 初始化表达式(initialize):确定循环变量的初始…

java 解析excel (本地资源)

在Java中解析Excel文件&#xff0c;可以使用Apache POI库。以下是一个简单的例子&#xff0c;展示如何使用Apache POI读取一个Excel文件&#xff08;假设为.xlsx格式&#xff09;的内容。 首先&#xff0c;确保你的项目中包含了Apache POI的依赖。如果你使用Maven&#xff0c;…

机器学习(6):机器学习项目步骤(三)——选择算法并建立模型

1. 选择算法 a. 数据集里的某些特征和标签之间&#xff0c;存在着近似线性的关系. b. 这个数据集的标签是连续变量 因此选择回归分析算法 c. 我们在上一讲的可视化过程中&#xff0c;推测特征和标签可能存在线性关系 因此选择线性回归算法 2. 选择算法工具包 我们一般选算法包的…

龙芯1B开发板自检程序

本代码为当时&#xff0c;参加嵌入式系统开发与应用赛项&#xff0c;训练时编写的自检程序&#xff0c;用于将程序烧录后&#xff0c;逐个演示板载模块功能是否正常&#xff0c;快速定位问题。这代码编写的时间为2023年&#xff0c;好像原代码是参考2023年官方案例来编写的。目…

python 实现rayleigh quotient瑞利商算法

rayleigh quotient瑞利商算法介绍 瑞利商&#xff08;Rayleigh Quotient&#xff09;算法在多个领域&#xff0c;如线性代数、计算机视觉和机器学习等&#xff0c;都有重要的应用。瑞利商定义为函数 R ( A , x ) ( x H A x ) / ( x H x ) R(A, x) (x^H Ax) / (x^H x) R(A,x)…

ESP32简介

文章目录 ESP32简介一、ESP32的核心特性**1. ** **CPU处理能力****2. ** **全面的无线通信支持****3. ** **丰富的外设接口****4. ** **低功耗设计****5. ** **易于开发与部署** 二、ESP32的应用场景 ESP32简介 在物联网&#xff08;IoT&#xff09;日益蓬勃发展的今天&#x…