当前位置:首页 > 问答 > 正文

SQL里那个Where条件怎么用,逻辑运算符又是咋回事,搞明白了查询才顺手

综合自W3School的SQL教程、菜鸟教程SQL部分以及《SQL必知必会》第4章与第5章的核心观点)

SQL里的Where条件,说白了就是给你的数据库查询加个“筛子”,没有Where子句的时候,你发出一条SELECT命令,SELECT * FROM 员工表”,数据库就会老老实实把整个“员工表”里所有员工的信息,不管有用的没用的,一股脑全倒给你,这就像你让仓库管理员把整个库房的东西都搬出来,不仅累死个人,而且你想找的那个特定工具很可能被埋在一大堆杂物里,很难找。

Where条件的作用就是让你能精确地告诉数据库:“我只要符合某某条件的那些行”,它的基本结构非常简单,紧跟在FROM表名后面,写法就是 WHERE 条件表达式,这个“条件表达式”就是你要设定的筛选规则。

Where条件怎么用:从最简单的比较开始

最基础的条件就是拿一个字段和某个值进行比较,你只想看所有在“销售部”的员工,语句就可以这么写:

SELECT * FROM 员工表 WHERE 部门 = ‘销售部’;

这里用的等号“=”就是最常用的比较运算符,除了等号,还有其他几个帮你比大小的伙计:

  • :等于
  • <> 或 :不等于(有的数据库用<>,有的用!=,但意思一样)
  • < :小于
  • > :大于
  • <= :小于等于
  • >= :大于等于

举个例子,想查询工资超过10000元的员工:SELECT 姓名, 工资 FROM 员工表 WHERE 工资 > 10000;,想找所有不是经理的员工:SELECT 姓名, 职位 FROM 员工表 WHERE 职位 <> ‘经理’;

还有一个非常重要的运算符叫 BETWEEN,它用来检查某个值是否在一个区间范围内,比如查工资在8000到15000元之间的员工(包含8000和15000):SELECT 姓名, 工资 FROM 员工表 WHERE 工资 BETWEEN 8000 AND 15000;,这比你写 WHERE 工资 >= 8000 AND 工资 <= 15000 更简洁。

然后是 IN 运算符,它用来匹配一组可能的值,假如你想找在“销售部”、“技术部”或“市场部”的员工,用IN就非常方便:SELECT 姓名, 部门 FROM 员工表 WHERE 部门 IN (‘销售部’, ‘技术部’, ‘市场部’);,这同样比用多个OR连接条件要清爽得多。

处理空值的 IS NULL,数据库里的空值(NULL)表示缺失或未知的数据,它不能用等号来判断,比如想找出没有填写手机号的员工记录,必须这么写:SELECT 姓名 FROM 员工表 WHERE 手机号 IS NULL;,如果写成 WHERE 手机号 = NULL 是错的,查不到任何结果。

逻辑运算符:让筛选条件组合起来,威力倍增

很多时候,你的筛选要求没那么简单,可能需要同时满足好几个条件,或者满足其中任意一个就行,这时候就需要逻辑运算符出场了,它们能把简单的条件组合成复杂的逻辑,主要的逻辑运算符有三个:AND、OR、NOT。

  1. AND:表示“。只有当AND连接的所有条件都成立时,整条记录才会被选中,它相当于严格把关,条件会越来越窄。

    • 例子:你想找“销售部”的,工资高于10000元”的员工,这两个条件必须同时满足:SELECT * FROM 员工表 WHERE 部门 = ‘销售部’ AND 工资 > 10000;,这样筛出来的人,既得是销售部的,工资还得够高。
  2. OR:表示“或者”。只要OR连接的任意一个条件成立,整条记录就会被选中,它相当于扩大范围,条件会变宽。

    • 例子:你想找在“北京”的,或者“上海”的员工,只要满足其中一个城市条件就行:SELECT * FROM 员工表 WHERE 城市 = ‘北京’ OR 城市 = ‘上海’;
  3. NOT:表示“非”,用于否定一个条件,它会把条件反过来。

    • 例子:你想找所有不在“销售部”的员工:SELECT * FROM 员工表 WHERE NOT 部门 = ‘销售部’;,这等价于 WHERE 部门 <> ‘销售部’

重要提醒:当AND和OR混用时,千万小心优先级!

当你把AND和OR写在同一个WHERE条件里时,很容易出错,因为数据库会优先处理AND操作,然后再处理OR操作,这就像数学里的“先乘除后加减”一样。

看个容易出错的例子:你想找出所有“销售部”的员工,或者“技术部”里“工资大于15000”的员工。 你可能会直觉地写成:SELECT * FROM 员工表 WHERE 部门 = ‘销售部’ OR 部门 = ‘技术部’ AND 工资 > 15000;

这个查询的结果可能和你想象的不一样!数据库并不是按从左到右的顺序解读的,它实际的理解是:找出“销售部”的所有员工(不管工资多少)或者 “技术部且工资大于15000”的员工,也就是说,销售部月薪3000的员工也会被查出来,但这可能不是你的本意。

你的本意很可能是先是一个“或”关系(部门是销售部或技术部),然后在这个基础上再加一个“且”关系(工资大于15000),正确的写法是用圆括号()来明确指定优先级,括号里的条件会先被计算。

正确的语句应该是:SELECT * FROM 员工表 WHERE (部门 = ‘销售部’ OR 部门 = ‘技术部’) AND 工资 > 15000;

加上括号后,意思就非常清晰了:先筛选出部门是销售部或技术部的员工,然后再从这批人里找出工资大于15000的。养成在复杂条件里使用括号的习惯,能避免很多莫名其妙的查询结果

Where条件是你的精准查询工具,而逻辑运算符让你能组合各种条件,从简单的单条件过滤,到用AND、OR、NOT构建复杂逻辑,再到用括号控制优先级,每一步都搞明白了,你向数据库提问的能力就上了一个大台阶,查询起来自然就得心应手了。

SQL里那个Where条件怎么用,逻辑运算符又是咋回事,搞明白了查询才顺手