mysql-DQL-内连接-外连接-笛卡尔积
一、笛卡尔积现象:
- 两张表进行连接查询时,没有限制条件会发生?
- 最终查询结果是:两张表的条数乘积,这个现象称为:笛卡尔积现象
二、连接方式:
1、内连接:inner(等值连接、非等值连接、自联结)select....from....inner join....on...where...
- 内连接:等值连接
- 案例:查询每个员工所在部门名称,显示员工名和部门名?
- 分析:给表格起别名:emp e 和dept d 表进行链接。条件是:e.deptno = d.deptno
- select e.ename,d.dname
- from emp e
- inner join dept d
- on e.deptno = d.deptno;
- 内连接:非等值连接:
- 案例:找出每个员工的薪资等级,要求显示员工名,薪资,薪资等级(先查询总表,对照总表分析)
- 分析:1、总表:select * from emp;2、等级表:select * from salgrade;
- 表达逻辑:
- select e.ename, e.sal,s.grade
- from emp e
- inner join salgrade s
- on e.sal between s.losal and s.hisal;
- 内连接:自链接:一张表看作两张表
- 案例:查询员工上级领导,要求显示员工名和对应的领导名字?
- 分析:1、select empno,ename,mgr from emp;(这里查询出来一张表)
- 2、一张表看作两张表:emp a员工;emp b领导表(这两张表都是上面查询出来的一张表一分为二)
- 3、结果:
- select a.ename as '员工', b.ename as '领导'
- from emp a
- inner join emp b
- on a.mgr = b.empno;(这句话翻译过来:员工的领导编号 = 领导的员工编号)
2、外连接:outer(左外链接、右外链接)
- 外连接:right :表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,
- 并关联查询左边的表,在外连接中,两张表链接产生主次关系
- 右外连接:案例:查询每个员工所在的部门名称?(思路:查询整个表格,和所需要的部门表格,进行分析)
- select e.ename,d.dname
- from emp e
- right join dept d
- on e.deptno = d.deptno;
- 左外连接:案例:查询每个员工上级领导,要求显示所有员工名字和领导名字?
- select a.ename as '员工',b.ename as'领导'
- from emp a
- left join emp b
- on a.mgr = b.empno;