这块知识不太牢固,一提起来就有点怵。今天抽空整理下。
当做表的关联时,有时我们只需要完全符合条件的记录,这就需要用到内连接。有时需要把其中一个表中的所有记录找出来,这就需要用到外连接。关联方法一般是select * from a (left/right/inner) join b on a.xx = b.xx
1 内连接
形式为:select * from a (inner) join b on a.xx = b.xx
只返回满足a.xx=b.xx的记录。默认的join就是内连接。
2 外连接
外连接包括左外连接和右外连接。
左外连接:select * from a left join b on a.xx = b.xx
右外连接:select * from a right join b on a.xx = b.xx
左连接会返回表a中的所有记录,如果不满足a.xx=b.xx,则返回的记录中b的字段为NULL
左连接会返回表b中的所有记录,如果不满足a.xx=b.xx,则返回的记录中a的字段为NULL
3 全连接
首先说明mysql中不支持全连接。
形式如select * from a left full join b on a.xx = b.xx
全连接返回a和b中的所有记录。如果不满足a.xx=b.xx,则返回的记录中不存在的那个表的字段为NULL.
上例子。
现有学生表t_student和班级表t_class。
t_student.
id | name | cid |
1 | s1 | 1 |
2 | s2 | 1 |
3 | s3 | 2 |
4 | s4 | 4 |
t_class.
id | name |
1 | c1 |
2 | c2 |
3 | c3 |
内连接:
SELECT * FROM `t_student` s join t_class c on s.cid = c.id ;
返回结果为:
1 s1 1 1 c1
2 s2 1 1 c1
3 s3 2 2 c2
左外连接:
SELECT * FROM `t_student` s left join t_class c on s.cid = c.id ;
返回结果为:
1 s1 1 1 c1
2 s2 1 1 c1
3 s3 2 2 c2
4 s4 4 null null
右外连接:
SELECT * FROM `t_student` s right join t_class c on s.cid = c.id ;
返回结果为:
1 s1 1 1 c1
2 s2 1 1 c1
3 s3 2 2 c2
null null null 3 c3
Mysql不支持全连接。