**
表连接
**
本文将浅述mysql的表连接方式,主要有内连接、左外连接、右外连接和自连接的概念及用法。连接作用是对多表进行操作。
内连接
内连接被称为普通连接或自然连接,内连接从结果表中删除与其他被连接表中没有匹配行的所有行。
内连接相当于数学中两个集合的交集。
语法:
select 列名列表 from 表1 inner join 表2 on 表1.列名=表2.列名
其中inner可省略
on 表1.列名是表1中主键列或者 外键列 表2相同
此处的表1.列名和表2.列名存在外键关系
on后面的顺序不设限制
本文中应用到的表:
student表(左表):
class表(右表):
如:
select * from t_student stu inner JOIN t_class cls on stu.fk_class_id=cls.id;
本例中student表中存在外键classNo,故外键字段与t_class表的主键字段相连接。
除了上面的方法,我们还可以省略inner join,如下:
select * from t_student stu,t_class cls where stu.fk_class_id=cls.id;
内连接查询的是两表中同时都存在的记录。
执行结果:
通过执行结果,我们可以发现,内连接只是查询出了两表均有的的结果,学生表中的刘苏和张晓华由于找不到对应的班级数据,所以在表连接之后删除了这两条记录。
左外连接
左外连接的结果集包括 left outer join 子句指定的左表所有行,而不是连接列所匹配的行,如果左表的某行右边表没有匹配行,则在相关连的结果集中的所有列表均为空值。
用法:left outer join 或left join
语法:
select 列名列表 from 表1 left join 表2 on 表1.列名=表2.列名
如:
select * from t_student stu LEFT JOIN t_class cls on stu.fk_class_id=cls.id;
执行结果:
通过观察我们发现,左外连接是以左表为参照,若右表中无对应数据则显示为空。
右外连接
右外连接是左外连接的反向连接。返回右表的所有行。右表的某行在左表中无匹配行,则将为左表返回空值。
用法:right outer join 或right join
语法:
select 列名列表 from 表1 left join 表2 on 表1.列名=表2.列名
现为class表添加一条数据:
如:
select * from t_student stu right JOIN t_class cls on stu.fk_class_id=cls.id;
执行结果:
自连接
自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
如:查询员工的姓名及其上级领导的姓名
select emp1.name as ’员工姓名‘,emp2.name as ’上级领导姓名' from employee as emp1 left join employee as emp2 on emp1.leaderNo=emp2.id;