欢迎光临
我们一直在努力

数据库所有连接

文章目录

  • 数据库所有连接
    • 一、先总纲(所有连接层级)
    • 二、准备两张测试表(全程用这俩)
  • 1. 笛卡尔积(最原始、所有连接的祖宗)
      • 规则
      • 语句
      • 结果
  • 2. 等值连接(最常用)
      • 规则
      • 语句
      • 结果
  • 3. 自然连接(Natural Join)【特殊等值连接】
      • 规则
      • 语句
      • 结果
  • 4. 内连接 Inner Join
      • 规则
      • 通俗
  • 5. 外连接(重点必考)
    • (1)左外连接 Left Join
      • 规则
    • (2)右外连接 Right Join
    • (3)全外连接 Full Join
  • 三、一张表彻底区分(软考必背)
  • 四、终极本质总结(你说的完全对)
  • 五、秒杀口诀
  • 例子
    • 1、π 投影 → 操作【列】
    • 2、σ 选择 → 操作【行】
    • 3、JOIN 连接 → 操作【列】
    • 4、UNION 并集 → 操作【行】
  • 极简背诵总结

数据库所有连接

✅ 连接本质:就是按条件 合并两张表的「列」,行做匹配 不是合并行,是横向拼接列,完全正确。

一、先总纲(所有连接层级)

  • 笛卡尔积
  • 等值连接 / 非等值连接
  • 自然连接(特殊等值)
  • 内连接(Inner Join)
  • 外连接
    • 左外连接(Left)
    • 右外连接(Right)
    • 全外连接(Full)
  • 二、准备两张测试表(全程用这俩)

    表A(学生)

    idname
    1 张三
    2 李四

    表B(成绩)

    idscore
    1 90
    3 80

    1. 笛卡尔积(最原始、所有连接的祖宗)

    规则

    不写任何条件,左表每一行 × 右表每一行 纯暴力拼接列

    语句

    select * from A,B;

    结果

    行数爆炸,列直接全部拼在一起 A所有列 + B所有列 👉 本质:无脑拼接列,无匹配

    2. 等值连接(最常用)

    规则

    用 = 做匹配,按字段值相等 拼接列 同名字段会重复保留

    语句

    select * from A join B on A.id = B.id;

    结果

    A.idnameB.idscore
    1 张三 1 90

    👉 特点: 只保留匹配上的行,列全部保留、重复字段不合并

    3. 自然连接(Natural Join)【特殊等值连接】

    规则

  • 自动找同名同类型字段做等值匹配
  • 自动合并重复列(只留一份)
  • 不用写 on
  • 语句

    select * from A natural join B;

    结果

    idnamescore
    1 张三 90

    👉 核心区别: 等值连接:重复列保留 自然连接:重复列合并去重

    4. 内连接 Inner Join

    规则

    和「等值连接」日常几乎画等号 只返回两张表 完全匹配的数据 不匹配的直接扔掉

    通俗

    两边都有的数据,才显示

    5. 外连接(重点必考)

    (1)左外连接 Left Join

    规则

    以左表A为全集 左表所有行全部保留,右表匹配不上补 NULL

    select * from A left join B on A.id=B.id;

    结果:

    idnamescore
    1 张三 90
    2 李四 NULL

    (2)右外连接 Right Join

    以右表B为全集 右表全保留,左表没匹配补NULL

    结果:

    idnamescore
    1 张三 90
    3 NULL 80

    (3)全外连接 Full Join

    左右两表全部数据都保留 哪边没匹配,哪边补NULL MySQL 无原生 full,可 union 实现

    三、一张表彻底区分(软考必背)

    连接类型匹配规则重复列不匹配数据保留
    笛卡尔积 无规则全组合 全部保留 全保留
    等值连接 字段=匹配 保留重复列 不保留
    自然连接 自动同名=匹配 自动合并去重 不保留
    内连接 条件匹配 自己控制 不保留
    左外连接 条件匹配 自己控制 左表全留
    右外连接 条件匹配 自己控制 右表全留

    四、终极本质总结(你说的完全对)

  • 所有 JOIN 本质:横向拼接「列」
  • 行只是筛选条件,最终目的: 把两张表不同字段,合成一张宽表
    • 内连接:取交集
    • 外连接:取全集+补空
    • 自然连接:自动版等值+去重

    五、秒杀口诀

    • 笛卡尔:无脑全拼
    • 等值连接:相等就合,字段重复
    • 自然连接:同名自动合,重复删掉
    • 内连接:匹配才要
    • 左连接:左表全包
    • 右连接:右表全包

    例子

    先建两张测试表,统一用例,全程好懂: 学生表

    S

    (

    s

    i

    d

    ,

     

    s

    n

    a

    m

    e

    ,

     

    a

    g

    e

    )

    S(\\boldsymbol{sid},\\ sname,\\ age)

    S(sid, sname, age) 选课表

    S

    C

    (

    s

    i

    d

    ,

     

    c

    i

    d

    ,

     

    s

    c

    o

    r

    e

    )

    SC(\\boldsymbol{sid},\\ cid,\\ score)

    SC(sid, cid, score)

    1、π 投影 → 操作【列】

    作用:挑选、保留指定字段(列),剔除不要的列 关系代数:

    π

    s

    i

    d

    ,

    s

    n

    a

    m

    e

    (

    S

    )

    \\boldsymbol{\\pi_{sid,sname}(S)}

    πsid,sname(S) SQL:

    SELECT sid, sname FROM S;

    只保留 sid、sname 两列,age 直接删掉 👉 只动列,不动行数量(不删数据行)

    2、σ 选择 → 操作【行】

    作用:按条件筛选数据行,列不变 关系代数:

    σ

    a

    g

    e

    >

    18

    (

    S

    )

    \\boldsymbol{\\sigma_{age>18}(S)}

    σage>18(S) SQL:

    SELECT * FROM S WHERE age > 18;

    整张表列全都保留,只把「年龄大于18」的行挑出来 👉 只筛行,列结构完全不变

    3、JOIN 连接 → 操作【列】

    作用:多表横向拼接字段,合并列 关系代数:

    S

    S

    C

    S \\bowtie SC

    SSC SQL:

    SELECT * FROM S JOIN SC ON S.sid = SC.sid;

    左边学生列 + 右边选课列,合成一张宽表 核心是拼接列,on 只是用来过滤无效行 👉 本质:列合并

    4、UNION 并集 → 操作【行】

    作用:上下合并数据行,列结构不变 SQL:

    SELECT sid FROM S
    UNION
    SELECT sid FROM SC;

    两个查询列数/类型一致,把结果集的行上下堆叠合并 不新增列,只叠加数据行 👉 本质:行合并、行去重

    极简背诵总结

  • π

    \\pi

    π 投影:选列 → select 字段

  • σ

    \\sigma

    σ 选择:选行 → where 条件

  • JOIN 连接:拼列 → 左右加字段
  • UNION:拼行 → 上下叠数据
  • 赞(0)
    未经允许不得转载:171主机测评 » 数据库所有连接
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址