链接查询
多表链接查询就是从多个表中获取数据,若两张表进行连接查询的时候,没有任何条件限制,最终查询结果总数是两张表记录的乘积,成为笛卡尔积
#展示员工信息和所在部门信息 14个员工 4各部门 笛卡尔积:14*4 = 56
select * from emp,deptno;
内连接
根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的行,组成新的记录。
分类:
- 等值连接:连接条件为相等判断的
- 非等值连接:连接条件不为相等判断的
- 自连接:在一个连接查询中,涉及两个表都是同一张表的查询,自连接是一种特殊的连接查询,它指相互连接的表在物理上为同一张表,在逻辑上分为两张表。
select 字段1[,字段2...] from 表1 join 表2 on 条件语句
select * from emp join dept
on emp.deptno = dept.deptno;
select * from emp,dept
where emp.deptno = dept.deptno; #连接条件:emp.deptno = dept.deptno
select ename,emp.deptno,dname
from emp join dept
on emp.deptno = dept.deptno; #显示ename,emp表中的deptno(两个表中都有deptno),dname
#非等值连接:查询员工薪水等级
select e.ename,e.sal,s.grade
from emp e join salgrade s #将emp 起别名 e,salgrade 起别名 s
on e.sal between s.losal and s.hisal;
#自连接:查询员工所对应的领导名称
select e1.ename,e2.ename mgr_name #物理上一个表 逻辑上两个不同的表
from emp e1 join emp e2
on e1.mgr = e2.empno
外连接
A表和B表能够完全匹配的记录查询出来之外,将其中一张表的记录无条件的完全查询出来,对方表没有匹配的记录时会自动模拟出null值与之匹配。
同时:外连接的查询结果条数 >= 内连接的查询结果条数
- 左外连接 left [outer] join 显示左表全部记录,右表满足连接条件的记录
- 右外连接 right [outer] join 显示右表全部记录,左表满足条件的记录
#查询员工所对应的领导名称
select e1.ename,e2.ename mgr_name
from emp e1 left join emp e2
on e1.mgr = e2.empno;