心有猛虎,细嗅蔷薇! <天蝎王>
<b><big>“不要因为走得太远,而忘了为什么出发” </big> </b>
关键字:
JOIN
- 主要就是把两个或者多个表根据条件(表之间的字段关系)关联起来;
-
INNER JOIN: 满足条件的行才会被返回(返回结果肯定小于或者等于行数最少的表); -
LEFT JOIN: 会返回左边表所有的行数,就算是左右表关联字段值不匹配。如果右表中没有匹配,则结果为 NULL。 -
RIGHT JOIN:会返回右边表所有的行数,就算是左右表关联字段值不匹配。如果左表中没有匹配,则结果为 NULL。
举例说明:
1、首先创建一个班级学生表(student_table),并插入几条数据。
| name | student_ID | class_ID |
|---|---|---|
| 詹姆斯 | 23 | 1 |
| 保罗 | 3 | 1 |
| 韦德 | 6 | 1 |
| 安东尼 | 7 | 1 |
2、再创建一个成绩表(score_table),也插入几条数据。
| student_ID | math | history |
|---|---|---|
| 23 | 90 | 90 |
| 3 | 90 | 90 |
| 24 | 91 | 87 |
| 35 | 92 | 86 |
| 30 | 93 | 85 |
3、INNER JOIN
代码部分:
SELECT * a.name 姓名,a.student_ID 学号,b.math 数学,b.history 历史
FROM
student_table a
INNER JOIN score_table b ON a.student_ID = b.student_ID;
结果:
| 姓名 | 学号 | 数学 | 历史 |
|---|---|---|---|
| 詹姆斯 | 23 | 90 | 90 |
| 保罗 | 3 | 90 | 90 |
4、LEFT JOIN(左表原来有四行结果,最终查询也为4行结果,没有匹配就是NULL)
SELECT a.name 姓名,a.student_ID 学号,b.math 数学,b.history 历史
FROM
student_table a
LEFT JOIN score_table b ON a.student_ID = b.student_ID;
| 姓名 | 学号 | 数学 | 历史 |
|---|---|---|---|
| 詹姆斯 | 23 | 90 | 90 |
| 保罗 | 3 | 90 | 90 |
| 韦德 | 6 | Null | Null |
| 安东尼 | 7 | Null | Null |
5、RIGHT JION (右表原来有5行结果,最终查询也为5行结果,没有匹配就是NULL)
SELECT a.name 姓名,a.student_ID 学号,b.math 数学,b.history 历史
FROM
student_table a
RIGHT JOIN score_table b ON a.student_ID = b.student_ID;
| 姓名 | 学号 | 数学 | 历史 |
|---|---|---|---|
| 詹姆斯 | 23 | 90 | 90 |
| Null | Null | 91 | 87 |
| 保罗 | 3 | 90 | 90 |
| Null | Null | 92 | 86 |
| Null | Null | 92 | 86 |











网友评论