美文网首页mysql
DQL_SQL多表连接查询

DQL_SQL多表连接查询

作者: _narcissus | 来源:发表于2019-07-06 17:17 被阅读0次

多表联合查询:一般一个业务都会对应多张表,避免出现数据冗余

连接查询

分类:按连接方式

分类 细分
内连接(inner join) 等值连接
非等值连接
自连接
外连接(left join ; right join) 左外连接
右外连接
全连接

在表的连接查询方面有一种现象被成为:笛卡尔积现象(笛卡尔乘积现象)

案例:找出每个员工的部门名称,要求显示员工名和部门名

select e.ename,d.dname from emp e,dept d;

当两张表进行连接查询时,如果没有任何条件限制,最终查询结果为两张表的乘积

表的别名好处:执行效率高,指定在那张表中查询;可读性好

避免笛卡尔积现象

添加条件进行过滤,但是匹配次数仍然没变,只是显示的是过滤后的记录


内连接-----等值连接

最大特点:条件是等量关系

找出每个员工的部门名称,要求显示员工名和部门名

sql92(旧语法),where后添加条件为and,关系不明确

select e.ename,d.dname from emp e ,dept d where e.deptno=d.deptno;

sql99(新语法),后面可以添加where过滤条件,inner可省略

select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;

内连接-----非等值连接

最大特点:连接条件中的关系是非等量关系,inner可省略

案例:找出每个员工的工资等级,要求显示员工名,工资,工资等级

select 
    e.ename,e.sal,s.grade 
from 
    emp e 
inner join 
    salgrade s 
on 
    e.sal between s.losal and s.hisal;

内连接-----自连接

最大特点:一张表看做两张表,自己连接自己,inner可省略

案例:找出每个员工的上级领导,要求显示员工名和对应的上级 的领导名

select 
    a.ename as '员工名' ,b.ename as '领导名' 
from 
    emp a 
inner join 
    emp b 
on 
    a.mgr=b.empno;


外连接

内连接:两张表没有主副之分inner 可省略

外连接:一张为主表,一张为副表,当副表中没有数据和主表中数据匹配,副表自动模拟出null与之匹配outer 可省略

左连接:左外连接,左边的表为主表

右连接:右外连接,右边的表为主表

案例:找出每个员工的上级领导(所有员工必须查询出)

select 
    a.ename as '员工名' ,b.ename as '领导名' 
from 
    emp a 
left outer join 
    emp b 
on 
    a.mgr=b.empno;

案例:找出没有员工的部门

select 
    d.*
from 
    emp e
right join
    dept d
on
    e.deptno=d.deptno
where
    e.empno is null;


多表连接

select
    ...
from 
    a
join
    b
on
    ...
join
    c
on
    ...

表示a表与b表先连接查询,然后a表再与c表连接查询

案例:找出每一个员工的部门名称,工资等级

select
    e.ename,d.dname,s.grade
from 
    emp e
join
    dept d
on 
    e.deptno=d.deptno
join 
    salgrade s
on
    e.sal between s.local and s.hisal;

案例:找出每一个员工的部门名称,工资等级,以及上级领导

select
    e.ename as '员工',d.dname,s.grade,e1.ename as '领导'
from 
    emp e
join
    dept d
on 
    e.deptno=d.deptno
join 
    salgrade s
on
    e.sal between s.local and s.hisal
left join
    emp e1
on  
    e.mgr=e1.empno;

相关文章

  • DQL_SQL多表连接查询

    多表联合查询:一般一个业务都会对应多张表,避免出现数据冗余 连接查询 分类:按连接方式 在表的连接查询方面有一种现...

  • SQL语句常用命令整理---多表查询

    多表查詢之关连查询 多表数据连接查询,简称连接查询。本篇我们来一同学习多表连接查询的相关用法,主要內容有: 内连接...

  • MySQL 基础 6 多表查询

    1.1 多表查询的概述 1.1.1 多表查询的分类 1.1.1.1连接查询 交叉连接:cross join交叉连接...

  • 003 多表查询, 事务和DCL.

    多表查询 多表查询: 笛卡尔积.内连接查询隐式内连接 : 使用where.eg: select * from ...

  • Fourth Day

    /-----------------------------------多表连接查询---------------...

  • Oracle详解(Ⅱ):世界上目前已知最好的关系型数据库

    多表查询 多表连接基本查询 使用一张以上的表做查询就是多表查询 这样会出现的结果就是:笛卡儿积连接查询的时候一般在...

  • Oracle连接_子查询

    多表查询:多张表关联在一起进行查询,在多表查询中会频繁的使用表的别名。连接:内连接(等值连接):select 列名...

  • 2018-08-30

    今天学习了Oracle的多表连接,组函数,分组查询,子查询,常用函数。 多表连接有三种类型:内连接,外连接,自连接...

  • SQL-连接查询

    连接查询 又叫:多表查询、多表连接含义:当查询的子都啊来自多个表时,就会用到连接查询 笛卡尔乘积现象:表1有m行,...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

网友评论

    本文标题:DQL_SQL多表连接查询

    本文链接:https://www.haomeiwen.com/subject/ifqmhctx.html