mysql:like与left join搭配使用

本文分享了使用MySQL进行特定字段模糊匹配查询的SQL语句示例,对比Oracle数据库,表达了作者对MySQL使用体验的个人看法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT
	a.DEPT_ID,
	a.FULL_NAME,
	a.MOBILE,
	b. NAME
FROM
	sys_users a
LEFT JOIN sys_depts b ON a.DEPT_ID = b.ID
WHERE
	a.FULL_NAME LIKE '%张%'
AND b. NAME LIKE '%量%';

执行结果:

 

最后吐槽一句,mysql真的使用体验比oracle差太多了,可能也是因为oracle先入为主吧

### 子查询 LEFT JOIN 的性能对比 在 MySQL 中,子查询和 `LEFT JOIN` 是两种常见的数据检索方式。为了更好地理解两者之间的性能差异,可以从多个角度进行分析。 #### 执行计划的影响 当执行涉及大量数据的操作时,优化器的选择至关重要。对于某些场景下的子查询,特别是关联子查询(correlated subqueries),每次外部查询的一行都会触发一次内部查询的执行[^1]。这可能导致效率低下,尤其是在处理大数据集时。相比之下,`LEFT JOIN` 可能会更高效,因为整个操作可以一次性完成,并且能够充分利用索引结构来加速匹配过程[^2]。 #### 使用覆盖索引提升性能 通过合理设计索引来支持特定类型的查询模式,可以在很大程度上改善 SQL 语句的表现。例如,在模糊搜索的情况下,如果创建了一个合适的辅助索引如 `idx_nickname(nickname)` ,那么即使是对 `nickname LIKE '%SK%'` 这样的条件也可以有效地减少磁盘 I/O 操作次数并加快响应速度。此时再配合 `LEFT JOIN` 来获取其他所需字段,则整体性能可能会优于单独使用带有复杂逻辑判断的子查询形式。 #### 实际案例测试 考虑如下两个版本的查询: ##### 版本一:使用子查询 ```sql SELECT u.* FROM users01 AS u WHERE EXISTS ( SELECT 1 FROM users01 WHERE nickname LIKE '%SK%' AND id = u.id); ``` ##### 版本二:采用 LEFT JOIN 结合覆盖索引 ```sql -- 首先构建一个仅返回 ID 列的结果集 WITH filtered_ids AS ( SELECT DISTINCT id FROM users01 WHERE nickname LIKE '%SK%' ) -- 接着基于这些ID做左连接取出完整的记录信息 SELECT u.* FROM users01 AS u INNER JOIN filtered_ids ON u.id = filtered_ids.id; ``` 上述例子展示了如何利用 `LEFT JOIN` 和临时表/CTE 技术重构原始含有子查询的表达式。通常情况下,后者往往具有更好的可读性和更高的运行效能,特别是在存在良好定义的索引策略下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值