mysql no like
时间: 2023-11-06 09:54:33 浏览: 198
mysql的NO LIKE是指使用NOT LIKE操作符来筛选出不包含指定字符或字符串的记录。在MySQL中,使用NOT LIKE可以排除不符合指定模式的记录。例如,如果要找出ename字段中不包含字母A的记录,可以使用以下查询语句:
SELECT * FROM emp WHERE ename NOT LIKE '%A%';
这将返回ename字段中不包含字母A的所有记录。
相关问题
mysql中in和like
### MySQL 中 `IN` 和 `LIKE` 操作符的区别及用法
#### 使用场景差异
对于查询特定列中的值,当这些值是已知的具体项时,通常会使用 `IN` 操作符。这允许在一个列表内查找匹配的记录[^4]。
而如果需要基于某种模式来筛选数据,则更适合采用 `LIKE` 操作符。它支持通配符搜索,能够处理模糊匹配的情况[^3]。
#### 语法结构对比
- **IN 操作符**
用于测试某个字段是否存在于给定的一组值之中:
```sql
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...)
```
例如,在员工表中找出部门编号为10或20的所有职员:
```sql
SELECT emp_no, first_name, last_name
FROM employees
WHERE dept_no IN ('d001', 'd002');
```
- **LIKE 操作符**
用来执行字符串的部分匹配,常配合百分号 `%`(表示任意数量字符) 或下划线 `_`(代表单个字符):
```sql
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
```
比如要找到名字以 "A" 开头的所有客户:
```sql
SELECT customer_id, name
FROM customers
WHERE name LIKE 'A%';
```
#### 性能考量
由于 `IN` 可以直接利用索引来加速检索过程,因此在面对大量固定选项的情况下效率较高;相反地,除非有合适的全文搜索引擎辅助,否则涉及正则表达式的复杂 `LIKE` 查询可能会比较慢,尤其是在大数据集上[^5]。
DELIMITER $$ CREATE PROCEDURE proc_reserve_nanhang() BEGIN select (select count(table_ticket.fight_no ) from table_ticket WHERE fight_no LIKE "南航CZ3172")as num1, (select table_air.air_setting from table_air INNER JOIN table_fight ON table_fight.air_model=table_air.air_model WHERE fight_no LIKE "南航CZ3172" )as num2, case when (select count(table_ticket.fight_no) from table_ticket WHERE fight_no LIKE "南航CZ3172") =(select table_air.air_setting from table_air INNER JOIN table_fight ON table_fight.air_model=table_air.air_model WHERE fight_no LIKE "南航CZ3172" ) then '未售空' when (select count(table_ticket.fight_no ) from table_ticket WHERE fight_no LIKE "南航CZ3172") >(select table_air.air_setting from table_air INNER JOIN table_fight ON table_fight.air_model=table_air.air_model WHERE fight_no LIKE "南航CZ3172" ) then '已售空' else '未售空' end as '南航CZ3172机票状态'; END $$ DELIMITER ; CALL proc_reserve_nanhang(); 改写为sql server语言
以下是将MySQL存储过程改写为SQL Server存储过程的代码:
```
CREATE PROCEDURE proc_reserve_nanhang
AS
BEGIN
SELECT
(SELECT COUNT(fight_no) FROM table_ticket WHERE fight_no LIKE '南航CZ3172') AS num1,
(SELECT air_setting FROM table_air INNER JOIN table_fight ON table_fight.air_model = table_air.air_model WHERE fight_no LIKE '南航CZ3172') AS num2,
CASE
WHEN (SELECT COUNT(fight_no) FROM table_ticket WHERE fight_no LIKE '南航CZ3172') = (SELECT air_setting FROM table_air INNER JOIN table_fight ON table_fight.air_model = table_air.air_model WHERE fight_no LIKE '南航CZ3172')
THEN '未售空'
WHEN (SELECT COUNT(fight_no) FROM table_ticket WHERE fight_no LIKE '南航CZ3172') > (SELECT air_setting FROM table_air INNER JOIN table_fight ON table_fight.air_model = table_air.air_model WHERE fight_no LIKE '南航CZ3172')
THEN '已售空'
ELSE '未售空'
END AS '南航CZ3172机票状态';
END
```
需要注意的是,在 SQL Server 中不需要使用 `DELIMITER` 命令来指定语句分隔符,因此在这个存储过程中将其删除了。此外,SQL Server 中不支持在 `SELECT` 语句中使用 `AS` 关键字来为列设置别名,因此需要将别名移动到 `END AS` 子句中。
阅读全文
相关推荐
















