连接查询之内连接(等值连接、非等值连接和自连接)

1、等值连接:表连接条件是等值关系,我们称为等值连接。

需求:查询每个员工所在部门名称,显示员工名和部门名:

        查看员工表的ename和deptno字段信息:

                

        查看部门表中的deptno和dname字段信息

                 

        SQL92语法:

                select

                   e.ename,d.dname

                from

                        emp e,dept d

                     where

                        e.deptno = d.deptno;

          缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件都需要放在where后面。

       SQL99语法:

                select

                   e.ename,d.dname

                from

                        emp e

                     inner join    #这里的inner表示内连接,它可以省略,写上inner的可读性好一些,因为见到inner就知道是内连接

                        dept d

                     on

                        e.deptno = d.deptno; #表连接条件是等值关系,我们称为等值连接

               

      优点:表连接的条件是独立的,连接之后如果还需要进一步筛选,可以继续在where后面加条件。

                                   

2、非等值连接:表连接条件是非等值关系,我们称为非等值连接。

        需求:找出每个员工的薪资等级,要求显示员工姓名、薪资、薪资等级:

                查看员工信息表中的ename和sal字段信息

                

                查看薪资等级表:

                 

SQL语句:

        select

                e.ename,e.sal,s.grade

        from

                emp e

        join

                salgrade s

        on

                e.sal between s.losal and hisal;   #这里表的连接条件是非等值关系,为此称为非等值连接

                

3、自连接:最大的特点就是将一张表看成两张表,自己连接自己。

        需求:查询每个员工的上级领导,要求显示员工名和领导名。

        分析:因为员工和领导都在一张表上,所以需要将同一张表看成是两张表,这样就可以了。

        SQL:

        select

                a.ename as '员工名',b.ename as '领导名'

        from

                emp as a     #这里把emp表看成表a

        join

                emp as b     #这里又把emp表看成表b,让表a连接表b,因为表a和表b是同一张表,所以称为自连接

        on

                a.mgr = b.empno;

                        ​​​​​​​        ​​​​​​​ 

因为KING没有上级领导,所以这里显示13条记录。(这里丢失了一名员工,显然不符合题意,解决办法见外连接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值