sqlserver like 47个SQL操作符,躲在SQL查询中的 “数据处理器”

sqlserver like 47个SQL操作符,躲在SQL查询中的 “数据处理器”

在 SQL 查询里sqlserver likesqlserver like 47个SQL操作符,躲在SQL查询中的 “数据处理器”,操作符主要用于运算、比较或逻辑组合,是 “工具性符号 / 词语”(如:+、=、AND),作用是处理数据或条件关系。简单说,操作符更像 “运算工具”sqlserver like,和我们一样,是 SQL 查询里的“隐形工具人”。加加减减靠算术操作符,筛选数据靠比较操作符,组合条件靠逻辑操作符。别看它们只是+、=、AND这些符号或词语,用对了我们能快速捞出想要的数据,用错了可能慢到花儿都谢了。下面我们把 47 个常用 SQL 操作符按场景拆解,不管是拼接字符串、处理空值,还是合并结果集,我们都能找到对应工具sqlserver like,就算咱们是新手也能一看就懂。

下面,我们先让 47 个常用 SQL 操作符一起露个脸sqlserver like 47个SQL操作符,躲在SQL查询中的 “数据处理器”,按照类别站队:

算术操作符:5个(+、-、*、/、%)比较操作符:12个(=、、!=、、=、 … AND …、IN、NOT IN、LIKE、IS NULL、IS NOT NULL)

注:和!=功能一致,合计12个逻辑操作符:3个(AND、OR、NOT)位操作符:6个(&、|、^、~、)字符串连接操作符:2个(||、())

注:()函数形式按操作符逻辑计入集合操作符:4个(UNION、UNION ALL、、/MINUS)

注:MINUS为的等价形式,合计4个特殊比较操作符:3个(IS TRUE、IS FALSE、IS FROM)JSON操作符:3个(->、->>、#>)空值安全操作符:4个(、()、??、DIV)类型转换操作符:1个(::)

注:其他数据库以函数形式实现,仅的::为操作符正则表达式操作符:4个(、RLIKE、~、~*)

下面,我们接着一步步深入,对 47 个常用 SQL 操作符逐一简介:

1、算术操作符

用于数值计算,所有主流数据库(MySQL、、、SQL 、等)均支持:

2、比较操作符

用于判断数据关系,所有主流数据库支持,核心功能一致:

模糊与空值:3、逻辑操作符

用于组合条件判断,所有主流数据库支持:

注:不同数据库(如:MySQL, , SQL )对 !/&&/|| 的支持有差异,建议优先使用标准关键词(NOT/AND/OR)保证兼容性。XOR 运算符仅在部分数据库(如:MySQL)中直接支持。

4、位操作符(部分数据库支持)

对整数按二进制位进行运算,语法一致但支持范围有限:

注:支持MySQL、、SQL 。按位取反~的结果与数据库的整数存储方式(如是否支持无符号整数)相关,在 MySQL 中~3结果为-4(补码规则),但在 中若使用无符号整数类型,结果可能不同,因此该结果基于 MySQL 等使用补码存储整数的数据库,不同数据库可能因类型定义有差异。示例: ~CAST(3 AS ) 在MySQL返回超大数(无符号取反)。

5、字符串连接操作符(数据库差异明显)

用于拼接字符串,语法因数据库而异:

注:MySQL中+不能用于字符串连接(会被当作数值相加),必须用()。在MySQL中,如果操作数均为字符串,+会返回0(因为无法转换为数值相加),因此必须使用()或()进行字符串拼接。

示例:

-- MySQL中:'100' + 50 → 150(数值相加),'abc' + 50 → 50(非数字转0)

6、集合操作符(通用逻辑,语法/支持度差异)

用于合并多个查询的结果集(要求列数、类型一致):

7、特殊比较操作符(特定场景/数据库)

解决常规比较的局限性(如:NULL值判断):

8、JSON操作符(现代数据库支持)

用于查询JSON类型字段(需数据库支持JSON类型):

示例:若data为JSON字段{“user”: {“name”: “张三”}},则:

9、空值安全操作符(处理NULL值的特殊场景)

解决NULL值比较的歧义(NULL与任何值运算/比较均为NULL):

10、类型转换操作符(数据库差异)

隐式转换数据类型:

注:仅支持。其他数据库的类型转换方式:

MySQL:CAST('123' AS )

SQL :CAST('123' AS INT)

:('123')

11、正则表达式操作符(部分数据库支持)

用于复杂模式匹配:

注::MySQL、SQL 支持;用 () 函数。RLIKE:MySQL别名,功能同 。~ / ~*:专有。 3.9.0+也支持正则表达式,但需要通过函数实现(通常需要自定义正则表达式函数)。

说明:

(1)未特别标注的操作符,均符合SQL标准,支持主流数据库(MySQL、、、SQL 、)。

(2)实际使用需注意数据库版本(如:MySQL 8.0新增较多功能,低版本可能不支持)。

以下,我们进入正题,再对 SQL 操作符进行深度拆解,从基础应用到高阶应用,仅供参考:

一、常用 SQL 操作符的基础应用1、算术操作符(数值计算核心)2、比较操作符(条件过滤基础)3、逻辑操作符(条件组合逻辑)4、位操作符(特定场景使用)

-- 权限系统示例(假设 flags 是整数位掩码)
SELECT user_id FROM permissions 
WHERE flags & 4 = 4; -- 检查第3位是否开启(读权限)

二、常用 SQL 操作符的优先级1、优先级顺序(从高到低)

() > 算术运算(*,/,%) > 算术运算(+,-) > 比较操作符(=,>, NOT > AND > OR

2、优先级金字塔(从高到低)

1. 括号 ()
2. 算术运算符: * / % 
3. 算术运算符: + -(正负号)
4. 算术运算符: + -(加减)
5. 位运算符: ~(按位取反)
6. 位运算符: &(按位与)
7. 位运算符: ^(按位异或)
8. 位运算符: |(按位或)
9. 比较运算符: =, >, =, <=, , BETWEEN, LIKE, IN, IS NULL
10.逻辑非: NOT
11.逻辑与: AND
12.逻辑或: OR

示例1

SELECT * FROM employees
WHERE salary > 5000 OR department = 'HR' AND hire_date < '2020-01-01';

实际逻辑: > 5000 OR ( = 'HR' AND < '2020-01-01')

因 AND 优先级高于 OR。若需逻辑或优先,必须加括号:

WHERE (salary > 5000 OR department = 'HR') AND hire_date < '2020-01-01';

示例2

SELECT * FROM products
WHERE (category_id = 5 OR discount > 20)
  AND NOT is_discontinued
  AND price * 0.8 < 100;

执行顺序:

price * 0.8(算术运算) 20)(括号优先)AND连接所有条件3、跨数据库优先级差异

算术操作符优先级基本一致(* / % > + -),但取模操作符 % 在部分数据库(如:SQL )中与 * / 优先级相同,建议用括号明确:

SELECT 10 * 5 % 3; -- 结果可能是 (10*5)%3=50%3=2,或 10*(5%3)=10*2=20
-- 安全写法:
SELECT (10 * 5) % 3;

三、操作符 vs 关键字的重合边界

SQL 关键字是用于定义 SQL 语句结构的保留词,如:、FROM、WHERE 等。SQL 操作符用于比较和逻辑运算,如:=、>、AND、OR。关键字和操作符共同构成 SQL 查询的基础,用于数据检索、过滤和操作。

1、对比示例

-- 示例1
-- 操作符主导表达式
SELECT (unit_price * quantity) * (1 - discount) AS net_total -- 算术操作符
FROM order_details 
WHERE status IN ('shipped','delivered') OR is_priority = 1; -- 比较+逻辑操作符
-- 关键字定义语句框架
UPDATE products 
SET stock = stock - 10          -- SET 关键字引导赋值
WHERE id = 100;                 -- WHERE 关键字引导条件
-- 示例2
-- 操作符主导的表达式(产生新值)
SELECT 
  unit_price * quantity * (1 - discount) AS net_total, -- 算术操作符
  CASE WHEN quantity > 100 THEN 1 ELSE 0 END AS bulk_flag -- CASE内部操作符
FROM orders;
-- 关键字控制的语句结构(无返回值)
SELECT product_name          -- SELECT子句
FROM inventory               -- FROM子句
WHERE stock_count > 0        -- WHERE子句
ORDER BY last_restock_date; -- ORDER BY子句

2、特殊元素的双重身份 / LIKE操作符属性:在表达式中进行值比较WHERE price 10 AND 20; — 比较操作关键字形态:语法结构接近子句(后跟范围值,需要AND连接范围)CASE 表达式整体视为关键字:定义条件分支结构内部 WHEN, THEN 为逻辑操作符:

CASE — 关键字(控制流)

WHEN score >= 90 THEN 'A' — WHEN 逻辑比较操作符

WHEN score >= 80 THEN 'B' — THEN 赋值操作符

ELSE 'C' — ELSE操作符(默认赋值)

END AS 、区分原则

操作符处理数据单元间关系(如:price * )。

关键字指挥数据库如何操作数据(如:GROUP BY, ORDER BY, JOIN)。

二者如同句子中的”动词”和”连接词”,共同构建完整的SQL语义。

四、常用 SQL 操作符的进阶应用1、算术操作符:数值计算核心

(1)加法(+)与拼接陷阱

-- 数值加法(通用)
SELECT unit_price + shipping_fee AS total_cost FROM orders;
-- 字符串拼接(数据库差异)
/* SQL Server */ SELECT first_name + ' ' + last_name AS full_name FROM employees;
/* MySQL/Oracle */ SELECT CONCAT(first_name, ' ', last_name) AS full_name; 
/* PostgreSQL */ SELECT first_name || ' ' || last_name AS full_name;

注意:SQL 中'100' + 50返回150(隐式转换),MySQL返回'10050'(字符串拼接)

(2)除法精度问题实战

-- 整数截断(MySQL/SQL Server)
SELECT 5/2; -- 返回2
-- 精确计算解决方案
SELECT 5.0/2;         -- 返回2.5(SQL Server)
SELECT CAST(5 AS FLOAT)/2; -- 通用方案
SELECT 5/2.0;          -- PostgreSQL/MySQL返回2.5

(3)取模运算的跨库方案

-- 通用写法(使用函数)
SELECT MOD(17,5); -- 所有数据库支持函数形式
-- 操作符方案
SELECT 17 % 5;   -- MySQL/PostgreSQL/SQL Server支持

2、比较操作符:数据过滤基石

(1)的日期边界陷阱

-- 错误示例(包含2023-12-31 23:59:59)
SELECT * FROM orders 
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
-- 正确方案
SELECT * FROM orders
WHERE order_date >= '2023-01-01' 
  AND order_date < '2024-01-01'; -- 确保不包含次年

(2)NOT IN的NULL灾难

-- 危险查询(当subquery包含NULL时永远返回空)
SELECT * FROM products
WHERE category_id NOT IN (
  SELECT category_id FROM discontinued_categories -- 此子查询可能返回NULL
);
-- 安全替代方案
SELECT * FROM products p
WHERE NOT EXISTS (
  SELECT 1 FROM discontinued_categories d 
  WHERE d.category_id = p.category_id
);

(3)LIKE通配符高级用法

-- 匹配带百分号的文件名
SELECT * FROM documents 
WHERE filename LIKE 'report_2023%.pdf' ESCAPE '';
-- 手机号模糊匹配
SELECT * FROM users 
WHERE phone LIKE '138________'; -- 138开头+8位数字

3、逻辑操作符:组合条件艺术

(1)AND/OR优先级陷阱

-- 错误逻辑(先计算AND)
SELECT * FROM employees
WHERE department = 'IT' OR department = 'HR' AND salary > 8000;
/* 等价于:IT部门全部员工 或 HR部门且薪资>8000的员工 */
-- 正确加括号方案
SELECT * FROM employees
WHERE (department = 'IT' OR department = 'HR') 
  AND salary > 8000; -- 两个部门中高薪员工

(2)性能优化实战

-- 低效IN写法
SELECT * FROM customers 
WHERE id IN (SELECT customer_id FROM large_orders_table);
-- 高效EXISTS写法
SELECT * FROM customers c
WHERE EXISTS (
  SELECT 1 FROM large_orders_table o
  WHERE o.customer_id = c.id
  LIMIT 1 -- 找到第一条即停止
);

4、位操作符:状态管理利器

-- 权限系统实战(权限位:1=读,2=写,4=执行)
/* 检查读写权限 */
SELECT user_id FROM permissions 
WHERE (access_flags & 3) = 3; -- 同时具备1和2位
/* 添加执行权限 */
UPDATE permissions 
SET access_flags = access_flags | 4 
WHERE user_id = 1001;
/* 移除写权限 */
UPDATE permissions
SET access_flags = access_flags & ~2 
WHERE user_id = 1002;

五、跨数据库操作符差异解决方案

场景

通用解决方案

特殊语法说明

字符串拼接

(str1, str2)

MySQL:()必需

:只能用`

空值安全等于

a IS NOT FROM b

MySQL:a b

:需用NVL(a,-1)=NVL(b,-1)

取模运算

MOD(, )

MySQL/SQL :%支持

正则匹配

(str, )

MySQL:

:~

:需扩展支持

整数除法

CAST(a AS FLOAT)/b

MySQL:DIV返回整数

SQL :a/b自动取整

六、常用 SQL 操作符的高阶应用1、NULL安全处理三原则

-- 危险:与NULL比较永远返回未知
SELECT * FROM users WHERE phone = NULL; -- 错误!
-- 方案1:显式NULL检查
SELECT * FROM orders WHERE coupon_code IS NULL;
-- 方案2:COALESCE转换
SELECT * FROM products 
WHERE COALESCE(discount, 0) > 10; -- NULL视为0
-- 方案3:NULLIF避免除零错误
SELECT revenue / NULLIF(order_count, 0) AS avg_revenue;

2、性能优化四准则

-- 准则1:用UNION ALL替代OR(索引优化)
SELECT * FROM log WHERE type = 'login'
UNION ALL
SELECT * FROM log WHERE type = 'logout';
-- 准则2:避免函数包装索引列
/* 低效 */ SELECT * FROM users WHERE YEAR(created_at) = 2023;
/* 高效 */ SELECT * FROM users WHERE created_at >= '2023-01-01' AND created_at < '2024-01-01';
-- 准则3:LIKE左通配优化
/* 无法用索引 */ SELECT * FROM products WHERE name LIKE '%pro%';
/* 可用索引 */ SELECT * FROM products WHERE name LIKE 'pro%';
-- 准则4:批量更新避坑
UPDATE orders SET status = 'processed' WHERE id IN (1,3,5...500); -- IN列表过长
/* 改用临时表 */ 
CREATE TEMP TABLE ids_to_update(id INT PRIMARY KEY);
INSERT INTO ids_to_update VALUES (1),(3),...(500);
UPDATE orders o JOIN ids_to_update t ON o.id = t.id 
SET o.status = 'processed';

3、类型转换防御策略

-- 隐式转换风险示例
SELECT * FROM transactions WHERE trx_id = '10012'; -- 字符串转数字
-- 防御方案1:严格匹配类型
SELECT * FROM transactions WHERE trx_id = 10012;
-- 防御方案2:显式转换
SELECT * FROM user_actions 
WHERE CAST(action_time AS DATE) = '2023-06-01'; -- 可控转换

4、动态定价算法

SELECT product_id,
  base_price * 
    CASE 
      WHEN inventory_level  365 THEN 0.8 -- 旧款折扣
      ELSE 1.0
    END *
    (1 - COALESCE(member_discount, 0)) AS dynamic_price
FROM products
WHERE is_active = 1;

5、多层级权限校验

SELECT u.user_id,
  MAX(CASE WHEN p.access_flags & 1 = 1 THEN 1 ELSE 0 END) AS can_read,
  MAX(CASE WHEN p.access_flags & 2 = 2 THEN 1 ELSE 0 END) AS can_write
FROM users u
LEFT JOIN permission_groups pg ON u.group_id = pg.id
LEFT JOIN global_permissions p ON pg.permission_mask & p.mask > 0
GROUP BY u.user_id;

总结:SQL 操作符实践指南防御性编码始终用IS NULL/IS NOT NULL处理空值显式类型转换优于隐式转换除法运算明确处理小数优先级管理多用括号明确优先级,复杂逻辑必须使用括号AND优先级高于OR需警惕按位运算符顺序需测试验证跨库兼容拼接注意数据库方言,用()替代+取模用MOD()函数分页语法封装在抽象层性能意识替代IN处理子查询LIKE左通配规避全表扫描函数包装索引列为禁忌

学会这 47 个 SQL 操作符,我们手里就有了一套 “万能扳手”,算数值用算术操作符,筛数据用比较操作符,拼条件用逻辑操作符,遇到特殊场景还有 JSON、位操作符兜底。我们只要“按需选工具”,复杂查询加括号明确优先级,跨数据库稳妥采用通用语法,按场景挑对操作符,下次我们写 SQL 时,就不会再对着符号犯愁了,查询效率和准确性自然能提上来。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » sqlserver like 47个SQL操作符,躲在SQL查询中的 “数据处理器”

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们