mysql外联多表查询

113 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第42天,点击查看活动详情

外联查询,就是把两张表按照某个条件合并成一张新表

  • 比如说:学生数据,课程数据,班级数据,这些数据不可能全部写在同一张表里面,肯定是分成三张表,每张表只存对应的数据,当需要的时候,使用外联查询把这些数据串成一张某些字段我们需要的表

案例: :o: 首先有下面三张表

  1. 学生表 c_s_uuid:学生唯一标识 c_s_name: 学生姓名 c_s_class: 所学课程的uuid 在这里插入图片描述 2.课程表 c_uuid: 课程唯一标识 c_name: 课程名 c_add: 上课地址唯一标识 在这里插入图片描述 3.上课地点表 c_d_uuid: 上课地点唯一标识 c_d_pos: 上课地点 在这里插入图片描述

:star: 需求:获取学生,学生上课地址两个字段的一张表(或者视图),如下图: 在这里插入图片描述

  1. 步骤一:先把学生表和课程表进行外联组合

    SELECT
    	* 
    FROM
    	c_student AS a
    	LEFT JOIN c_leason AS b ON b.c_uuid = a.c_s_class
    

    得到表: 在这里插入图片描述

  2. 步骤二:接下来用这张外联出来新表去外联上课地点表

    SELECT
    	* 
    FROM
    	c_student AS a
    	LEFT JOIN c_leason AS b ON b.c_uuid = a.c_s_class
    	LEFT JOIN c_address AS c ON c.c_d_uuid = b.c_add
    # 注意! 我们要外联的条件字段是从哪张表合并过来的,
    # 就去哪张表里取。虽然说外联之后得到了一张新的表,但是取新表的字段的时候,还是要从旧表里面找
    

    得到表:在这里插入图片描述

  3. 步骤三:从上面这张两次外联的表中得到字段数据,组成新的表(视图)

    # 取的规则也是和外联的规则一样,虽然外联之后合并成了新表,但拿字段的时候还是要从字段来的那张表拿
    
    SELECT
    	a.c_s_name, # 学生姓名的字段在a表上
    	c.c_d_pos	# 上课地点字段在c表上
    FROM
    	c_student AS a
    	LEFT JOIN c_leason AS b ON b.c_uuid = a.c_s_class
    	LEFT JOIN c_address AS c ON c.c_d_uuid = b.c_add
    

    最后的结果: 在这里插入图片描述