MySQL中可以对两个表中数据做连接查询,就是左连接、右连接和内连接,那么这三者之间有什么区别呢?
LEFT JOIN:
左连接,指的是拿左边表的每一行数据和右边表的所有行一一对比,满足条件即打印出来;特点在于如果对于左表的某一行和右表所有数据都不满足条件,也会返回一条数据,例如:
学号(SID) | 姓名(NAME) | 年龄(AGE) |
01 | 刘小华 | 18 |
02 | 周星星 | 19 |
03 | 谢安琪 | 20 |
学号(SID) | 课程号(CID) | 成绩(SCORE) |
01 | 01 | 99 |
01 | 02 | 88 |
02 | 02 | 90 |
那么select * from student left join sc on student.SID = sc.SID输出如下:可以看到,即使谢安琪没有成绩,但是也会打印这条记录
学号(SID) | 姓名(NAME) | 年龄(AGE) | 学号1(SID1) | 课程号(CID) | 成绩(SCORE) |
01 | 刘小华 | 18 | 01 | 01 | 99 |
01 | 刘小华 | 18 | 01 | 02 | 88 |
02 | 周星星 | 19 | 02 | 02 | 90 |
03 | 谢安琪 | 20 | null | null | null |
右连接:
意思与左连接相反,拿右表中的每一行和左表中的所有行一一比较,以右表为准,譬如上述表如果用右连接的话,则没有谢安琪这条记录了,因为右表中没有SID为03的记录,所以只会查出3条记录
内连接:
内连接比较的是共有,如果上述表用内连接查询的话,结果和右连接是一样的,区别在于内连接一定会返回共有的部分,如果左表中的某一行对应右表中所有行条件不成立则不输出该条记录,同理如果对于右表中的某一行对应左表中的所有行条件不成立,也不会输出这一条,即要么输出两个表都有的记录,要么不输出