目录

  1. SQL AND & OR 运算符简介
  2. AND 运算符
  3. OR 运算符
  4. AND 与 OR 结合使用
  5. SQL AND & OR 运算符的优先级
  6. 常见示例
  7. 参考资料

SQL AND & OR 运算符简介

在 SQL 查询中,ANDOR 是常用的逻辑运算符,用于在 WHERE 子句中连接多个条件。它们可以让你基于多个条件筛选出符合要求的记录。

  • AND 运算符:返回两个条件都为真时的记录。
  • OR 运算符:返回任意一个条件为真时的记录。

它们通常用于对查询结果进行更加精细的过滤,以满足特定的业务需求。


AND 运算符

AND 运算符用于连接两个或多个条件,只有在所有条件都为真时,才会返回结果。它常用于多重条件查询,确保查询结果符合多个标准。

语法

SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND ...;

示例

SELECT * FROM employees WHERE salary > 50000 AND department = 'IT';

  • 该查询返回所有 salary 大于 50000 且 department 为 ‘IT’ 的员工记录。只有同时满足两个条件的记录才会被返回。

OR 运算符

OR 运算符用于连接两个或多个条件,返回满足任何一个条件的记录。如果有任何条件为真,查询结果将会包括该记录。

语法

SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR ...;

示例

SELECT * FROM employees WHERE department = 'Sales' OR department = 'HR';

  • 该查询返回 department 为 ‘Sales’ 或 ‘HR’ 的所有员工记录。如果部门是 ‘Sales’ 或 ‘HR’ 之一,都会被包含在结果中。

AND 与 OR 结合使用

在查询中,可以同时使用 ANDOR 运算符来连接多个条件。当 ANDOR 一起使用时,必须使用括号来明确条件的优先顺序,否则 SQL 语句的逻辑可能会产生不准确的结果。

示例

SELECT * FROM employees
WHERE department = 'IT' AND (salary > 50000 OR experience > 5);

  • 该查询返回 department 为 ‘IT’ 且满足以下任意一个条件的员工:
    • salary 大于 50000,或
    • experience 大于 5 年。

使用括号明确 OR 条件的优先级,确保查询逻辑正确。


SQL AND & OR 运算符的优先级

AND 运算符的优先级高于 OR 运算符。也就是说,当 ANDOR 出现在同一查询中时,SQL 会首先执行 AND 条件,然后再执行 OR 条件。为了避免优先级问题,建议使用括号来明确条件顺序。

示例

SELECT * FROM employees
WHERE department = 'IT' OR department = 'HR' AND salary > 50000;

  • 上面的查询会按以下逻辑执行:
    1. SQL 会首先执行 department = 'HR' AND salary > 50000,然后将结果与 department = 'IT' 进行 OR 运算。

为了避免优先级误解,可以将查询改写为:

SELECT * FROM employees
WHERE (department = 'IT' OR department = 'HR') AND salary > 50000;

  • 该查询会返回 department 为 ‘IT’ 或 ‘HR’,并且 salary 大于 50000 的员工记录。

常见示例

示例 1:查询工资高于 50000 且部门是 ‘IT’ 或 ‘HR’ 的员工

SELECT * FROM employees 
WHERE (salary > 50000) AND (department = 'IT' OR department = 'HR');

  • 该查询返回所有 salary 大于 50000,且部门是 ‘IT’ 或 ‘HR’ 的员工记录。

示例 2:查询年龄大于 30 且姓名包含 ‘John’ 或 ‘Mary’ 的员工

SELECT * FROM employees 
WHERE age > 30 AND (name LIKE '%John%' OR name LIKE '%Mary%');

  • 该查询返回所有 age 大于 30,且名字中包含 ‘John’ 或 ‘Mary’ 的员工记录。

示例 3:查询产品价格高于 100 或库存数量大于 50 的产品

SELECT * FROM products 
WHERE price > 100 OR stock_quantity > 50;

  • 该查询返回所有价格高于 100 或库存数量大于 50 的产品记录。

参考资料