SELECT 字段 FROM 表 WHERE 某字段 Like 条件

本文详细介绍了SQL查询语句中Like操作符的使用方法及四种匹配模式:任意多个字符(%)、任意单个字符(_)、指定字符中的一个([])及指定字符以外的一个([^]),并提供了一个处理特殊字符的函数。

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

SELECT 字段 FROM 表 WHERE 某字段 Like 条件   
其中关于条件,SQL提供了四种匹配模式:  

1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。  比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' ,将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。  另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 , SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%' , 若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%' 虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。 


2,_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:  比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'  只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的; 再比如 SELECT * FROM [user] WHERE u_name LIKE '三__'; 只找出“三脚猫”这样name为三个字且第一个字是“三”的。 


3,[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。  比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三' 将找出“张三”、“李三”、“王三”(而不是“张李王三”); 如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e” SELECT * FROM [user] WHERE u_name LIKE '老[1-9]' ,将找出“老1”、“老2”、……、“老9”。


4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。  比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三' 将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等; SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';将排除“老1”到“老4”,寻找“老5”、“老6”、……


5,查询内容包含通配符时 ,由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:   function sqlencode(str)  str=replace(str,"[","[[]") '此句一定要在最前 str=replace(str,"_","[_]") str=replace(str,"%","[%]") sqlencode=str end function  在查询前将待查字符串先经该函数处理即可。
<think>我们正在讨论MySQL中的SELECT查询,特别是带有WHERE子句的条件查询。 根据用户提供的引用,我们可以总结如下: 1. WHERE子句用于指定查询条件,可以包含多个条件,使用AND、OR连接。 2. 条件可以是精准匹配、模糊匹配(使用LIKE)、范围查询(使用BETWEEN...AND或IN)等。 3. 子查询可以作为WHERE子句的条件,例如使用IN子句。 用户的问题:MySQL SELECT * FROM table WHERE 条件 查询用法 我们将按照以下结构回答: 1. 基本语法 2. 条件类型(精准查询、模糊查询、范围查询等) 3. 组合条件(AND, OR, NOT) 4. 使用子查询作为条件 5. 注意事项(例如空值处理) 同时,我们根据引用中的内容进行说明,并在适当位置添加引用标识。 注意:用户提供的引用中,引用[1]是一个子查询的例子,引用[2][3][4]介绍了WHERE条件查询的基本用法,引用[5]提到了排序,但用户问题主要关注WHERE条件。 开始回答:</think>### MySQL SELECT 查询用法详解(WHERE 条件**基本语法结构**: ```sql SELECT [字段] FROM [名] WHERE [查询条件]; ``` - `SELECT *`:返回所有字段(实际开发中建议明确指定字段) - `WHERE`:过滤数据的核心子句,支持多种条件类型 --- #### 一、WHERE 条件类型 1. **精准匹配** ```sql SELECT * FROM users WHERE id = 1001; -- 数字精确匹配 SELECT * FROM products WHERE name = '手机'; -- 字符串精确匹配(注意引号) ``` 2. **模糊查询**(`LIKE` + 通配符) ```sql SELECT * FROM books WHERE title LIKE '%数据库%'; -- 包含"数据库"的标题 ``` - `%`:任意长度字符(例:`张%` 匹配"张三"、"张伟明") - `_`:单个字符(例:`user_` 匹配"user1"、"userA") 3. **范围查询** ```sql SELECT * FROM orders WHERE amount BETWEEN 100 AND 500; -- 金额在100到500之间 SELECT * FROM employees WHERE dept_id IN (101, 203, 307); -- 部门ID在指定集合内 ``` 4. **空值判断** ```sql SELECT * FROM customers WHERE phone IS NULL; -- 查找未填电话的客户 ``` --- #### 二、多条件组合 | 逻辑运算符 | 示例 | 说明 | |------------|------------------------------------------|--------------------------| | `AND` | `WHERE age>18 AND status='active'` | 同时满足两个条件 | | `OR` | `WHERE city='北京' OR city='上海'` | 满足任意一个条件 | | `NOT` | `WHERE NOT department='HR'` | 排除指定条件 | | `()` | `WHERE (score>90 OR award=true) AND grade=3` | 优先级控制 | **示例**: ```sql SELECT * FROM students WHERE (math_score > 90 OR english_score > 85) AND class_id = 'A203'; ``` --- #### 三、子查询作为条件 通过子查询动态生成条件值(引用[^1]): ```sql SELECT * FROM employees WHERE department_id IN ( SELECT dept_id FROM departments WHERE location = '北京总部' -- 子查询返回北京部门的ID列 ); ``` --- #### 四、注意事项 1. **性能优化** - 避免 `SELECT *`,明确指定所需字段 - 对 `WHERE` 条件字段建立索引(如 `id`, `phone` 等高频查询字段) - 范围查询(`BETWEEN`, `>`)可能导致索引失效 2. **空值处理** - 使用 `IS NULL`/`IS NOT NULL` 判断空值(`= NULL` 无效) - 聚合函数(如 `COUNT()`)默认忽略 `NULL` 值[^3] 3. **日期比较** ```sql SELECT * FROM logs WHERE create_time > '2023-01-01 00:00:00'; -- 注意日期格式 ``` > 关键提示:复杂的 `WHERE` 条件建议先用 `EXPLAIN` 分析执行计划。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值