MySQL的多表操作(子查询、表连接)

学习笔记输出来源:拉勾教育Java就业急训营

修改时间:2021年1月18日
作者:pp_x
邮箱:[email protected]

多表

  • 因为单表会出现数据冗余索引出现了多表

外键约束

什么是外键

  • 外键指的是在 从表 中 与 主表 的主键对应的那个字段
  • 使用外键约束可以让两张表之间产生一个对应关系,从而保证主从表的引用的完整性

创建外键约束

  • 新建表时添加外键
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
  • 已有表后添加外键(DDL语句)
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);

删除外键约束

alter table 从表 drop foreign key 外键约束名称

注意事项

  • 从表外键类型必须与主表主键类型一致,否则创建失败
  • 添加数据时,应该先添加主表中的数据
  • 删除数据时,应该先删除从表中的数据

级联操作删除

  • 如果想实现删除主表数据的同时,也删除掉从表数据,可以使用级联删除操作
级联删除 
ON DELETE CASCADE

多表查询

  • DQL:查询多张表,获取到需要的数据

多表查询的分类

内连接

  • 特点:通过指定的条件匹配两张表中的name 匹配不上就不显示
    • 隐式内连接
      语法格式:select 字段名 from 左表,右表 where 连接条件
    • 显示内连接
      语法格式:select 字段名 from 左表 [inner]join 右表 on 连接条件

左外连接

  • 特点:以左表为基准 匹配右表中的数据 如果能匹配上就显示,匹配不上就左表正常显示 右表数据显示null
    语法格式: 关键字 left [outer] join select 字段名 from 左表 left join 右表 on 条件

右外连接

  • 特点:以右表为基准 匹配左表中的数据 如果能匹配上就显示, 匹配不上就右表正常显示 左表数据显示null
    语法格式:关键字 left [outer] join select 字段名 from 左表 right join 右表 on 条件

子查询

  • 概念:一条select 查询语句的结果, 作为另一条 select 语句的一部分
  • 特点:
    • 子查询必须放在小括号中
    • 子查询一般作为父查询的查询条件使用
  • 分类:
    • where型子查询:将子查询的结果, 作为父查询的比较条件
    • from型子查询: 将子查询的结果, 作为 一张表,提供给父层查询使用
    • exists型 子查询:子查询的结果是单列多行, 类似一个数组, 父层查询使用 IN 函数 ,包含子查询的结果

子查询作为查询条件

SELECT 查询字段 FROMWHERE 字段=(子查询);

子查询作为一张表

SELECT 查询字段 FROM (子查询)表别名 WHERE 条件;

注意:子查询作为一张表的时候需要取别名,否则无法访问子查询的字段

子查询结果为单列多行

  • 子查询的结果类似一个数组, 父层查询使用 IN 函数 ,包含子查询的结果
SELECT 查询字段 FROMWHERE 字段 IN (子查询);

子查询总结

  • 子查询如果查出的是一个字段(单列), 那就在where后面作为条件使用
  • 子查询如果查询出的是多个字段(多列), 就当做一张表使用(要起别名)

猜你喜欢

转载自blog.csdn.net/weixin_46303867/article/details/112795666