(MySQL笔记)SELECT语句的WHERE子句详解
2015-05-14 11:45
190 查看
WHERE子句
在SELECT语句中,语句首先从FROM子句开始执行,执行后会生成一个中间结果集,然后就开始执行WHERE子句。WHERE子句是对FROM子句生成的结果集进行过滤,对中间结果集的每一行记录,WHERE子句会返回一个布尔值,(TRUE/FALSE),如果TURE,这行记录继续留在结果集中,如果FALSE,则这行记录从结果集中移除。如:
FROM子句返回的中间结果集如下:
studentNO name
--------- ----
1 张三
2 李四
3 王五
4 赵六
总共4行记录,对每一行记录执行WHERE子句。第一行中studentNO是1,所以studentNO=2表达式返回值为FALSE,这行记录移除。第二行中studentNO是2,所以studentNO=2返回TRUE,这行记录继续保留;同理第三行和第四行记录也移除,执行完WHERE语句后的中间结果集为:
studentNO name
--------- ----
2 李四
然后执行SELECT语句,最终的结果集为:
name
----
李四
比较运算符
WHERE子句返回布尔值,所以WHERE子句经常会用到比较运算符。比较运算符有:
= 等于
<=> 相等或者都等于空
< 小于
> 大于
<= 小于或等于
>= 大于或等于
<> 不等于
!= 不等于
2=2的结果为true,15<9的结果为false,3>2的结果为true,5!=4的结果为true。
字符串也可以进行比较,'b'<'g'的结果为true,'h'>'k'的结果为false。
时间值可以比较,较早的时间小于较晚的时间。'1980-5-4'<'1990-02-15'的结果为true,'1991-2-18'>'1991-2-19'的结果为false。
=比较符与<=>比较符的差别在于,当比较两个空值的时候,=返回unknown,<=>返回为true。
子查询中的比较运算符
一个子查询可以用于WHERE子句中。上例中是一个标量子查询,子查询只能返回一个标量值。
同样一个行子查询也可以用于WHERE子句中:
不带比较运算符的WHERE子句
WHERE子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当0时转化为false,当其他值是转化为true。
则会返回一个空集,因为每一行记录WHERE都返回false。
或者
都将返回student表所有行记录的studentNO列。因为每一行记录WHERE都返回true。
在SELECT语句中,语句首先从FROM子句开始执行,执行后会生成一个中间结果集,然后就开始执行WHERE子句。WHERE子句是对FROM子句生成的结果集进行过滤,对中间结果集的每一行记录,WHERE子句会返回一个布尔值,(TRUE/FALSE),如果TURE,这行记录继续留在结果集中,如果FALSE,则这行记录从结果集中移除。如:
SELECT name FROM student WHERE studentNO = 2 |
studentNO name
--------- ----
1 张三
2 李四
3 王五
4 赵六
总共4行记录,对每一行记录执行WHERE子句。第一行中studentNO是1,所以studentNO=2表达式返回值为FALSE,这行记录移除。第二行中studentNO是2,所以studentNO=2返回TRUE,这行记录继续保留;同理第三行和第四行记录也移除,执行完WHERE语句后的中间结果集为:
studentNO name
--------- ----
2 李四
然后执行SELECT语句,最终的结果集为:
name
----
李四
比较运算符
WHERE子句返回布尔值,所以WHERE子句经常会用到比较运算符。比较运算符有:
= 等于
<=> 相等或者都等于空
< 小于
> 大于
<= 小于或等于
>= 大于或等于
<> 不等于
!= 不等于
2=2的结果为true,15<9的结果为false,3>2的结果为true,5!=4的结果为true。
字符串也可以进行比较,'b'<'g'的结果为true,'h'>'k'的结果为false。
时间值可以比较,较早的时间小于较晚的时间。'1980-5-4'<'1990-02-15'的结果为true,'1991-2-18'>'1991-2-19'的结果为false。
=比较符与<=>比较符的差别在于,当比较两个空值的时候,=返回unknown,<=>返回为true。
子查询中的比较运算符
SELECT studentNO FROM student WHERE studentNO > (SELECT studentNO FROM student WHERE name='李四') |
同样一个行子查询也可以用于WHERE子句中:
SELECT studentNO FROM student WHERE (studentNO,name) = (SELECT studentNO,name FROM student WHERE name='李四') |
WHERE子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当0时转化为false,当其他值是转化为true。
SELECT studentNO FROM student WHERE 0 |
SELECT studentNO FROM student WHERE 1 |
SELECT studentNO FROM student WHERE 'abc' |
相关文章推荐
- MySQL学习笔记 第六讲:select语句order by、limit、distinct、union
- mysql学习笔记(三)select语句
- MySQL入门笔记 —— 008 select语句
- MySql学习笔记1:select语句
- (MySQL笔记)SELECT语句执行顺序
- (MySQL笔记)SELECT语句的FROM子句详解
- (MySQL笔记)SELECT语句的WHERE子句详解
- Mysql DBA 高级运维学习笔记-DQL语句之select知识讲解
- MySQL学习笔记(10)之select查询语句
- MYSQL的select 学习笔记
- MySQL执行Select语句将结果导出到文件的方法
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
- mysql的select语句
- MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
- mysql 将select查询的值赋给update set语句中
- 单个select语句实现MySQL查询统计次数
- MySQL根据select语句导入导出数据(含解决中文乱码方式)
- MySql学习笔记(三)SQL简单入门语句--Fenby摘抄笔记
- SQL语句学习笔记☞select(待完善...)
- MySQL笔记-执行SQL语句的几种方式