mysql的inner join和left join使用场景

前置说明: inner join和join是同一个语法
下面主要区分什么时候求多集合交集,什么时候取主集合

注意并不是所有场景,都是主表撬动从表。如果数据量特别多,有筛选条件的情况,也可以子表撬动主表。主要是小表撬动大表。
主表和从表的关系,一般是一对多或者多对多。
用户和订单,一对多。
用户和角色,多对多,一个用户充当多个角色,一个角色下有多个用户。

客户表customer
订单表order
中间表c_o

  1. 查询所有用户及订单。用户做主表,用户可能没有订单

select c.,o.
from customer c
left join c_o co on c.id = co.user_id
left join order o on co.oder_od = o.id
order by c.id, o.id

  1. 查询所有订单和用户。取有效并集,只取有关联的数据。没有下过单的用户就不展示了
    select c.,o.
    from customer c
    inner join c_o co on c.id = co.user_id
    inner join on order on co.order_id = o.id
    order by c.id, o.id

  2. 查询某用户的订单信息,一对多,可能没有订单,使用主表优先left join
    select
    from customer c
    left join co on c
    left join order o on c=o
    where c.id = …
    order by o.id

  3. 查询某订单信息,包括用户的基本信息。1 v 1
    订单一般都会有用户信息,使用inner join即可,求取交集
    select
    from order o
    inner join co on o.id = co.orderid
    inner jpin customer c on co.orderID = c.id

### 回答1: MySQL中的inner joinleft join都是用于连接两个或多个表的查询语句。 inner join是指只返回两个表中都存在的记录,即只返回两个表中都有匹配的记录。 left join是指返回左表中的所有记录,而右表中只返回与左表中匹配的记录。如果右表中没有匹配的记录,则返回NULL值。 总的来说,inner join适用于需要两个表中都有匹配记录的情况,而left join适用于需要返回左表中所有记录的情况。 ### 回答2: MySQLInner joinLeft join是两个常用的关联查询语句,它们可以从两个或多个表中获取数据,以实现多表查询,将不同表之间的数据关联起来,获取更全面的信息。Inner Join一般用于两个表有交集的查询,而Left Join则用于两个表之间有主从关系的查询。 Inner join是通过两个或多个表之间公共的数据来查询出需要的数据。Inner join是一种内连查询方式,其返回的结果集只包含两个或多个表之间有公共数据的行。它先将需要查询的表进行拼接,再根据查询条件补全所有符合条件的数据,最后将结果集返回。需要注意的是,如果Inner join语句中查询的表中没有交集,则查询结果为空。 Left join通常用于一个表有主键,而另一个表有外键的查询。 Left join就是左连接,它返回左边表中所有行及其右边表中相匹配的行,如果右边表中没有匹配的行,则左边表中的这些行中关联的列将会为空值NULL。Left join可以显示左边表中所有的数据,加上追加的右边表中符合条件的数据,缺点是性能不如Inner join。 总之,Inner join是通过两个或多个表之间公共的数据来查询出需要的数据,而Left join则主要用于一个表有主键,而另一个表有外键的查询,两者各有特点,根据需要灵活选择适合的查询方式。 ### 回答3: MySQL inner joinleft join是SQL中两种常见的连接(Join)方式。两种连接方式都可以用于将两个或多个表中的数据合并在一起,提供有价值的查询结果。不过,两者之间存在一些不同之处。 Inner Join Inner Join通常被用作连接两个或多个表中的数据。Inner Join只返回那些在两个表中都存在的行。 意味着如果第一个表中的某一行与第二个表中的任何行没有匹配行,则它不会在结果集中出现。在内部连接中,使用关键字“ON”来指定连接条件。这个条件必须逻辑正确,否则会导致错误的交叉联接。 Inner Join以以下方式工作: 1.找到第一个表中满足使用“ON”子句指定的连接条件的行 2.对于找到的每一行,连接第二个表中符合指定条件的行,以生成结果集中的一行 因为Inner Join只返回两个表中共有的行,所以它对于需要提取两个表之间共同数据的查询非常有用。 Inner Join广泛用于需要按照某些条件连接两个不同表并获取结果集的查询。 Left Join Left Join也被用于连接两个表的数据,但与Inner Join不同的是,Left Join会返回左表中的所有行,而不仅仅是共同的行。如果一个左表行在右表中没有匹配行,那么在结果集中,将使用NULL填充右表的列。对于Left Join使用关键字“ON”来指定连接条件时,ON之前的表称为左表,之后的表称为右表。 Left Join以以下方式工作: 1.包括左表中的所有行 2.对于每一个左表行,在右表中找到匹配的行 3.如果有匹配行,在结果集中将它们连接起来。如果没有匹配行,则使用NULL填充右表的列。 Left Join对于需要查找左表中的每行,并获取与右表中具有匹配值的行相关联的数据的查询非常有用。它特别适用于查找特定条件下,有些列可能没有匹配值的查询。 Inner JoinLeft Join都是用于连接表中数据的强有力的工具,可以帮助查询更详细的数据。在决定使用哪种连接方式时,需要根据查询数据的特定要求来选择。如果需要共同的数据,使用Inner Join;如果需要先处理左表再匹配右表,则使用Left Join
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值