案例:查询每个员工所在部门名称,显示员工名和部门名?
分析:emp e 和 dept d 表进行连接。条件是:e.deptno = d.deptno
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;
sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后 面,不推荐使用。
inner:内部的
join:连接,参加
inner join:内连接
select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;
on 后面跟的是表连接的条件
e.deptno = d.deptno; // 条件是等量关系,所以称之为等值连接。
inner可以省略(带着inner可读性更好!!!一眼就能看出来是内连接)
select e.ename,d.dname from emp e inner join dept d on e.deptno = d.deptno;
sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where。
SQL99 语法格式:
select ... from 表a inner join 表b on a和b的连接条件 where 筛选条件
案例:找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级?
select e.ename,e.sal,s.grade from emp e inner join salgrade s on e.sal between s.losal and s.hisal;
条件不是一个等量关系,称为非等值连接。
案例:查询员工的上级领导,要求显示员工名和对应的领导名?
技巧:一张表看成两张表。
emp a 员工表
emp b 领导表
a.mgr = b.empno; // 员工的领导编号 = 领导的员工编号
select a.ename as '员工名',b.ename as '领导名' from emp a inner join emp b on a.mgr = b.empno;
13条记录,没有KING。《内连接》
以上就是内连接中的自连接,技巧:一张表看做两张表。