SQL JOIN命令

764 阅读2分钟

零.总述

  1. JOIN命令主要用来:基于表之间的共同字段,将多个表连接起来
  2. 常见的JOIN命令有:INNER JOIN(即,JOIN)、LEFT JOIN、RIGHT JOIN、FULL JOIN
  3. 示例表

table_a

student_id name score
1 小张 86
2 小王 90
3 小李 76
4 小张 93
5 小牛 86

table_b

teacher_id school teacher
1 一中 Lisa
3 师范附中 Shirly
5 三中 Tom
6 三中 Sherry
8 一零一中学 Lisa

一.INNER JOIN

  1. INNER JOIN一般也简写为JOIN,是内连接,返回两个表的交集部分

  2. 句式:select a.xx a.yy b.zz from table_a a inner join table_b b on a.m=b.n

  3. 示例

    select * from table_a a inner join table_b b on a.student_id=b.teacher_id

    student_id name score teacher_id school teacher
    1 小张 86 1 一中 Lisa
    3 小李 76 3 师范附中 Shirly
    5 小牛 86 5 三中 Tom

二.LEFT JOIN

  1. LEFT JOIN 会读取左侧数据表的全部数据,即使右侧表中无对应数据

  2. 句式:select a.xx a.yy b.zz from table_a a left join table_b b on a.m=b.n

  3. 示例

    select * from table_a a left join table_b b on a.student_id=b.teacher_id

    student_id name score teacher_id school teacher
    1 小张 86 1 一中 Lisa
    2 小王 90 NULL NULL NULL
    3 小李 76 3 师范附中 Shirly
    4 小张 93 NULL NULL NULL
    5 小牛 86 5 三中 Tom

三.RIGHT JOIN

  1. RIGHT JOIN 会读取右侧数据表的全部数据,即使左侧表中无对应数据

  2. 句式:select a.xx a.yy b.zz from table_a a right join table_b b on a.m=b.n

  3. 示例

    select a.name b.teacher_id b.school from table_a a right join table_b b on a.student_id=b.teacher_id

    name teacher_id school
    小张 1 一中
    小李 3 师范附中
    小牛 5 三中
    NULL 6 三中
    NULL 8 一零一中学

四.FULL JOIN

  1. FULL JOIN 显示左右两张表的全部数据,返回左表和右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值
  2. Oracle数据库支持full join,mysql是不支持full join的

五.on和where的区别

  1. 示例:select a.xx a.yy b.zz from table_a a left join table_b b on a.m=b.n where a.m=mmm
  2. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
  3. where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉