MySQL数据库 数据过滤
使用select语句的where子句指定过滤条件。通常情况下,我们查询数据会根据特定条件和情况提取表中的部分数据。并不会查询表中所有的数据。
语法格式:where 子句放在from子句后面出现。
where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between | 指定在2个值之间 |
过滤单个值
#=: 查询员工名为Ngao的员工信息
SELECT
a.id,
a.last_name,
a.first_name,
a.salary
FROM
s_emp a
WHERE
a.last_name = 'Ngao';
#<>: 查询不属于41部门的员工信息
SELECT
a.id,
a.last_name,
a.first_name,
a.salary,
a.dept_id
FROM
s_emp a
WHERE
a.dept_id <> 42;
#!=:查询不属于41部门的员工信息
SELECT
a.id,
a.last_name,
a.first_name,
a.salary,
a.dept_id
FROM
s_emp a
WHERE
a.dept_id != 42;
#<: 查询工资大于1500的员工信息
SELECT
a.id,
a.last_name,
a.first_name,
a.salary,
a.dept_id
FROM
s_emp a
WHERE
a.salary >1500;
#between and : 查询工资在 1100到1400之间的员工信息
SELECT
a.id,
a.last_name,
a.first_name,
a.salary,
a.dept_id
FROM
s_emp a
WHERE
a.salary BETWEEN 1100 and 1400;
空值过滤
概念:在一个列不包含值时,称为空值null。null 无值,与字段包含0 ,空字符串或者空格不同。
- 为空:is null
- 不为空:is not null
- 对null值操作特定义的操作符,不能使用=
#查询员工工资为空的员工信息
SELECT
a.id,
a.last_name,
a.salary
FROM
s_emp a
WHERE
a.salary IS NULL;
#查询员工的经理不为空的员工信息
SELECT
a.id,
a.last_name,
a.manager_id
FROM
s_emp a
WHERE
a.manager_id IS NOT NULL;
逻辑操作符
and 操作符:
- 且逻辑。对多个列进行过滤。
#查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字
SELECT
id,
last_name,
dept_id,
title
FROM
s_emp
WHERE
dept_id = 41
AND title = 'Stock Clerk';
or 操作符
- 或逻辑,任意匹配其中一个条件
#查看员工部门为41 或者 44号部门员工id、名字和部门号
SELECT
a.id,
a.last_name,
a.dept_id
FROM
s_emp a
WHERE
a.dept_id = 41
OR a.dept_id = 42;
and 和 or 组合:
- and逻辑比or逻辑要高
#查看员工部门为41 或者 44号部门 且工资大于1000的员工id和名字
SELECT
a.id,
a.last_name,
a.dept_id,
a.salary,
a.title
FROM
s_emp a
WHERE
a.salary > 1000
AND (a.dept_id = 41 OR a.dept_id = 44);
#练习:查看员工部门为41且工资大于1000 或者 44号部门的员工id和名字
SELECT
a.id,
a.last_name,
a.dept_id,
a.salary,
a.title
FROM
s_emp a
WHERE
a.salary > 1000
AND a.dept_id = 41 OR a.dept_id = 44;
in 操作符
- 用来指定条件范围,范围中的每个条件都可以进行匹配 。
- 圆括号包围,逗号分隔。
- in的操作符比or操作符的效率高
#查看员工号1,3,5,7,9员工的工资
SELECT
a.id,
a.last_name
FROM
s_emp a
WHERE
a.id IN (1, 3, 5, 7, 9);
not 操作符
- 非逻辑。否定它之后所跟的任何条件
- not in
- **not like **
- is not null
- not between
#查询员工工资不在1000到1500范围的员工信息
SELECT
a.id,
a.last_name,
a.salary
FROM
s_emp a
WHERE
a.salary not BETWEEN 1000 and 1500;
#查询员工不在41或42或43部门的员工信息
SELECT
a.id,
a.last_name,
a.dept_id
FROM
s_emp a
WHERE
a.dept_id NOT IN (41, 42, 43);
like 操作符
- %:通配0到多个字符。
- _ : 当且仅当通配一个字符
- 转义字符:默认为,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符
- 通配符操作位于开始处,搜索效率最慢
#查看员工名字以N或n字母开头的员工的信息
#注:mysql 默认查询时,不区分大小写。可以通过在创建表时,添加 BINARY属性进行区分。
#或者在where子句中添加 BINARY关键字 格式: where binary ...
SELECT
a.id,
a.last_name
FROM
s_emp a
WHERE
a.last_name LIKE 'N%';
#查看员工名字以大写N字母结尾的员工的信息
SELECT
a.id,
a.last_name
FROM
s_emp a
WHERE BINARY
a.last_name LIKE '%N';
#查看员工名字第三个字母是a员工的信息
SELECT
a.id,
a.last_name
FROM
s_emp a
WHERE BINARY
a.last_name LIKE '__a%';