mysql_多表

  1. 多表定义:从2个表或者更多的表中查询需要的数据

  2. 多表连接的关系

  • 内连接:inner join【交集,两边都匹配才出数据】
    • 语句:select * from 表1 inner join 表2 on 表1.关联字段=表2.关联字段
    • 隐藏内连接:select * from 表1,表2 where 表1.关联字段=表2.关联字段
  • 左连接:left join【左表全部,右表匹配不到为null】
    • 语句:select * from 表1 left join 表2 on 表1.关联字段=表2.关联字段
  • 右连接:right join【右表全部,左表匹配不到null】
    • 语句:select * from 表1 right join 表2 on 表1.关联字段=表2.关联字段

    ❗️注意:on 写关联条件;where 写过滤条件。left join 过滤右表数据放 on,不要放 where,否则会变成内连接。

  • 左独有数据:left join【只取左表有,右表没有的数据】
    • 语句:select * from 表1 left join 表2 on 表1.关联字段=表2.关联字段 where 表2.字段 is null
  • 右独有数据:riht join【只取右表有,左表没有的数据】
    • 语句:select * from 表1 right join 表2 on 表1.关联字段=表2.关联字段 where 表1.字段 is null
  • 全外连接【返回左表全部+右表全部】
  • 包含3部分
    • 两表交集|内连接【inner join】
    • 左独有
    • 右独有
  • 内连接+左独有+右独有:
    select * from 表1 inner join 表2 on 表1.关联字段=表2.关联字段 union select * from 表1 left join 表2 on 表1.关联字段=表2.关联字段 where 表2.字段 is null union select * from 表1 left join 表2 on 表1.关联字段=表2.关联字段 where 表1.字段 is null
  • 左连接+右独有:
    select * from 表1 left join 表2 on 表1.关联字段=表2.关联字段 union select * from 表1 right join 表2 on 表1.关联字段=表2.关联字段 where 表1.字段 is null
  • 右连接+左独有
    select * from 表1 right join 表2 on 表1.关联字段=表2.关联字段 union select * from 表1 left join 表2 on 表1.关联字段=表2.关联字段 where 表2.字段 is null

    union:自动去除重复的交集行
    UNION ALL 不去重;右连接部分只拿右独有数据,避免交集重复出现
    ✅ 生产优先用UNION ALL,不需要全局去重,速度快。

  1. 子查询:select 里面嵌套另一个 select,嵌套的 select 叫子查询(内查询),外面叫父查询(外查询)。

    子查询可以出现在:WHERE、FROM、SELECT 后面。

  2. 子查询分类

  • 标量子查询:返回单个值(一行一列),用=【通常放在where及select后】

    子查询只返回 1 个结果,用 =;如果返回多条,会报错。

  • 列子查询:返回一列多行,用in【通常放在where后】

    in:匹配集合中任意一个值。

  • 行子查询:返回一行多字段【通常放在where后】
  • 表子查询【派生表|衍生表】:返回多行多列,把子查询当成一张虚拟表使用,放在from后面

    ⚠️必须写别名,不写报错!
    应用场景:先分组统计,再对外层统计结果过滤。

  • 相关子查询:子查询用到外层表的字段,子查询会循环执行。【exists /not exists】
    • select 1 不需要查真实字段,只判断有没有数据,性能更好。
  1. any | some | all 详解

    运算符 含义
    > any 大于子查询结果里任意一个 → 大于最小值就满足
    >= any 大于等于最小值
    < any 小于任意一个 → 小于最大值
    <= any 小于等于最大值
    = any 等于里面任意一个 → 等价 in
    > all 大于全部,必须大于最大值
    < all 小于全部,必须小于最小值
    != all / <>all 不等于全部,等价 not in
  • in 等价 =any

  • not in 等价!=any或》

  • any:满足集合中任意一个就可以

  • all:全部都要满足

  • some = any,两者完全一样。

posted @ 2026-09-08 15:54  一只鹿吖  阅读(11)  评论(0)    收藏  举报