左连接

关联查询

MySQL关联查询 - 图3
image.png
MySQL关联查询 - 图5

  1. SELECT
  2. *
  3. FROM
  4. TableA LEFT JOIN
  5. TableB
  6. ON condition;

image.png

  1. SELECT
  2. *
  3. FROM
  4. ykd_teacher
  5. LEFT JOIN ykd_course ON ykd_teacher.id = ykd_course.teacher_id;
  1. SELECT
  2. ykd_student.id,
  3. ykd_student.name,
  4. ykd_student.birthday,
  5. ykd_student.course_id,
  6. ykd_student.gender,
  7. ykd_course.id,
  8. ykd_course.name
  9. FROM
  10. ykd_student
  11. LEFT JOIN ykd_course ON ykd_student.course_id = ykd_course.id;

image.png

表结构设计规范

image.png

右连接

右连接就是返回右表的所有数据,即使左表没有匹配的数据。

  1. SELECT
  2. *
  3. FROM
  4. TableA RIGHT JOIN
  5. TableB
  6. ON condition;

查询课程对应的老师(不管课程有没有对应的老师,都要展示课程信息。)

  1. SELECT
  2. *
  3. FROM
  4. ykd_teacher
  5. RIGHT JOIN ykd_course ON ykd_teacher.id = ykd_course.teacher_id;

多表关联查询

image.png
语法

  1. SELECT
  2. *
  3. FROM
  4. TableA LEFT JOIN
  5. TableB ON conditionA
  6. LEFT JOIN
  7. TableB
  8. ON conditionB;

比如我们要查询三张表

  1. SELECT
  2. *
  3. FROM
  4. ykd_course
  5. LEFT JOIN ykd_student ON ykd_student.course_id = ykd_course.id
  6. LEFT JOIN ykd_teacher on ykd_course.teacher_id = ykd_teacher.id;

多表查询的本质是,A和B先关联,然后再和C关联查询,以此类推。

老王需要小王用一条SQL语句的关联查询三张表,用左连接查询课程对应的学生和老师(不管有没有对应的血神或老师,优先展示课程信息),均以ykd_course为左表。

  1. SELECT
  2. ykd_student.name AS "学生",
  3. ykd_student.birthday,
  4. ykd_student.gender,
  5. ykd_course.id,
  6. ykd_course.name AS "课程名",
  7. ykd_teacher.name AS "授课老师"
  8. FROM
  9. ykd_course
  10. LEFT JOIN ykd_student ON ykd_student.course_id = ykd_course.id
  11. LEFT JOIN ykd_teacher on ykd_course.teacher_id = ykd_teacher.id;

内连接

image.png
image.png
MySQL关联查询 - 图12

  1. SELECT
  2. *
  3. FROM
  4. Table_A
  5. INNER JOIN Table_B
  6. ON
  7. Table_A.id = Table_B.student_id;

外连接的拓展(左右连接)

查询后的数据:
MySQL关联查询 - 图13
MySQL关联查询 - 图14
实际应用中我们希望查询A中和B完全没有关系的数据,比如查询班级A中没有参与B考试的人员。
MySQL关联查询 - 图15

  1. SELECT
  2. *
  3. FROM
  4. Table_A
  5. LEFT JOIN Table_B ON Table_A.id = Table_B.student_id
  6. WHERE
  7. Table_B.student_id IS NULL;

UNION关键字

有时候需要联合查询所有的内容。
MySQL关联查询 - 图16
查询A中所有的学生和B中所有的学生,不管他们是否参与了考试。有没有成绩。

  1. SELECT
  2. *
  3. FROM
  4. Table_A
  5. LEFT JOIN Table_B
  6. ON
  7. Table_A.id = Table_B.student_id
  8. UNION DISTINCT
  9. SELECT
  10. *
  11. FROM
  12. Table_A
  13. RIGHT JOIN Table_B ON Table_A.id=Table_B.student_id;

image.pngimage.png