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 | 管理员 |
结果说明:结果只展示了符合条件的记录,并不以谁为基准