zoukankan      html  css  js  c++  java
  • sql连接查询(inner join、full join、left join、 right join)

    sql连接查询(inner join、full join、left join、 right join)

    一、内连接(inner join)

    首先我这有两张表

    1、顾客信息表customer

    2、消费订单表orders

    注意:顾客与订单之间是一对多关系

    需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)

    sql语句:

    select c.customer_name, o.create_time, o.money
    from customer c, orders o
    where c.id = o.customer_id

    sql语句也可以这样写:

    select c.customer_name, o.create_time, o.money
    from customer c inner join orders o
    on c.id = o.customer_id

    结果:

    内连接的过程:

    将符合条件的记录组合起来,放在一张新表里面

    二、左连接(left join)

    需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)

    sql语句:

    select c.customer_name, o.create_time, o.money
    from customer c 
    left join orders o
    on c.id = o.customer_id

    结果:

    从结果可以很清楚的明白左连接的含义:

    将左边表的所有记录拿出来,不管右边表有没有对应的记录

    三、右连接(right join)

    需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)

    sql语句:

    select c.customer_name, o.create_time, o.money
    from customer c 
    right join orders o
    on c.id = o.customer_id

    结果:

    从结果可以很清楚的明白右连接的含义:

    将右边表的所有记录拿出来,不管右边表有没有对应的记录

    四、全连接(full join)

    这里要注意的是mysql本身并不支持全连接查询,但是我们可以使用UNION关键字实现

    sql语句:

    select c.customer_name, o.create_time, o.money
    from customer c 
    left join orders o
    on c.id = o.customer_id
    
    UNION
    
    select c.customer_name, o.create_time, o.money
    from customer c 
    right join orders o
    on c.id = o.customer_id

    结果:

    从sql语句中可以清楚的看到:

    使用UNION关键字将左连接和右连接,联合起来

  • 相关阅读:
    JVM | JVM的核心技术
    性能测试 | 服务器CPU使用率高分析实例
    VIM | vim操作大全
    数据库 | SQL查询&LIMIT的用法
    性能测试 | Linux系统top命令中的io使用率,很多人都误解了它的具体含义
    团队游戏的那些事
    细说内测
    PropertyPlaceHolderConfigurer中的location是不是用错了?
    foreach写失效的问题
    如何优雅的写单元测试?
  • 原文地址:https://www.cnblogs.com/javafucker/p/7573441.html
Copyright © 2011-2022 走看看