视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysqlselect结合where子语句查询结果集
2020-11-09 19:58:06 责编:小采
文档


WHERE子句

在SELECT语句中,语句首先从FROM子句开始执行,执行后会生成一个中间结果集,然后就开始执行WHERE子句。WHERE子句是对FROM子句生成的结果集进行过滤,对中间结果集的每一行记录,WHERE子句会返回一个布尔值,(TRUE/FALSE),如果TURE,这行记录继续留在结果集中,如果FALSE,则这行记录从结果集中移除。如:

SELECT?name?FROM?student?WHERE?studentNO?=?2

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。

子查询中的比较运算符

SELECT?studentNO?FROM?student?WHERE?studentNO?>?(SELECT?studentNO?FROM?student?WHERE?name='李四')

一个子查询可以用于WHERE子句中。上例中是一个标量子查询,子查询只能返回一个标量值。

同样一个行子查询也可以用于WHERE子句中:

SELECT?studentNO?FROM?student?WHERE?(studentNO,name)?=?(SELECT?studentNO,name?FROM?student?WHERE?name='李四')

WHERE子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当0时转化为false,当其他值是转化为true。

不带比较运算符的WHERE子句

SELECT?studentNO?FROM?student?WHERE?0

则会返回一个空集,因为每一行记录WHERE都返回false。

SELECT?studentNO?FROM?student?WHERE?1

或者

SELECT?studentNO?FROM?student?WHERE?'abc'

都将返回student表所有行记录的studentNO列。因为每一行记录WHERE都返回true。

下载本文
显示全文
专题