(MySQL笔记)SELECT语句的WHERE⼦句详解
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 赵六
except for except总共4⾏记录,对每⼀⾏记录执⾏WHERE⼦句。第⼀⾏中studentNO是1,所以studentNO=2表达式返回值为FALSE,这⾏记录移除。第⼆⾏中studentNO是2,所以studentNO=2返回TRUE,这⾏记录继续保留;同理第三⾏和第四⾏记录也移除,执⾏完WHERE语句后的中间结果集为:
studentNO name
mysql语句分类>java集合框架体系--------- ----
2 李四
然后执⾏SELECT语句,最终的结果集为:
name
----
李四
网站系统全免费开源
⽐较运算符
WHERE⼦句返回布尔值,所以WHERE⼦句经常会⽤到⽐较运算符。⽐较运算符有:
= 等于
<=> 相等或者都等于空
< ⼩于
> ⼤于
<= ⼩于或等于
>= ⼤于或等于
<> 不等于
!= 不等于
2=2的结果为true,15<9的结果为false,3>2的结果为true,5!=4的结果为true。
字符串也可以进⾏⽐较,'b'<'g'的结果为true,'h'>'k'的结果为false。
全面了解nginx时间值可以⽐较,较早的时间⼩于较晚的时间。'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⼦句
WHERE⼦句并不⼀定带⽐较运算符,当不带运算符时,会执⾏⼀个隐式转换。当0时转化为false,当其他值是转化为true。
SELECT studentNO FROM student WHERE 0
则会返回⼀个空集,因为每⼀⾏记录WHERE都返回false。
SELECT studentNO FROM student WHERE 1
或者
SELECT studentNO FROM student WHERE 'abc'
SELECT studentNO FROM student WHERE 'abc'
都将返回student表所有⾏记录的studentNO列。因为每⼀⾏记录WHERE都返回true。
mockingbird克隆语音来源:blog.chinaunix/uid-10064369-id-2971181.html
阅读完这篇⽂章后,我总结得出:每⼀个⼦句⽣成⼀个结果集,每⼀个⼦句可以互相嵌套,再将⽣成的结果集代⼊⼦句运算。我感觉这样对mysql语句更容易理解
WHERE⼦句可以理解为筛选,或者编程语⾔中的 if语句
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论