日常业务中经常需要通过查询条件过滤数据。
1 查询条件
1.1 WHERE
指定查询的过滤条件。以下语句只返回姓名为“刘备”的员工信息:
WHERE 位于 FROM 之后,指定一个或者多个过滤条件,满足条件的数据才会返回。
- WHERE 子句被称为谓词(Predicate)。
2 选择(Selection)
通过查询条件过滤数据的操作在关系运算中被称为选择
它是针对表进行的水平选择,保留满足条件的行生成的新表
3 比较运算符
比较两个数值的大小,包括字符、数字以及日期类型的数据。
查询员工在 2018 年 11 月 11 日之后入职
其中,DATE 定义了一个日期类型的常量值。指定日期时也可以省略 DATE
4 BETWEEN
想要查找一个范围内的数据。
查询月薪位于 10000 到 15000 之间的员工:
需要注意的是,BETWEEN 包含了两端的值(10000 和 15000)。
5 IN 运算符
5.1 查找列表中的值
查询姓名为“刘备”、“关羽”或者“张飞”的员工:
只要匹配列表中的任何一个值,都会返回结果
6 空值判断
代表缺失或者未知的数据.
判断一个值是否为空不能使用等于或者不等于.
例如,以下查询尝试找出没有上级领导(manager 字段为空)的员工:
空值判断的错误示例
该语句没有返回任何结果
但确实存在这样的数据。错因在于将一个值与一个未知的值进行数学比较,结果仍然未知;即使是将两个空值进行比较,结果也是未知。
以下运算均是非法的,在 MySQL8.0 版本下,会报错
6.1 空值判断
expression 的值为空,IS NULL 返回真,IS NOT NULL 返回假
表达式的值不为空,IS NULL 返回假,IS NOT NULL 返回真
查找没有上级领导的员工
如果仅仅能够指定单个过滤条件,就无法满足复杂的查询需求;为此,SQL 引入了用于构建复杂条件的逻辑运算符。
7 复合条件
借助于逻辑代数中的逻辑运算,SQL 提供了三个逻辑运算符:
7.1 AND 逻辑与运算符
只有当两边的条件都为真时,结果才为真,返回数据;否则,不返回数据。
以下示例使用 AND 运算符查找性别为“女”,并且月薪超过 10000 的员工:
- SELECT emp_name, sex, salary
- FROM employee
- WHERE sex = '女'
- AND salary > 10000;
- emp_name|sex|salary |
- --------|---|--------|
- 孙尚香 |女 |12000.00|
- “孙尚香”是女性员工,并且月薪为 12000。
7.2 OR 运算符
使用 OR 运算符查找姓名为“刘备”、“关羽”或者“张飞”的员工:
SELECT emp_name, sex, salary FROM employee WHERE emp_name = '刘备' OR emp_name = '关羽' OR emp_name = '张飞';
该查询的结果与前文中 IN 运算符的示例相同。
7.3 短路运算
对于逻辑运算符 AND 和 OR,SQL 使用短路运算(short-circuit evaluation)。也就是说,只要前面的表达式能够决定最终的结果,不执行后面的计算。这样能够提高运算效率。因此,以下语句不会产生除零错误:
- SELECT 'AND'
- FROM employee
- WHERE 1 = 0 AND 1/0 = 1;
- SELECT 'OR'
- FROM employee
- WHERE 1 = 1 OR 1/0 = 1;
第一个查询由于 AND 左边的结果为假,肯定不会返回任何结果,因此也就不会计算 1/0;第二个查询由于 OR 左边的结果为真,一定会返回结果,同样不会产生除零错误。
7.4 NOT 运算符
以下示例查找除了“刘备”、“关羽”以及“张飞”之外的其他员工:
- SELECT emp_id, emp_name
- FROM employee
- WHERE emp_name NOT IN ('刘备', '关羽', '张飞');
将多个逻辑运算符进行组合,可以构造任意复杂的查询条件。不过,需要注意不同的运算符之间的优先级问题。
8 运算符优先级
假如我们想要知道人力资源部(deptid = 2)或者财务部门(deptid = 3)中,哪些员工拥有奖金。如果使用以下查询:
- SELECT emp_name, dept_id, bonus
- FROM employee
- WHERE dept_id = 2
- OR dept_id = 3
- AND bonus IS NOT NULL;
很显然,微软正在给Windows 10的视觉效果进行大调整,其中一个最明显的展现就是...
如果你想了解React Navigation 5.x的基本的概念,可以查看我之前的发的一篇文章...
我们知道在JS中常用的事件有: 页面事件:load; 焦点事件:focus,blur; 鼠标...
1.我该努力了,不为别的,就为了以后我想要的东西,我会自己给自己。 2.有些人...
第一个问题:廷时处理 在页面刚加载的时候对FCK赋值,比如在信息列表中选中一条...
本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明。 键值设计 ...
在 2 月 8 日至 2 月 28 日期间,一场科技感十足的全民健身线上运动会在厦门举行...
前言 本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目...
一般情况下,aspnetcore发布后的默认端口是5000,这个大家都知道,而且默认骨架...
又到了一年盘点时!回望过去一年,国内数据库领域发生了哪些有代表性的事件?这些...