环境信息:
员工表:EMP
部门表:
工资等级表 salgrade
sql92标准的多表连接
注意:
- 如果为表起了别名,则查询的字段就不能用原来的表名
- 多表等值连接的结果为多表的交集部分
- n表连接,至少需要n-1个连接条件
- 多表的顺序没有要求
- 一般为表起别名
- 可以搭配前面介绍的所有查询子句使用,比如排序、分组、筛选
1、等值连接
1.1 案例:
案例1:查询员工的部门名称
select e.ENAME,d.DNAME from EMP e , DEPT d where e.DEPTNO=d.DEPTNO
案例2:查询有奖金的员工名,部门名称
select e.ENAME,d.DNAME from EMP e , DEPT d where e.DEPTNO=d.DEPTNO and e.COMM is not null;
案例3:查询第二个字符为i的员工名以及所属的部门名称
select e.ENAME,d.DNAME from EMP e , DEPT d where e.DEPTNO=d.DEPTNO and e.ENAME like '_I%'
1.2 等值连接加分组函数加排序
案例1:查询deptno的个数
select count(*) 个数,e.DEPTNO from EMP e group by DEPTNO
案例2:查询有奖金的每个部门的部门名和部门的位置和该部门的工资
select d.DNAME 部门名,e.SAL,d.LOC from DEPT d ,EMP e where e.DEPTNO=d.DEPTNO and e.COMM is not null order by e.SAL
1.3 三表连接
案例1:查询员工名字,员工薪水,员工部门名称,员工薪水等级
select e.ENAME,e.SAL, d.DNAME,s.GRADE from EMP e , DEPT d, SALGRADE s where e.DEPTNO=d.DEPTNO and e.SAL > s.LOSAL and e.SAL < s.HISAL order by e.SAL
2、非等值连接
2.1 含义:
不是等号的连接
2.2 案例:
案例1:查询员工的薪资与薪资等级
select e.SAL,s.GRADE from EMP e , SALGRADE s where e.SAL > s.LOSAL and e.SAL < s.HISAL order by e.SAL
select e.SAL,s.GRADE from EMP e , SALGRADE s where e.SAL > s.LOSAL between s.LOSAL and s.HISAL
3、自连接
3.1 含义:
将一张表比作两张表或多张表
只连接自己的表
3.2 案例:
查询 员工名 以及上级的名字
将一张表比作两张表或多张表
select e.ENAME 员工名字,m.ENAME ,e.MGR from EMP e ,EMP m where e.MGR=m.EMPNO