• 内连接和外连接


    内连接和外连接都是表的连接方式(将两张表连接起来

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

    外连接:左连接,右连接

    1.笛卡尔积

    表一和表二做笛卡尔积,就是将表一的每一行和表二的每一行进行拼接

     所有的这些连接都是先将这两张表做笛卡尔积,然后留下其中某些列,删除其他列

    2.内连接

    3.外连接(左连接,右连接)

    (1)Outer是可以省略的

    Left Join=Left Outer Join 即左连接就是左外连接

    Right Join=Right Outer Join 即右连接就是右外连接

    (2)谁是主表?(进行外连接的两张表是有主次关系的)

          主表中即使在另一张表中没有匹配的行,也要返回左表中的行

         a Right Join b,Join关键字右边的表b表是主表

         a Left Join b,Join关键字左边的表a表是主表

    举个例子:下面两张表

     Persons表和Orders表进行笛卡尔积得到:​​​​​​​​​​​​​​

     

     运行Mysql语句:

    1. SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    2. FROM Persons
    3. LEFT JOIN Orders
    4. ON Persons.Id_P=Orders.Id_P
    5. ORDER BY Persons.LastName

     就是在上面的笛卡尔积中,只保存Persons.Id_P=Orders.Id_P的行(也就是红色四行)

     最后由于是Persons Left Join Orders,所以Persons表是主表,因此Persons表是主表,主表Person表中有些行在Orders表中匹配不到,但是也要添加到最后的结果里面,最后结果为:

     如果是右连接:(也就是主表不再是Persons表了,而是Orders表

    1. SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    2. FROM Persons
    3. RIGHT JOIN Orders
    4. ON Persons.Id_P=Orders.Id_P
    5. ORDER BY Persons.LastName

     此时要保存的就是主表Orders中没有匹配到的行了(而不是Persons表中没有匹配到的行)

     

    leetcode上例题:

    力扣183  从不订购的客户

     显然2,4号员工是从不订购的客户

    将Customers表和Orders表进行外连接,比如:Customers Left Join Orders 得到:

    1. Select Customers.Name as Customers /* 给最后选出来的列起个别名,否则就叫Name*/
    2. From Customers Left Join Orders
    3. on Customers.Id=Orders.CustomerId

    得到的是:

    +Customers表中没有匹配到的行,也就是:

     所以还要添加一个条件:where Orders.CustomerId Is Null;

    1. Select Customers.Name as Customers /* 给最后选出来的列起个别名,否则就叫Name*/
    2. From Customers Left Join Orders
    3. on Customers.Id=Orders.CustomerId
    4. where Orders.CustomerId Is Null;/*这里where Orders.Id Is Null也是可以的*/

     

  • 相关阅读:
    似然和概率
    Spring IoC源码:createBean(中)
    Linux系统调优详解(七)——网络状态查看命令nethogs
    滚珠花键各大品牌简述
    【广州华锐互动】动物内脏3D模型素材库提供更加丰富的学习资源,提高教学效果
    FPGA代码设计规范一些探讨
    软件设计不是CRUD(23):在流式数据处理系统中进行业务抽象落地——详细编码
    SpringCloud整合spring security+ oauth2+Redis实现认证授权
    Ubuntu下 Docker、Docker Compose 的安装教程
    模板的全局特化
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/126303114