mysql中from多表和inner join区别

本文探讨了MySQL中from多表查询通过innerjoin与传统写法的相似之处和不同之处。它们在结果上一致,但innerjoin更清晰明了。主要区别在于性能和代码可读性:普通查询可能导致大数据量下性能下降,而innerjoin明确关联表与字段。

mysql中from多表和inner join区别

相同点

两种方式得到的结果是一致的,在执行方式和效率上都是一样的,只是书写的方式不同,基本上inner join 是为了区别 left join ,right join等的一个写法,而另外那种不是join的写法,只能等同于inner join。

不同点

普通的多表查询,内部还是笛卡尔积的逐行的搜索机制,如果查询的几张表数据量大的话会降低性能;inner join能比较清楚告诉阅读者是哪些表进行了关联,以及关联的字段是什么。where就要读者自己去看了

### 左连接 (Left Join) 与内连接 (Inner Join) 的区别 #### 定义 左连接 (`LEFT JOIN`) 返回左中的所有记录以及右中符合条件的记录。如果右中不存在匹配项,则返回 `NULL` 值[^3]。 内连接 (`INNER JOIN`) 则仅返回两个中满足连接条件的匹配行。换句话说,只有当两都存在对应关系的数据时,这些数据才会被展示出来[^4]。 #### 使用场景 对于 `LEFT JOIN` 来说,它的主要用途是在需要保留左侧格全部信息的同时获取右侧格的相关补充信息。即使右侧格没有任何相匹配的信息也不会影响到最终查询结果里来自左边部分的内容显示[^1]。 而 `INNER JOIN` 更适合于寻找共同特征或者交集的情况——即希望得到的是两张或张不同来源之间相互重叠的部分而非单方面的完整列[^2]。 #### 示例代码 下面通过具体的例子来说明这两种类型的差异: 假设我们有两个简单的AB: ```sql -- A CREATE TABLE A ( aID INT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO A VALUES (1, 'Alice'), (2, 'Bob'); -- B CREATE TABLE B ( bID INT PRIMARY KEY, age INT, aID INT -- 外键指向A.aID ); INSERT INTO B VALUES (101, 25, 1), (102, 30, NULL); ``` ##### LEFT JOIN 实例 当我们执行以下SQL语句时, ```sql SELECT * FROM A LEFT JOIN B ON A.aID = B.aID; ``` 会获得这样的结果: |aID |name |bID |age |aID | |----|------|-----|----|----| |1 |Alice |101 |25 |1 | |2 |Bob |NULL |NULL|NULL| 可以看到,“Bob”的相关信息虽然在A中有记录但由于他在B找不到对应的条目所以相应字段填充为了null值示缺失状态。 ##### INNER JOIN 实例 再看另一个情况下的输出效果: ```sql SELECT * FROM A INNER JOIN B ON A.aID = B.aID; ``` 此时只会显示出同时存在于AB两方之内的项目组合而成的新集合形式呈现给用户查看而已。 |aID |name |bID |age |aID | |----|------|-----|----|----| |1 |Alice |101 |25 |1 | 这里仅仅列出了能够成功建立映射联系的对象实例化现形态。 ### 总结 综上所述,在实际应用过程中可以根据具体需求灵活选用合适的join方式以达到预期目的并提高效率减少不必要的计算开销等问题发生几率最小化处理原则下做出最佳决策方案设计思路方向指引作用明显增强用户体验满意度水平提升显著可见一斑矣!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值