|
数据库建表过程中为了减少许据冗余,一般会将字段放在区别的表中。因此呢为了从多表中取数据,连接查找便是SQL查找语句中最平常、运用最广泛的查找技巧。连接查找能够根据两种归类方式。其一是按照连接语法显现的年代,将查找分为SQL92语法和SQL99语法。其二是按照表的连接方式划分,将查找分为内连接、外连接及全连接,下图为连接方式的细分。下述案例中用到的emp表为
下述案例中用到的分部表dept为
内连接之等值连接案例:找出每一个员工的分部名叫作,需求表示员工名和分部名。经过这道案例题,首要感受一下SQL92语法暗示内连接的等值连接。select ename, dname from emp e, dept d where e.deptno = d.deptno;下面用SQL99语法进行改写。select ename,dname from emp e inner join dept on e.deptno = d.deptno;不管是SQL92语法还是SQL99语法,emp表和dept表连接的要求都是等号,因此叫作之为等值连接。而SQL99语法为select xxx from A表 inner join B表 on 连接要求 where 筛选要求;经过语法格式能够发掘,其将连接要求放在on后面,从而和where后面的筛选要求掰开,更加清晰、明了。内连接之非等值连接案例:找出每一个员工的工资等级,需求表示员工名、工资、工资等级。select e.ename, e.sal, s.salgrade from emp e inner join sal s on e.sal between s.lowsal between s.hisal;经过以上SQL99查找语句能够发掘,on后面紧跟的连接要求是between ... and ...语句,显然是非等值语句。另一,非等值要求还能够是>、< 、<>等。内连接之自连接案例:表示员工姓名和上级领导。select e1.ename, e2.ename from emp e1 inner join emp e2 on e1.mgr = e2.empno;从以上查找语句能够看出emp表完成为了自连接,即能够将其同期看作e1表和e2表的连接。查找结果:
然则这条查找语句只能查出13条记录,由于KING的领导为空,而在内连接中,倘若连接字段中的数据显现空,那样就查找不出这条记录。而想要查出所有数据就要用到外连接。外连接之左外连接关于外连接咱们要弄清楚两点内容。首要第1点是内连接与外连接的区别。假设A和B进行连接,运用内连接,凡是A表和B表能够匹配上的记录查找出来。AB两张表无主副之分,两张表是平等的。假设A和B两张表进行连接,运用外连接的话,AB两张表有一张是主表,一张是副表,重点查找主表中的数据,捎带着查找附表。当附表中的数据无和主表中的数据匹配上,副表会自动用null与之匹配。以上自连接运用的案例采用的是内连接,因此当员工king的领导编号为空时,员工king的记录就不会被匹配出来。然则倘若运用外连接,SQL语句改为:select e1.ename, e2.ename from emp e1 left join emp e2 on e1.mgr = e2.empno;查找结果为:
经过查找结果能够发掘一共产生了14条记录,其中king的领导是null即为空。亦便是说,运用外连接,副表中的数据都不可和主表匹配时,会自动产生null与之对应。下面弄清楚第二点,亦便是外连接又分为左外连接和右外连接。她们的区别便是倘若用left join,那样left join左边的表便是主表,右边显现的表是副表。而right join暗示左边显现的表是副表而右边显现的表是主表。还是拿下述SQL做参考。select e1.ename, e2.ename from emp e1 left join emp e2 on e1.mgr = e2.empno;e1出此刻left join左边,因此其是主表而e2为副表。END
|
|