Mysql多表操作

news/2024/7/8 4:14:51 标签: mysql

文章目录

  • 1. 概述
  • 2. 内连接
  • 3. 外连接
  • 4. 自连接
  • 5. 联合查询-union,union all
  • 6. 子查询

1. 概述

在项目开发中,在进行数据库表结构设计是,会根据业务需求和业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种

  • 一对多(多的一方,外键指向一的主键)
  • 多对多(通过中间表来表示两表之间的关系)
  • 一对一(用于单表拆分,将一张表的基础字段放在一张表中,其它详情字段放在另一张表中,以提高操作效率)

多表查询指从多张表中查询数据(就会出现迪卡尔积现象),在多表查询时需要消除无效的笛卡尔积。多表查询主要的分类如下:

  • 连接查询
    • 内连接:相当于查询A、B交集部分的数据
    • 外连接:
      • 左外连接:查询左表的所有数据,以及两张表交集部分数据
      • 右外连接:查询右表所有数据,以及两张表的交集部分数据
    • 自连接:当前表与自身的连接查询,自连接必须使用表的别名
  • 子查询

2. 内连接

内连接查询的是两张表交集的部分

  • 内连接查询语法
    • 隐式内连接
Select 字段列表 from1,2 Where 条件...;

– 显示内连接

Select 字段列表 From1 [Inner] Join2 On 连接条件....;

3. 外连接

  • 左外连接

查询左表的所有数据,包含表1和表2交集部分的数据

Select 字段列表 From1 Left [outer] Join2 On 条件...;
  • 右外连接

查询右表的所有数据,包含表1和表2交集部分的数据

Select 字段列表 From1 Right [outer] Join2 On 条件...;

4. 自连接

自连接的查询可以是内连接查询,也可以是外连接查询

Select 字段列表 From1 别名A  Join1 别名B On 条件...;

5. 联合查询-union,union all

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

Select 字段列表 From 表A ...
Union[All]
Select 字段列表 From 表B....;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
union all会将全部数据直接合并在一起,union会对合并之后的数据去重

6. 子查询

Sql 语句中嵌套Select语句,称为嵌套查询,又称子查询

Select * from t1 where column1=(select column1 from t2);

子查询外部的语句可以是增删改查的任何语句,内部职能是查询语句

根据子查询结果不同,分为:

  • 标量子查询(子查询结果为单个值)
  • 列子查询(查询结果为一列)
  • 行子查询(子查询结果为一行)
  • 表子查询(子查询结果为多行多列)

根据子查询的位置,分为Where之后、From之后、Select之后

  • 标量子查询

子查询的结果是单个值(数字、字符串、日期等),最简单的形式,这种查询称为标量子查询
常见的操作函数 > < = >= <=

  • 列子查询

子查询结果是一列(可以是多行),这种查询称为列子查询
常见的操作符

操作符描述
IN在指定的集合范围中,多选1
NOT IN不在指定的集合范围之内
ANY子查询返回列表中,有任意一个满足即可
SOME与ANY等同
ALL子查询返回列表的所有值都必须满足
  • 行子查询

子查询返回的结果是一行(可以是多列),这种查询称为行子查询
常见的操作符:= <> IN NOT IN

  • 表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询


http://www.niftyadmin.cn/n/4993846.html

相关文章

YOLOv5算法改进(11)— 替换主干网络之EfficientNetv2

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。EfficientNetV2是一个网络模型&#xff0c;旨在提供更小的模型和更快的训练速度。它是EfficientNetV1的改进版本。EfficientNetV2通过使用更小的模型参数和采用一种称为Progressive Learning的渐进学习策略来实现这一目标。…

Nuxt 菜鸟入门学习笔记五:CSS 样式

文章目录 本地样式表在组件内导入通过 Nuxt 配置 CSS 属性导入使用字体导入通过 NPM 发布的样式表 外部样式表动态添加样式表【高级】使用 Nitro 插件修改渲染的头部 使用预处理器单文件组件 SFC 样式类和样式绑定使用 v-bind 的动态样式Scoped StylesCSS Modules预处理器支持 …

笔记本电脑开机后网线黑屏

笔记本电脑开机后网线黑屏 笔记本电脑是现代社会中不可或缺的一部分&#xff0c;为我们带来了高效、便捷的工作与娱乐。然而&#xff0c;有时候当我们使用笔记本电脑时&#xff0c;可能会遇到开机后网线黑屏的问题。这个问题让我们感到非常困惑&#xff0c;不知道该如何解决问…

vue2中使用vuex全面解析

vue2中使用vuex全面解析 初入前端写的是vue2&#xff0c;近些年一直在做vue3的项目&#xff0c;久未接触过vue2的代码了&#xff0c;今日突然维护了一个v2项目记忆已不似当年&#xff0c;今日对我以往所有接触的vuex使用做个总结。 vue2中使用vuex基础模板 store文件夹下的i…

【SpringBoot】Swagger和knife4j的使用

文章目录 前言1.什么是Swagger和Knife4j2.Swagger和Knife4j怎么用2.1 引入依赖2.2 设置配置类2.3 启动验证 3.完结撒花 前言 springboot笔记集合: springboot笔记合计 没用的废话理论不多说&#xff0c;会用就完了 1.什么是Swagger和Knife4j Swagger是一种开源的API描述语言…

MyBatis中CDATA的作用

一、<![CDATA[]]>简介 在XML文档的解析过程中&#xff0c;首先查找元素的起始符&#xff0c;即字符"<“和字符”&“。字符”<“表示为新元素的开始&#xff0c;字符”&"表示为字符实体的开始。CDATA的作用是保护这些特殊字符&#xff08;例如&a…

ClickHouse进阶(五):副本与分片-1-副本与分片

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

go语言--锁

锁的基础&#xff0c;go的锁是构建在原子操作和信号锁之上的 原子锁 原子包实现协程的对同一个数据的操作&#xff0c;可以实现原子操作&#xff0c;只能用于简单变量的简单操作&#xff0c;可以把多个操作变成一个操作 sema锁 也叫信号量锁/信号锁 核心是一个uint32值&#…