CodeGym /课程 /SQL SELF /逻辑运算符(AND, OR, NOT):条件组合

逻辑运算符(AND, OR, NOT):条件组合

SQL SELF
第 2 级 , 课程 2
可用

逻辑运算符就是帮你在查询里组合条件的工具,让数据过滤更灵活。你大概率在编程语言里已经见过它们了。要是把SQL查询比作邮箱里的垃圾邮件过滤程序,逻辑运算符就像是决定邮件进“垃圾箱”还是留在“收件箱”的规则。

SQL是个经常用来查数据或者分析数据的工具。逻辑运算符(ANDORNOT)让你能在一个查询里组合多个条件,回答更复杂的问题,比如:

  • 哪些学生大于18岁并且成绩是“A”?
  • 哪些商品属于“电子产品”或者“家用电器”类别?
  • 哪些客户没有进行过购买?

咱们来看看SQL里最主要的三个逻辑运算符:

  1. AND:两个条件都得为真。
  2. OR:只要有一个条件为真就行。
  3. NOT:把条件反过来(取反)。

AND运算符:两个条件都为真

AND运算符让你指定,只有两个部分的条件都满足,结果才会包含这行数据。

语法

SELECT 列1, 列2
FROM 表名
WHERE 条件1 AND 条件2;

例子1:筛选大于18岁的学生并且成绩为“A”

假设我们有个students表:

id name age grade
1 Alex 20 A
2 Maria 19 B
3 Otto 17 A
4 Anna 22 A

查询:

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';

结果:

name age grade
Alex 20 A
Anna 22 A

例子2:筛选“HR”部门并且工资大于50000的员工

SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;

OR运算符:只要有一个条件为真

OR运算符用在你想选出至少满足一个条件的行时。

语法

SELECT 列1, 列2
FROM 表名
WHERE 条件1 OR 条件2;

例子1:筛选成绩为“A”或者“B”的学生

SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';

结果:

name age grade
Alex 20 A
Maria 19 B
Otto 17 A
Anna 22 A

例子2:属于“电子产品”或者价格小于100的商品

products表:

product_id name category price
1 电视 电子产品 300
2 熨斗 家用电器 50
3 智能手机 电子产品 700
4 水壶 家用电器 80
SELECT name, category, price
FROM products
WHERE category = '电子产品' OR price < 100;

结果:

name category price
电视 电子产品 300
熨斗 家用电器 50
水壶 家用电器 80
智能手机 电子产品 700

NOT运算符:条件取反

如果说ANDOR是让条件为真,NOT就是反着来:它选出那些条件为假的行。

语法

SELECT 列1, 列2
FROM 表名
WHERE NOT 条件;

例子1:筛选没有“A”成绩的学生

SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';

结果:

name age grade
Maria 19 B

例子2:选出不属于“电子产品”类别的商品

SELECT name, category, price
FROM products
WHERE NOT category = '电子产品';

逻辑运算符组合

逻辑运算符可以组合起来,写出更复杂的条件。比如你想选出大于18岁的学生并且成绩为“A”或者成绩为“B”,你就可以组合ANDOR

组合语法

SELECT 列1, 列2
FROM 表名
WHERE (条件1 AND 条件2) OR 条件3;

例子:大于18岁且成绩为“A”的学生或者成绩为“B”的学生

SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';

结果:

name age grade
Alex 20 A
Anna 22 A
Maria 19 B

运算符执行优先级

要记住,SQL里的逻辑运算符执行顺序如下:

  1. NOT
  2. AND
  3. OR

你可以用括号改变执行顺序。不加括号的话,结果可能会出乎意料!

例子:有括号和没括号的区别

这个查询会发生什么?

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';

这个查询会选出:

  1. 大于18岁并且成绩为“A”的学生。
  2. 成绩为“B”的学生。

运算符优先级导致结果和加括号一样:

SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');

不过,如果加上括号:

SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');

现在只会选出大于18岁且成绩为“A”或者“B”的学生。括号真的能改变一切!

使用逻辑运算符时的常见错误

  1. 忘记加括号。尤其是ANDOR一起用时,容易导致结果不对。
  2. NOT时没搞清楚到底排除了哪些行。
  3. 逻辑运算符用错了,比如把AND写成OR或者反过来。
  4. 条件太复杂。很多ANDORNOT混在一起又没注释,代码就很难读懂。

这些运算符是所有复杂查询的基础。现在你已经可以写出不仅能用,还能精确找到你想要的数据的查询啦!

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION