Mysql各种连接关系JOIN说明
0 常见join连接关系说明
类型 | 解释 | 说明 |
---|---|---|
INNER JOIN | 内连接 | 关键字在表中存在至少一个匹配时返回行(交集) |
LEFT JOIN | (外)左连接 | 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL |
RIGHT JOIN | (外)右连接 | 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL |
FULL JOIN | (外)全连接 | 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.(并集) |
1INNER JOIN
应用场景:
- 如果需要取的表中的字段信息为必须不为空字段
语法:
select * from 表A innner join 表B on 条件
说明:
- 取A表和B表的交集,条件所取数据均有值,为空则舍去
案例:
# 表A
SELECT * FROM user
# 表B
SELECT * FROM userinfo
# INNER JOIN查询
SELECT
*
FROM
userinfo A
INNER JOIN `user` B ON A.id = B.id
2 LEFT JOIN
应用场景:
- 如果需要取的表中的字段信息可为空
语法:
select * from 表A left join 表B on 条件
说明:
- 以A表为准,取A表的全部数据,联接B表的数据,匹配则展示数据,否则用null填充
案例:
# LEFT JOIN 连接
SELECT
*
FROM
userinfo A
LEFT JOIN `user` B ON A.id = B.id
3 RIGHT JOIN
应用场景:
- 如果需要取的表中的字段信息可为空
语法:
select * from 表A right join 表B on 条件
说明:
- 以B表为准,取B表的全部数据,联接A表的数据,匹配则展示数据,否则用null填充
LEFT JOIN
和RIGHT JOIN
,可将两表位置互换得到.
案例:
# RIGHT JOIN 连接
SELECT
*
FROM
userinfo A
RIGHT JOIN `user` B ON A.id = B.id
4 FULL JOIN
应用场景:
- 如果需要取的表中的字段信息为最全面的
语法:
select * from 表A FULL OUTER JOIN 表B on 条件
说明:
- 左表和右表那里返回所有的行。如果一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替.
案例:
# FULL JOIN 连接
SELECT
*
FROM
userinfo AS A
FULL OUTER JOIN `user`AS B ON A.id = B.id
# 报错,查询资料Mysql不支持全连接
# 解决 使用左连接 union 右连接
# union 会去 union all 不会去重
SELECT
*
FROM
userinfo A
RIGHT JOIN `user` B ON A.id = B.id
UNION
SELECT
*
FROM
userinfo A
LEFT JOIN `user` B ON A.id = B.id