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;
posted @ 2022-04-13 20:38  280887072  阅读(145)  评论(0编辑  收藏  举报