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

  • 表子查询

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

相关推荐
悲伤小伞36 分钟前
9-MySQL_索引
linux·数据库·c++·mysql·centos
java修仙传1 小时前
数据库和缓存的一致性如何保证?
redis·mysql·mybatis
551只玄猫2 小时前
【数据库原理 实验报告5】数据查询的应用(连接)
数据库·sql·mysql·课程设计·实验报告
aisifang002 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
551只玄猫2 小时前
【数据库原理 实验报告2】创建和管理数据表
数据库·sql·mysql·课程设计·实验报告
wuyikeer3 小时前
windows同时安装两个不同版本的Mysql
windows·mysql·adb
xcLeigh4 小时前
告别 Excel 繁琐操作!Metabase让数据可视化触手可及
mysql·docker·信息可视化·excel·数据可视化·metabase·cpolar
编程饭碗4 小时前
【Mysql日期字段】
数据库·mysql
Thomas.Sir4 小时前
精通 MySQL 面试题
数据结构·数据库·mysql
鸽芷咕4 小时前
从语法兼容到语义一致:深度解析金仓如何“无感”承接MySQL复杂业务
数据库·mysql