Appearance
SQL AND & OR
SQL AND 和 OR 运算符用于在 WHERE 子句中组合多个条件,以过滤查询结果。
AND 运算符
AND 运算符用于当所有条件都为真时,才返回记录。
AND 语法
sql
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND ...;OR 运算符
OR 运算符用于当至少有一个条件为真时,就返回记录。
OR 语法
sql
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR ...;AND 和 OR 组合使用
当需要同时使用 AND 和 OR 运算符时,建议使用括号来明确运算顺序,避免歧义。
组合使用语法
sql
SELECT column1, column2, ...
FROM table_name
WHERE (condition1 AND condition2) OR (condition3 AND condition4);示例
假设我们有一个名为 students 的表,包含以下数据:
| id | name | age | grade | gender |
|---|---|---|---|---|
| 1 | 张三 | 18 | 高三 | 男 |
| 2 | 李四 | 17 | 高二 | 女 |
| 3 | 王五 | 19 | 高三 | 男 |
| 4 | 赵六 | 16 | 高一 | 女 |
| 5 | 钱七 | 18 | 高三 | 女 |
示例 1:使用 AND 运算符
查询年级为高三且年龄为 18 的学生:
sql
SELECT * FROM students WHERE grade = '高三' AND age = 18;结果:
| id | name | age | grade | gender |
|---|---|---|---|---|
| 1 | 张三 | 18 | 高三 | 男 |
| 5 | 钱七 | 18 | 高三 | 女 |
示例 2:使用 OR 运算符
查询年级为高三或年龄为 16 的学生:
sql
SELECT * FROM students WHERE grade = '高三' OR age = 16;结果:
| id | name | age | grade | gender |
|---|---|---|---|---|
| 1 | 张三 | 18 | 高三 | 男 |
| 3 | 王五 | 19 | 高三 | 男 |
| 4 | 赵六 | 16 | 高一 | 女 |
| 5 | 钱七 | 18 | 高三 | 女 |
示例 3:组合使用 AND 和 OR 运算符
查询年级为高三且(年龄为 18 或性别为女)的学生:
sql
SELECT * FROM students WHERE grade = '高三' AND (age = 18 OR gender = '女');结果:
| id | name | age | grade | gender |
|---|---|---|---|---|
| 1 | 张三 | 18 | 高三 | 男 |
| 5 | 钱七 | 18 | 高三 | 女 |
示例 4:组合使用多个 AND 和 OR 运算符
查询(年级为高三且年龄大于 17)或(年级为高一且性别为女)的学生:
sql
SELECT * FROM students WHERE (grade = '高三' AND age > 17) OR (grade = '高一' AND gender = '女');结果:
| id | name | age | grade | gender |
|---|---|---|---|---|
| 1 | 张三 | 18 | 高三 | 男 |
| 3 | 王五 | 19 | 高三 | 男 |
| 4 | 赵六 | 16 | 高一 | 女 |
| 5 | 钱七 | 18 | 高三 | 女 |
注意事项
运算顺序:在没有括号的情况下,AND 运算符的优先级高于 OR 运算符。为了避免歧义,建议始终使用括号来明确运算顺序。
条件数量:可以组合任意数量的 AND 和 OR 条件,但过多的条件会使查询变得复杂,影响可读性和性能。
性能考虑:使用 AND 和 OR 运算符时,数据库需要评估每个条件,因此过多的条件可能会影响查询性能。
小结
SQL AND 和 OR 运算符是组合多个查询条件的重要工具,通过合理使用这些运算符,可以更精确地过滤查询结果。在组合使用时,记得使用括号来明确运算顺序,以确保查询结果符合预期。