【Oracle11g SQL详解】WHERE 子句的条件筛选及常用操作符

WHERE 子句的条件筛选及常用操作符

在 Oracle 11g 中,WHERE 子句用于从查询结果中筛选满足条件的数据,是 SQL 语句中必不可少的部分。本文将详细讲解 WHERE 子句的基础用法及常用操作符。


一、WHERE 子句的基本语法
sql 复制代码
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;

说明:

  • 条件:定义筛选规则,只有满足条件的记录才会被返回。
  • WHERE 支持多种操作符,用于实现数字、字符串、日期等数据的灵活筛选。

二、常用操作符分类
  1. 比较操作符
    | 操作符 | 含义 | 示例 |
    |--------|-----------------------|----------------------------------|
    | = | 等于 | WHERE salary = 5000 |
    | != 或 <> | 不等于 | WHERE department_id != 10 |
    | > | 大于 | WHERE salary > 3000 |
    | < | 小于 | WHERE hire_date < '2023-01-01'|
    | >= | 大于等于 | WHERE salary >= 5000 |
    | <= | 小于等于 | WHERE salary <= 2000 |

  1. 逻辑操作符
    | 操作符 | 含义 | 示例 |
    |--------|------------------------|----------------------------------|
    | AND | 同时满足多个条件 | WHERE department_id = 10 AND salary > 5000 |
    | OR | 满足任一条件即可 | WHERE department_id = 10 OR salary > 5000 |
    | NOT | 条件的逻辑否定 | WHERE NOT (department_id = 10) |

  1. 范围和集合操作符
    | 操作符 | 含义 | 示例 |
    |---------|----------------------|------------------------------------|
    | BETWEEN | 在指定范围内 | WHERE salary BETWEEN 3000 AND 5000 |
    | IN | 属于指定的集合 | WHERE department_id IN (10, 20, 30) |
    | NOT IN | 不属于指定的集合 | WHERE department_id NOT IN (10, 20, 30) |

  1. 模糊匹配操作符
    | 操作符 | 含义 | 示例 |
    |--------|-----------------------|--------------------------------------|
    | LIKE | 模糊匹配(支持通配符)| WHERE first_name LIKE 'A%' |
    | NOT LIKE | 模糊匹配的否定 | WHERE first_name NOT LIKE 'A%' |
    | % | 匹配任意长度的字符 | WHERE first_name LIKE '%son' |
    | _ | 匹配单个字符 | WHERE first_name LIKE 'J_n' |

  1. NULL 值操作符
    | 操作符 | 含义 | 示例 |
    |------------|--------------------|-----------------------------------|
    | IS NULL | 判断是否为 NULL | WHERE commission_pct IS NULL |
    | IS NOT NULL | 判断是否非 NULL | WHERE commission_pct IS NOT NULL|

三、WHERE 子句使用示例
  1. 查询工资等于 5000 的员工
sql 复制代码
SELECT employee_id, first_name, salary 
FROM employees
WHERE salary = 5000;
  1. 查询部门编号为 10,且工资大于 5000 的员工
sql 复制代码
SELECT employee_id, first_name, department_id, salary 
FROM employees
WHERE department_id = 10 AND salary > 5000;
  1. 查询部门编号为 10 或工资大于 5000 的员工
sql 复制代码
SELECT employee_id, first_name, department_id, salary 
FROM employees
WHERE department_id = 10 OR salary > 5000;
  1. 查询工资在 3000 到 6000 之间的员工
sql 复制代码
SELECT employee_id, first_name, salary 
FROM employees
WHERE salary BETWEEN 3000 AND 6000;
  1. 查询姓氏以 'S' 开头的员工
sql 复制代码
SELECT employee_id, first_name, last_name 
FROM employees
WHERE last_name LIKE 'S%';
  1. 查询没有提成(NULL 值)的员工
sql 复制代码
SELECT employee_id, first_name, commission_pct 
FROM employees
WHERE commission_pct IS NULL;

四、WHERE 子句的执行顺序

WHERE 子句的条件按从左到右的顺序执行,且优先级如下:

  1. NOT(最高优先级)
  2. AND
  3. OR(最低优先级)

示例:

sql 复制代码
SELECT employee_id, first_name, department_id, salary 
FROM employees
WHERE department_id = 10 OR salary > 5000 AND commission_pct IS NOT NULL;

等价于:

sql 复制代码
SELECT employee_id, first_name, department_id, salary 
FROM employees
WHERE department_id = 10 OR (salary > 5000 AND commission_pct IS NOT NULL);

五、优化建议
  1. 优先使用索引列

    WHERE 子句中的条件应尽量使用表的索引列,以提高查询效率。

  2. 避免在条件中使用函数

    WHERE TO_CHAR(hire_date, 'YYYY') = '2023' 会导致索引失效,建议改为:

sql 复制代码
WHERE hire_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD');

六、小结

WHERE 子句是 SQL 查询的核心,通过合理使用操作符和优化条件,可以实现对数据的精确筛选和高效查询。在实际应用中,需结合具体业务场景选择合适的操作符,提升查询效率和可读性。

相关推荐
oradh3 小时前
Oracle普通表改造分区表的方法总结
数据库·oracle·普通表改造分区表
Gent_倪3 小时前
MySQL 与 Hive 语法异同点详解
数据库·hive·mysql
七夜zippoe3 小时前
DolphinDB 故障排查实战:系统、数据库与集群常见问题诊断
数据库·wpf·集群·常见问题·故障排查·dolphindb
!chen4 小时前
数据库主从有延迟怎么处理
数据库·adb
SelectDB技术团队4 小时前
Apache Doris 多云原生实践:SaaS、BYOC 与四大公有云覆盖
数据库·阿里云·云原生·华为云·腾讯云·亚马逊云·写入更新
云飞云共享云桌面6 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造
知行合一。。。11 小时前
RAG--03--Milvus基本用法
数据库·oracle·milvus
TDengine (老段)12 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
上学的小垃圾13 小时前
01-数据库系统概述
数据库
二进制漫游记13 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding