MySQL 知识量:16 - 40 - 165
在现实的MySQL应用中,只用一种条件来过滤数据显然是不够的,通常查询的结果需要同时满足多项条件,这种情况下可以使用组合的where子句。
其中一种方式是使用and操作符来连接各个条件。
select * from student where age>10 and sex='male';
查询年龄大于10岁同时是男孩的学生信息。结果为:
+----+------+-----+------+ | id | name | age | sex | +----+------+-----+------+ | 2 | Jame | 12 | male | | 3 | Bob | 11 | male | +----+------+-----+------+
每增加一个条件就可以使用and连接新添加的条件。
由or操作符连接的where子句中,只要满足任意一个条件,就将被纳入查询结果中。
select * from student where age=10 or sex='female';
查询年龄为10岁或者性别是女性的学生信息。结果为:
+----+-------+-----+--------+ | id | name | age | sex | +----+-------+-----+--------+ | 1 | Susan | 11 | female | | 4 | Robot | 10 | male | | 5 | Jen | 11 | female | | 6 | Toney | 10 | male | +----+-------+-----+--------+
以上结果中,任意行要么满足年龄是10岁的条件,要么满足性别是“female”的条件,要么这两项条件都满足。
in操作符用来指导条件的范围,在范围内的数据都是匹配的。
select * from student where age in (10,12);
查询年龄为10岁和12岁的学生信息。结果为:
+----+-------+-----+------+ | id | name | age | sex | +----+-------+-----+------+ | 2 | Jame | 12 | male | | 4 | Robot | 10 | male | | 6 | Toney | 10 | male | +----+-------+-----+------+
in操作符后面跟一个括号,里面列出的是具体的数据范围,各数据间使用逗号隔开。
in操作符与使用or操作符完成的功能类似,但是in操作符有许多优点:
当数据范围较广时,因为语法简单,in操作符更清楚和直观。
范围数据更容易修改。
执行更快。
可以包含其他select子句,构成更复杂的查询。
not操作符的作用是否定其后的所有条件。
select * from student where age not in (10,12);
查询年龄不是10岁和12岁的学生信息。结果为:
+----+-------+-----+--------+ | id | name | age | sex | +----+-------+-----+--------+ | 1 | Susan | 11 | female | | 3 | Bob | 11 | male | | 5 | Jen | 11 | female | +----+-------+-----+--------+
因为SQL是结构化查询语言,因此各子句的排列顺序十分重要。如果同时使用and操作符和or操作符,and操作符的优先级更高,会优先处理and操作,这一点十分重要。
例如:查询年龄为10岁或11岁,并且是女孩的学生信息。
select * from student where age=10 or age=11 and sex='female';
结果为:
+----+-------+-----+--------+ | id | name | age | sex | +----+-------+-----+--------+ | 1 | Susan | 11 | female | | 4 | Robot | 10 | male | | 5 | Jen | 11 | female | | 6 | Toney | 10 | male | +----+-------+-----+--------+
这个结果不是预计的结果,因为里面出现了男孩信息。这正是由于and操作符优先于or操作符导致的,要想得到想要的结果,可以在必要的地方加上括号。
select * from student where (age=10 or age=11) and sex='female';
查询结果变为:
+----+-------+-----+--------+ | id | name | age | sex | +----+-------+-----+--------+ | 1 | Susan | 11 | female | | 5 | Jen | 11 | female | +----+-------+-----+--------+
这样就可以得到预计结果了。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6