zoukankan      html  css  js  c++  java
  • my sql中join的操作

    SQL标准中的Join的类型: 
    这里写图片描述


    首先,设置表employees和department的数据为: 
    这里写图片描述


    这里写图片描述


    1、inner join … on操作类型 
    内连接inner join是基于连接谓词将两张表(如A和B)的列组合在一起的,产生新的结果表。 
    例子:

    SELECT *
    FROM employees a
    inner join department b
    ON a.department_id = b.department_id
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    查询结果为: 
    这里写图片描述

    注意:inner join 可以简写为join,该查询得出的结果为两张表共同的部分。效果和使用where语句一样,如下语句:

    SELECT *
    FROM employees a, department b
    WHERE a.department_id = b.department_id
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    2、left join … on操作类型 
    左外连接又 称为左连接,以A表为基础,会显示A表的所有记录,如果匹配不到B表的记录,会显示null。 
    例子:

    SELECT *
    FROM employees a
    LEFT JOIN department b
    ON a.department_id = b.department_id
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    查询结果为: 
    这里写图片描述

    可以看到,employees_id = 6 的department_id是null,因为该员工未分配部门。 
    因此,可以利用这个特征,找出未被分配员工的名单,其SQL语句如下:

    SELECT *
    FROM employees a
    LEFT JOIN department b
    ON a.department_id = b.department_id 
    WHERE a.department_id is NULL
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    查询结果为: 
    这里写图片描述

    注意:在上面的语句中,添加了WHERE条件语句,找到等于空的部门id从而找到,未被分配员工的名单。 
    该方法:亦可以用于优化not in的操作,通常not in不会使用索引操作,而left join 则可以使用索引操作。


    3、right join …. on操作类型 
    右外连接又称为右连接,以B表为基础,会显示B表的所有记录,如果匹配不到A表的记录,会显示null。 
    例子:

    SELECT *
    FROM employees a
    RIGHT JOIN department b
    ON a.department_id = b.department_id
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    查询结果为: 
    这里写图片描述

    可以看到部门这张表的信息是全部展示出来的,而在部门id为4时的员工是空的,因此,可以利用这个特点找出部门中员工格式为0的部门,其sql语句如下:

    SELECT *
    FROM employees a
    RIGHT JOIN department b
    ON a.department_id = b.department_id
    WHERE a.employees_id is NULL
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    查询结果为: 
    这里写图片描述


    4、full join … on操作类型 
    MySQL中是不支持full join … on全连接操作,只能通过左连接和右连接的合集来实现,其代码如下:

    SELECT *
    FROM employees a
    LEFT JOIN department b
    ON a.department_id = b.department_id
    UNION ALL
    SELECT *
    FROM employees a
    RIGHT JOIN department b
    ON a.department_id = b.department_id
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果为: 
    这里写图片描述


    5、cross join 操作 
    交叉连接(cross join),又称笛卡尔连接(cartersian join)或叉乘(product),如果A和B是两个集合,它们的交叉连接就标记为:A*B 
    例子:

    SELECT *
    FROM employees a
    CROSS JOIN department b
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    查询结果为: 
    这里写图片描述

  • 相关阅读:
    有向无环图描述表达式 (a+b)*((a+b)/a)至少需要的顶点数目
    图的深度优先是 树的先序遍历的推广。 广度优先
    leader failed to send out heartbeat on time; took too long, leader is overloaded likely from slow disk
    优化 并发
    最终一致和强一致性缓存实践
    Go语言逆向初探 原创 半个大西瓜 看雪学院 2021-06-23
    中通快递的云原生改造之路 施尧 InfoQ 2021-06-23
    Stable Minimum Storage Merging by Symmetric Comparisons Pok-Son Kim1? and Arne Kutzner2
    A Method for the Construction of Minimum-Redundancy Codes
    滴滴基于Binlog的采集架构与实践 原创 滴滴技术团队 滴滴技术 2021-06-22
  • 原文地址:https://www.cnblogs.com/lei050/p/5446864.html
Copyright © 2011-2022 走看看