9.2 数据的条件查询
在SELECT语句中,通过添加WHERE子句,可以对查询结果进行过滤,也就是使用WHERE子句进行条件查询,具体语法如下:
SELECT col_name1,col_name2,...
FROM table_name
WHERE conditions
本节将介绍如何在查询条件中使用这些判断条件
9.2.1 使用关系表达式查询
WHERE子句中,关系表达式由关系运算符和列组成,可用于列值的大小相等判断。
主要的运算符如下表:
操作符 |
说明 |
= |
相等 |
<> |
不相等 |
< |
小于 |
<= |
小于或等于 |
> |
大于 |
>= |
大于或等于 |
例:查询基本工资为2500原的员工信息
SELECT * FROM employee
WHERE salary=2500
上述实例采用了简单的相等过滤,另外,相等判断还可以用来比较字符串。
例:查找工作类型为“文员”的员工信息
SELECT * FROM employee
WHERE job='文员'
例:查询基本工资小于3500原的员工信息
SELECT * FROM employee
WHERE salary<3500
9.2.2 查询某个范围内的数据
使用BETWEEN AND语句可以查询某个范围内的数据,该运算符需要两个参数,即范围的开始值和结束值,如果记录的字段值满足指定的范围查询条件,则这些记录被返回。
例:查询员工工资在2500元~3500元的员工信息
SELECT * FROM employee
WHERE salary BETWEEN 2500 AND 3500
BETWEEN AND运算符前可以加上关键字NOT,表示在指定范围之外的值,如果字段值不满足指定范围内的值,则这些记录被返回。
例:查询员工工资不在2500元~3500元之间的员工信息
SELECT * FROM employee
WHERE salary NOT BETWEEN 2500 AND 3500
9.2.3 查询指定范围内的数据
使用IN关键字可以查询满足指定条件范围内的记录,使用IN关键字时,将所有检索条件用括号括起来,检索条件用逗号分隔,只要满足条件范围内的一个值即为匹配成功,则返回这些记录。
SELECT col_name1,col_name2,...
FROM table_name
WHERE col_name IN (value1,value2,...)
📢注意:
在IN关键字前面的时数据表中的列名,IN后面括号中是具体的值,一定要注意IN后面的内容数据类型要一致。
例:查询员工编码为101和102的数据记录
SELECT * FROM employee
WHERE code IN (101,102)
同理,也可以在IN前面加上NOT关键字,来查询不在指定范围内的数据。
例:查询员工编码不是101,也不是102的数据记录
SELECT * FROM employee
WHERE code NOT IN (101,102)
9.2.4 模糊查询用LIKE关键字
所谓模糊查询,就好像在百度中搜索一样,输入一个词或一句话,就会出来与之相关的内容。
在数据库中,使用LIKE关键字之前,用户需要先记住几个通配符,如下表。
通配符是一种在SQL的WHERE条件子句中拥有特殊意义的字符。
通配符 |
说明 |
% |
包含零个或多个字符的任意字符串 |
_ |
任何单个字符 |
[] |
指定范围([a-f])或集合([abcdef])中的任何单个字符 |
[^] |
不属于指定范围([a-f])或集合([abcdef])中的任何单个字符 |
9.2.4.1 百分号通配符“%”,匹配任意长度的字符,甚至包括零字符
例:查找以“张”开头的员工信息
SELECT * FROM employee
WHERE name LIKE '张%'
在搜索匹配时,通配符“%”可以放在任何位置
例:查询员工姓名中含有“建”字的记录
SELECT * FROM employee
WHERE name LIKE '%建%'
9.2.4.2 下划线通配符“_”,一次只能匹配任意一个字符
下划线通配符“_”,一次稚嫩个匹配一个任意字符,该通配符的用法和“%”相同,区别是“%”匹配多个字符,而“_”只匹配任意一个单字符,如果要匹配多个字符,则需要使用多个“_”。
例:查询员工姓名以字符“妍”结尾,且“妍”前面只有一个字符的记录
SELECT * FROM employee
WHERE name LIKE '_妍'
9.2.4.3 匹配指定范围中的任何单个字符
方括号[]指定一个字符集合,只要匹配其中任何一个字符,即为所查找内容。
例:查找员工姓名以“张建”两个字之一开头的记录
SELECT * FROM employee
WHERE name LIKE '[张建]%'
9.2.4.4 匹配不属于指定范围的任何单个字符
“[^字符集合]”匹配不在指定z 中的任何字符。
例:查找员工姓名不是以“张建”两个字之一开头的记录
SELECT * FROM employee
WHERE name LIKE '[^张建]%'
9.2.5 含有NULL值的列也能查看
在创建数据表时,设计者可以指定某列中是否包含空值(NULL)。
空值不等同于0,也不等同于空字符串,空值一般表示数据未知,不适用或将在以后添加。
在SELECT语句中使用IS NULL子句,可以查询某字段内容为空的记录。
为了演示该操作,在数据表employee中,插入两行员工性别为空值的数据记录。
INSERT INTO employee
VALUES(113,'李向阳',null,2,'技术员',3000),
(114,'刘欣欣',null,2,'文员',3000)
例:查询员工性别为空的记录
SELECT * FROM employee
WHERE sex IS NULL
与IS NULL相反的是IS NOT NULL,该子句查找字符字段不为空的记录
SELECT * FROM employee
WHERE sex IS NOT NULL