1. 表
1.1 学生表user
1.2 成绩表grade
没有3号的成绩却多了6号的成绩
id | subject | grade | uid |
---|
1 | 语文 | 80 | 1 |
2 | 数学 | 85 | 2 |
3 | 英语 | 99 | 2 |
4 | 语文 | 54 | 6 |
2. JOIN
2.1 inner join
2.1.1 sql:
SELECT
u.id,
u.`name`,
g.`subject`,
g.`grade`
FROM
`user` AS u
INNER JOIN grade AS g ON u.id = g.uid
2.1.2 结果
id | name | subject | grade |
---|
1 | 小赵 | 语文 | 80 |
2 | 小钱 | 语文 | 85 |
2 | 小钱 | 语文 | 99 |
2.1.3 结论
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
会返回两个表的交集,只在一个表中有的记录不会被返回。
2.2 left join
2.2.1 sql
SELECT
u.id,
u.`name`,
g.`subject`,
g.`grade`
FROM
`user` AS u
LEFT JOIN grade AS g ON u.id = g.uid
2.2.2结果
id | name | subject | grade |
---|
1 | 小赵 | 语文 | 80 |
2 | 小钱 | 语文 | 85 |
2 | 小钱 | 语文 | 99 |
3 | 小孙 | (Null) | (Null) |
2.2.3 结论
会从左表 (user) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
2.3 right join
2.3.1 sql
SELECT
u.id,
u.`name`,
g.`subject`,
g.`grade`
FROM
`user` AS u
RIGHT JOIN grade AS g ON u.id = g.uid
2.3.2 结果
id | name | subject | grade |
---|
1 | 小赵 | 语文 | 80 |
2 | 小钱 | 语文 | 85 |
2 | 小钱 | 语文 | 99 |
(Null) | (Null) | 语文 | 54 |
2.2.3 结论
会从右表 (grade ) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。