SQL的多表查询

SQL的多表查询


  • 多表查询的概述

    1. 指从多张表中查询数据;
    2. 各个表格之间相互关联,基本分为:一对多(多对一)、多对多、一对一;
  • 语法

    select * from1,表2;
  • 查询分类

    1. 连接查询:
      1. 内连接:相当于查询A、B表的交集部分数据;
      2. 外连接:
        1. 左外连接:查询左表所以数据,以及两张表交集部分数据;
        2. 右外连接:查询右表所以数据,以及两张表交集部分数据;
      3. 自连接:当前表与自身的连接查询,自连接必须使用表别名;
    2. 子查询:
      1. 标量子查询:子查询结果为单个值;
      2. 列子查询:子查询结果为一列;
      3. 行子查询:子查询结果为一行;
      4. 表子查询:子查询结果为多行多列;

多表查询 - 一对多(多对一)


  • 实现

    1. 在多的一方建立外键,指向一的一方的主键;

多表查询 - 多对多


  • 实现

    1. 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键;

多表查询 - 一对一


  • 实现

    1. 在任意一方加入外键,关联另外一方的主键,并设置外键为唯一的(unique);

多表查询 - 消除无效的笛卡尔积


  • 笛卡尔积

    1. 笛卡尔乘积是指在数字中,两个集合 A集合、B集合的所有组合情况;
    2. 在多表查询时,需要消除无效的笛卡尔积;
  • 消除无效的笛卡尔积

    select * from1,表2 where1外键 =2.主键

多表查询 - 连接查询 - 内连接


  • 语法

    1. 隐式内连接:

      select 查询列表 from1,表2 where 条件;
    2. 显示内连接:

      select 字段列表 from1 [inner] join2 on 连接条件;

      (PS:方括号("[]")内的为可选项;)

      (注意:如果已经为表设置别名,则不能直接通过表名限定字段;)

多表查询 - 连接查询 - 外连接


  • 语法

    1. 左外连接:

      select 字段列表 from1 left [outer] join2 on 条件;

      (PS:方括号("[]")内的为可选项;)

    2. 右外连接:

      select 字段列表 from1 right [outer] join2 on 条件;

      (PS:方括号("[]")内的为可选项;)

多表查询 - 连接查询 - 自连接


  • 语法

    select 字段列表 from1 别名1 join1 别名2 on 条件;

多表查询 - 联合查询


  • 语法

    select 字段列表 from1
    union [all]
    select 字段列表 from2;

    (PS:方括号("[]")内的为可选项;)

    (注意:

    union是对查询的结果合并;

    union all是对查询的结果合并后去重复;

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

多表查询 - 子查询


  • 语法

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

    (注意:子查询的外部语句可以是insert、update、delete、select的任何一个)

  • 子查询结果分类

    1. 标量子查询(子查询结果为单个值)
    2. 列子查询(子查询结果为一列)
    3. 行子查询(子查询结果为一行)
    4. 表子查询(子查询结果为多行多列)
  • 子查询位置分类

    1. where之后
    2. from之后
    3. select之后

多表查询 - 子查询 - 标量子查询


  • 概述

    子查询的返回值是单个值(数字、字符串、日期等);

  • 常用的操作符号

    =、<>、>、>=、<、<=

多表查询 - 子查询 - 列子查询


  • 概述

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

  • 常用的操作符号

    操作符 描述
    in 在指定的集合范围之内,多选一
    not in 不在指定的集合范围之内
    any 子查询返回列表中,有任意一个满足即可
    some 与any等同,使用some的地方都可以使用any
    all 子查询返回列表的所以值都必须满足

多表查询 - 子查询 - 行子查询


  • 概述

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

  • 常用操作符

    =、<>、in、not in

多表查询 - 子查询 - 表子查询


  • 概述

    子查询返回的结果为多行多列;

  • 常用操作符

    in

posted on   TeaTracing  阅读(3213)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示