最近写SQL经常遇到表之间的连接问题,自己网上搜了一下 ,贴出来,跟大家分享一下~
关系数据库中关系表间的连接(左连接,右连接,内连接,全连接,外连接)
关系数据库中关系表间的连接主要有:内连接和外连接。
内连接:把两个表中数据对应的数据查询出来。
外连接:以某个表为基础把对应数据查询出来(全连接是以多个表为基础),其中又包括左连接和右连接两种。
比如,有下面两个关系表student和grade。
Student表
No | Name |
1 | A |
2 | B |
3 | C |
4 | D |
Grade表
No | Grade |
1 | 90 |
2 | 98 |
3 | 95 |
5 | 100 |
内连接inner join(在两个表中查询满足条件的对应数据)。
语法:SELECT * FROM student INNER JOIN grade ON student.no=grade.no
结果:
student.no | student.name | grade.no | grade.grade |
1 | A | 1 | 90 |
2 | B | 2 | 98 |
3 | C | 3 | 95 |
左连接:包含左表中所有数据,右表中满足条件的对应数据。
语法:SELECT * FROM student LEFT JOIN grade ON student.no=grade.no
结果:
student.no | student.name | grade.no | grade.grade |
1 | A | 1 | 90 |
2 | B | 2 | 98 |
3 | C | 3 | 95 |
4 | D | NULL | NULL |
右连接:包含右表中所有数据,左表中满足条件的对应数据。
语法:SELECT * FROM student RIGHT JOIN grade ON student.no=grade.no
结果:
student.no | student.name | grade.no | grade.grade |
1 | A | 1 | 90 |
2 | B | 2 | 98 |
3 | C | 3 | 95 |
NULL | NULL | 5 | 100 |
全连接:左右表中所有数据全部查询出来。
语法:SELECT * FROM student FULL JOIN grade ON student.no=grade.no
结果:
student.no | student.name | grade.grade |
1 | A | 90 |
2 | B | 98 |
3 | C | 95 |
4 | D | NULL |
1 | A | 90 |
2 | B | 98 |
3 | C | 95 |
5 | NULL | 100 |