数据库的连接查询,多表查询

本文详细介绍了连接查询的基本概念、分类,包括内连接(等值连接、非等值连接、自连接)、外连接(右外连接、左外连接)以及如何避免笛卡尔积现象。同时涵盖了SQL92和SQL99语法的对比。最后展示了多表连接的实际案例。
摘要由CSDN通过智能技术生成

目录

1、什么是连接查询?

2、连接查询的分类?

3、笛卡尔积现象

4、内连接之等值连接

5、内连接之非等值连接

6、内连接之自连接

7、外连接

8、多张表连接


1、什么是连接查询?

        从一张表中单独查询,称为单表查询。emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。这种跨表查询,多张表联合起来查询数据,被称为连接查询。

2、连接查询的分类?

        根据语法的年代分类:

                SQL92:1992年的时候出现的语法

                SQL99:1999年的时候出现的语法

        根据表连接的方式分类:

                内连接:等值连接非等值连接自连接

                外连接:左外连接(左连接)

                              右外连接(右连接)

                               全连接

3、笛卡尔积现象

        当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。(笛卡尔发现的,这是一个数学现象。)

        怎么避免笛卡尔积现象?连接时加条件,满足这个条件的记录被筛选出来! 

        select

                e.ename, d.dname

        from

                emp e, dept d

        where

                e.deptno = d.deptno;

        注意:通过笛卡尔积现象得出,表的连接次数越多效率越低,尽量避免表的连接次数。

4、内连接之等值连接

案例:查询每个员工所在部门名称,显示员工名和部门名。

emp e和dept d表进行连接。条件是:e.deptno = d.deptno

SQL92语法:

        select

                e.ename,d.dname

        from

                emp e, dept d

        where

                e.deptno=d.deptno and 后面加条件;

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

SQL99语法:

        select

                e.ename,d.dname

        from

                emp e

        join

                dept d

        on

                e. deptno = d. deptno

        where

                …;

        sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where

        SQL99语法:select    ...    from    a    join    b    on    a和b的连接条件    where    筛选条件

5、内连接之非等值连接

        selecte

                ename, e.sal, s.grade

        from

                emp e

       inner join   //inner可以省略

                salgrade s

        on

                e.sal between s.losal and s.hisal;|  

条件不是一个等量关系,称为非等值连接。

6、内连接之自连接

案例:查询员工的上级领导,要求显示员工名和对应的领导名?

        将一张表看成两张表

        select

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

        from

                emp a

        join

                emp b

        on

                a.mgr = b.empno;

以上就是内连接中的:自连接,技巧:一张表看做两张表。

7、外连接

外连接(右外连接):

        select

                e.ename,d.dname

        from

                emp e

         right outer join  //outer可以省略,带着可读性强

                dept d

        on

                e.deptno T d.deptno;

        right表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查训表。在外连接当中,两张表连接,产生了主次关系。内连接两张表没有主次关系。

        带有right的是右外连接,又叫做右连接。带有left的是左外连接,又叫做左连接。任何一个右连接都有左连接的写法。任何一个左连接都有右连接的写法。

8、多张表连接

语法:

        select

                ...

        from

                a

        join

                b

        on

                a和b的连接条件

        join

                c

        on

                a和c的连接条件

        join

                d

        on

                a和d的连接条件

案例:找出每个员工的部门名称以及工资等级,还有上级领导,要求显示员工名、领导名、部门名、薪资、薪资等级

        select

                e.ename,e.sal,d.dname,s.grade,l.ename

        from

                emp e

        join

                dept d

        on

                e.deptno = d.deptno

        join

                salgrade s

        on

                e.sal between s.losal and s.hisal I

        left join

                emp l

        on

                e.mgr = l.empno;

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人spider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值