SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别

SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别

数据表如下

user表:

id username password role_id
1 13113632896 123456 1
18 13113631796 123456 15
20 13113631736 123456 1

role表:

id title
1 超级管理员
15 管理员
16 蛇皮哥
17 刘三炮

文字说明一下:

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

left join举例说明一下:

sql:

SELECT
`user`.id,
`user`.username,
`user`.`password`,
`user`.role_id,
role.id AS role_table_id,
role.title
FROM
`user`
LEFT JOIN role ON `user`.role_id = role.id

查询结果:

id username password role_id role_table_id title
1 13113632896 123456 1 1 超级管理员
18 13113631796 123456 15 1 管理员
23 13113631736 123456 20 null null

结果说明:

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。

说人话就是:A表的记录会全部展示,B表只展示符合条件的记录,然后B表不不符合条件的地方均用NULL补足

right join举例说明一下:

sql:

SELECT
`user`.id,
`user`.username,
`user`.`password`,
`user`.role_id,
role.id AS role_table_id,
role.title
FROM
`user`
right JOIN role ON `user`.role_id = role.id

查询结果:

id username password role_id role_table_id title
1 13113632896 123456 1 1 超级管理员
18 13113631796 123456 15 15 管理员
null null null null 16 蛇皮哥
null null null null 17 刘三炮

结果说明:查询结果和left join的结果刚好相反,这次是以B表为基础的,A表不足的地方用NULL补足。

inner join说明一下:

sql:

SELECT
`user`.id,
`user`.username,
`user`.`password`,
`user`.role_id,
role.id AS role_table_id,
role.title
FROM
`user`
right JOIN role ON `user`.role_id = role.id

查询结果:

id username password role_id role_table_id title
1 13113632896 123456 1 1 超级管理员
18 13113631796 123456 15 15 管理员

结果说明:结果只展示了符合条件的记录,并不以谁为基准

你可能感兴趣的:(SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别)