「MySQL」多表查询

多表关系

  1. 一对多(多对一)
    • 实现:在多的一方建立外键,指向一的一方的主键
  2. 多对多
    • 实现:: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
  3. 一对一
    • 实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

多表查询概述

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

内连接

  1. 隐式内连接:SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;
  2. 显式内连接:SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
  3. 一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段

外连接

  1. 左外连接:SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
  2. 右外连接:SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
  3. 左外连接和右外连接是可以相互替换的,只需要在连接查询时 SQL 中调节表结构的先后顺序

自连接

  1. 语法:SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;
  2. 在自连接查询中,必须要为表起别名

联合查询

  1. union all 查询出来的结果,仅仅进行简单的合并,并未去重
  2. union 联合查询,会对查询出来的结果进行去重处理
  3. 字段列表数量和类型要一致
sql 复制代码
SELECT 字段列表 FROM 表A ... 
UNION [ ALL ] 
SELECT 字段列表 FROM 表B ....;

子查询

  1. 语法:SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );

  2. 分类

    1. 根据子查询结果分类
      • 标量子查询(子查询结果为单个值)
      • 列子查询(子查询结果为一列)
      • 行子查询(子查询结果为一行)
      • 表子查询(子查询结果为多行多列)
    2. 根据子查询位置分类
      • where 之后
      • from 之后
      • select 之后
  3. 标量子查询

    • 子查询返回的结果是单个值(数字、字符串、日期等)
    • 常用的操作符:= <> > >= < <=
  4. 列子查询

    • 子查询返回的结果是一列(可以是多行)

    • 常用操作符

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

    • 子查询返回的结果是一行(可以是多列)
    • 常用的操作符:= 、<> 、IN 、NOT IN
  6. 表子查询

    • 子查询返回的结果是多行多列
    • 常用的操作符:IN
相关推荐
Aurora_NeAr33 分钟前
Redis设计与实现——Redis命令参考与高级特性
数据库·redis·缓存
程序猿小谢34 分钟前
Redis特性与应用
数据库·redis·缓存
2401_8368365935 分钟前
mysql集群
mysql·adb
ZHOU_WUYI1 小时前
MySQL 与 FastAPI 交互教程
mysql·fastapi
Code哈哈笑1 小时前
【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
数据库·spring boot·后端·mysql·mybatis·交互
Javatutouhouduan1 小时前
线上问题排查:JVM OOM问题如何排查和解决
java·jvm·数据库·后端·程序员·架构师·oom
Nuraliye1 小时前
IP到国家代码映射之GeoLite2导入到MySQL形成数据字典
mysql·geolite2·geoip_country_blocks·geoip_country_locations·ip到国家代码映射
多多*2 小时前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
淡笑沐白2 小时前
SQL Server 与 Oracle 常用函数对照表
数据库·oracle·sqlserver
PWRJOY2 小时前
Flask-SQLAlchemy_数据库配置
数据库·python·flask