Mysql多表操作

文章目录

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

1. 概述

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

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

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

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

2. 内连接

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

  • 内连接查询语法
    • 隐式内连接
sql 复制代码
Select 字段列表 from 表1,表2 Where 条件...;

-- 显示内连接

sql 复制代码
Select 字段列表 From 表1 [Inner] Join 表2 On 连接条件....;

3. 外连接

  • 左外连接

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

sql 复制代码
Select 字段列表 From 表1 Left [outer] Join 表2 On 条件...;
  • 右外连接

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

sql 复制代码
Select 字段列表 From 表1 Right [outer] Join 表2 On 条件...;

4. 自连接

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

sql 复制代码
Select 字段列表 From 表1 别名A  Join 表1 别名B On 条件...;

5. 联合查询-union,union all

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

sql 复制代码
Select 字段列表 From 表A ...
Union[All]
Select 字段列表 From 表B....;

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

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

6. 子查询

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

sql 复制代码
Select * from t1 where column1=(select column1 from t2);

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

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

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

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

  • 标量子查询

子查询的结果是单个值(数字、字符串、日期等),最简单的形式,这种查询称为标量子查询

常见的操作函数 > < = >= <=

  • 列子查询

子查询结果是一列(可以是多行),这种查询称为列子查询

常见的操作符

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

子查询返回的结果是一行(可以是多列),这种查询称为行子查询

常见的操作符:= <> IN NOT IN

  • 表子查询

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

相关推荐
a_blue_ice1 小时前
JAVA 面试 MySQL
java·mysql·面试
Java水解4 小时前
【MySQL】数据库基础
后端·mysql
沃夫上校4 小时前
MySQL 中文拼音排序问题
java·mysql
要一起看日出4 小时前
MVCC-多版本并发控制
数据库·mysql·mvcc
Hx__4 小时前
MySQL InnoDB 的 MVCC 机制
数据库·mysql
chat2tomorrow6 小时前
数据采集平台的起源与演进:从ETL到数据复制
大数据·数据库·数据仓库·mysql·低代码·postgresql·etl
依稀i1236 小时前
Spring Boot + MySQL 创建超级管理员
spring boot·mysql
驾驭人生6 小时前
Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL
数据库·mysql·.netcore
xhbh6667 小时前
不止是DELETE:MySQL多表关联删除的JOIN语法实战详解
数据库·mysql·程序员·mysql删除语句
知其然亦知其所以然7 小时前
面试官微笑发问:第100万页怎么查?我差点当场沉默…
后端·mysql·面试