内连接(自然连接)
等值连接、自然连接和不等值连接
{内连接是join 关键字连接两个表,语法为 table1 join table2 on 条件。
根据使用的比较方式不同,内连接又分为等值连接、自然连接和不等值连接。
等值连接:所谓等值连接,是指在连接条件中使用等于(=)运算符比较被连接的值,也就是通过相等的列值连接起来的查询。
例子:Select empno,ename,sal,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno;
非等值连接: 所谓不等连接,就是在连接条件中使用除等号(=)外的其他比较运算符,构成非等值连接查询。可以使用的比较运算符包括:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、<>(不等于)、!=(不等于)、LIKE、IN和BETWEEN等。
例子:select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal; 查询所有员工的薪水等级
自然连接:自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件的结果。
例子:select * from emp natural join dept;
}
外连接
外连接的结果集 = 内连接的结果集 + 驱动表在匹配表中找不到匹配记录的数据和空值
{
使用一张表中的所有记录去和另一张表中的记录按条件匹配(空值也会匹配),这个表中的所有记录都会显示。
左外连接,右外连接,全外连接
LEFT/RIGHT/FULL OUTER JOIN
}
- 左外连接 (左边的表不加限制)
{
【例】t1 left outer join t2 --其中t1是驱动表,t2是匹配表
等价于:t2 right outer join t1
【例】查询每个员工的经理的名字?
select worker.ename,manager.ename from emp worker left outer join emp manager on worker.mgr=manager.empno;
}
- 右外连接(右边的表不加限制)
{
t1 right outer join t2 --t2是驱动表,t1是匹配表
等价于: t2 left outer join t1
【例】-哪些员工没有下属(不是别人的领导)? 外连接+匹配表PK is null 表示否定问题,不是,不包括,等等。
select manager.ename from emp worker
right outer join emp manager on worker.mgr = manager.empno
(首先找到所有经理下面的员工是哪些)
where worker.empno is null;
(然后将员工为空的过滤出来)
}
- 全外连接(左右两表都不加限制)full outer join
{
左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充。
【例】
select e.ename, d.loc from emp e full outer join dept d on (e.deptno = d.deptno);
}
自连接(同一张表内的连接)自连接是等值连接的一种。表中的列外键关联自己表的主键列。
{
自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
【例】查询每个员工的经理的名字?
select worker.ename,manager.ename from emp worker join emp manager on worker.mgr=manager.empno;