• 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

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

  • 相关阅读:
    new的实现原理
    call, apply, bind的内部实现原理
    redux基础第二讲——react-redux
    redux基础第一讲
    React组件的数据
    ES6中的super
    ES5和ES6中实现对象和继承的方法对比
    react组件的生命周期
    浅谈js继承的几种方法
    LeetCode 5274. Number of Ways to Stay in the Same Place After Some Steps
  • 原文地址:https://www.cnblogs.com/lei050/p/5446864.html
Copyright © 2020-2023  润新知