MySQL-多表查询

  • 多表关系

    • 一对多(多对一)
      • 案例:一个部门对应多个员工,一个员工对应一个部门
      • 实现方式:在多的一方建立外键,指向一的一方的主键
    • 多对多
      • 案例:一个学生可以选择多门课程,一门课程也可供多个学生选择
      • 实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方的主键
    • 一对一
      • 案例:将用户的基础信息放在一张表中,用户的其它详情信息放在另一张表中。该关系多用于单表拆分
      • 实现方式:在任意一方加入外键,关联另外一方的外键,并设置外键为唯一的(UNIQUE)
  • 多表查询

    • 概述:即从多张表中查询数据,需要用到笛卡尔积。在查询时又需要消除无效的笛卡尔积

    • 分类

      • 连接查询

        • 内连接

          • 介绍:相当于查询表A和表B交集部分的数据
          • 语法:
          SELECT 字段列表 FROM 表1,表2 WHERE 条件...;	#隐式内连接
          SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;	#显式内连接
          
        • 外连接

          • 左外连接

            • 介绍:相当于查询表1(左表)的所有的数据 包含 表1和表2交集部分的数据
            • 注意:此连接方式看起来和直接查询表1貌似没有区别,但其实这里的交集部分的数据指的是两张表中关联起来的数据,也就是说此连接方式是在内连接的基础上把表1中没有和表2关联的数据一同显示出来了。详细演示参考《MySQL-多表查询演示》
            • 语法:
            SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
            
          • 右外连接

            • 介绍:相当于查询表2(右表)的所有的数据 包含 表1和表2交集部分的数据
            • 语法:
            SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
            
        • 自连接

          • 介绍:自连接查询,可以使用内连接查询语句实现,也可以是使用外连接查询语句实现,因为自连接的本质只是将一张表当成两张表使用,与使用什么查询语句无关。
          • 语法:
          SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
          
        • 联合查询

          • 介绍:
            • 对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
            • 联合查询涉及的多张表的结构必须相同(字段数量和类型需相同)
            • union all 会将全部的数据直接合并在一起,union会对合并之后的数据去重
          • 语法:
          SELECT 字段列表 FROM 表A ...
          UNION[ALL]
          SELECT 字段列表 FROM 表B ...;
          
      • 子查询

        • 介绍:
          • SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询
          • 子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个
        • 语法:
        SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
        
        • 分类(根据查询结果的不同):

          • 标量子查询

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

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

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

            • 介绍:子查询返回的结果是多行多列
            • 常用操作符:IN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值