1、等值连接:表连接条件是等值关系,我们称为等值连接。
需求:查询每个员工所在部门名称,显示员工名和部门名:
查看员工表的ename和deptno字段信息:
查看部门表中的deptno和dname字段信息
SQL92语法:
select
e.ename,d.dname
from
emp e,dept d
where
e.deptno = d.deptno;
缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件都需要放在where后面。
SQL99语法:
select
e.ename,d.dname
from
emp e
inner join #这里的inner表示内连接,它可以省略,写上inner的可读性好一些,因为见到inner就知道是内连接
dept d
on
e.deptno = d.deptno; #表连接条件是等值关系,我们称为等值连接
优点:表连接的条件是独立的,连接之后如果还需要进一步筛选,可以继续在where后面加条件。
2、非等值连接:表连接条件是非等值关系,我们称为非等值连接。
需求:找出每个员工的薪资等级,要求显示员工姓名、薪资、薪资等级:
查看员工信息表中的ename和sal字段信息
查看薪资等级表:
SQL语句:
select
e.ename,e.sal,s.grade
from
emp e
join
salgrade s
on
e.sal between s.losal and hisal; #这里表的连接条件是非等值关系,为此称为非等值连接
3、自连接:最大的特点就是将一张表看成两张表,自己连接自己。
需求:查询每个员工的上级领导,要求显示员工名和领导名。
分析:因为员工和领导都在一张表上,所以需要将同一张表看成是两张表,这样就可以了。
SQL:
select
a.ename as '员工名',b.ename as '领导名'
from
emp as a #这里把emp表看成表a
join
emp as b #这里又把emp表看成表b,让表a连接表b,因为表a和表b是同一张表,所以称为自连接
on
a.mgr = b.empno;
因为KING没有上级领导,所以这里显示13条记录。(这里丢失了一名员工,显然不符合题意,解决办法见外连接)