mysql的where表达式

在学习过mysql的where 条件后,做个总结。(不对之处欢迎指正)

操作数据库的时候,有时候只要操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。

建立数据表table1:




"="  "!=":等于,不等于,完全匹配条件。

例如:查找表中name为abc的数据,SELECT * FROM `table1` WHERE name = 'abc';行结果如下。



">" "<" ">="  "<=" :大于,小于,大于或等于,小于或等于。

这些运算符是通过自然排序法比较的。

例如,查找uid中排在test3后的数据:SELECT * FROM `table1` WHERE uid > 'test3';(在这里数据库处理字符串时默认时不区分大小写的,所以Test3和test3是相同的),运行结果如下。



"BINARY":区分大小写。

1.例如:查找uid为test3的数据,如果SQL语句是这样:SELECT * FROM `table1` WHERE uid = 'test3';运行结果如下。


2.如果SQL语句加上BINARYSELECT * FROM `table1` WHERE BINARY uid = 'test3';运行结果如下。


3.如果要限制多个字段并且都区分大小写,则在每个字段前都需加上BINARY


四、"LIKE" 和 "%":搜索匹配和模式匹配符。前者表示”包含“,后者表示任意字符串,包括空字符和空格字符。这两个常搭配使用。

1.例如:查找uid中含有3的数据,SELECT * FROM `table1` WHERE uid LIKE '%3';运行结果如下。


%的位置可根据你所需要表示的任意字符串的位置而定,如本文的表中,在uid含有3的数据中,3都是在字符串的末尾,所以我们只要把%放在3前面即可,即'%3'。当然,如果在3的后面也加上%,即'%3%'也是可以的,因为%可表示空字符。SELECT * FROM `table1` WHERE uid LIKE '%3%';运行结果和上图是一样的。

再举个栗子,查找createTime为2017-08-19的数据,

SQL语句:SELECT * FROM `table1` WHERE createTime LIKE '2017-08-19%';运行结果如下。


2.当我们用了"LIKE"而没有加上"%"时,其限制效果就等同于"="了。

例如:SELECT * FROM `table1` WHERE name LIKE 'abc';运行结果如下。


3.当我们要查询字符串中含有百分号%的数据,例如查找nickName中含有"编程%"的数据,则需在%前加上\。

SQL语句:SELECT * FROM `table1` WHERE nickName LIKE '编程\%';运行结果如下。


4."NOT LIKE":与"LIKE"的操作结果相反,即不包含。


五、BETWEEN...AND...  : 介于某个范围之内。使用时需要注意字段的类型与设定的范围值的类型一致

1.例如,table1表中id是int型的,查询id介于2和3之间的数据,SELECT * FROM `table1` WHERE id BETWEEN 2 AND 3;运行结果如下。


2.例如,查询时间createTime介于'2017-08-20 00:00:00'和'2017-08-20 23:59:59'之间的数据

SELECT * FROM `table1` WHERE createTime BETWEEN '2017-08-20 00:00:00' AND '2017-08-20 23:59:59';


3.与">="、"<="的不同点。上述语句的作用等同于:SELECT * FROM `table1` WHERE createTime >= '2017-08-20 00:00:00' AND createTime <= '2017-08-20 23:59:59';或者是:SELECT * FROM `table1` WHERE createTime >= '2017-08-20' AND createTime < '2017-08-21';

从上述两个SQL语句我们可以发现,使用">="、"<="不同点在于,字段的类型和设定的范围值的类型可以不同,2017-08-20 23:59:59的类型是datetime,而2017-08-20的类型是date。

4."NOT BETWEEN...AND...":与BETWEEN...AND... 的操作结果相反。


六、"IN" : 在指定项内。格式如:IN(value1,value2,...)

1.例如,查找name为mno和hij的数据,为了后面更好地说明IN的作用,所以还加了ab和ab%:

SELECT * FROM `table1` WHERE `name` IN ('mno','hij','ab','ab%');运行结果如下。

由上可以看出IN的操作时完全匹配,而不是包含某个字符串。

2."NOT IN":不在指定项内,与IN的操作结果相反。



猜你喜欢

转载自blog.csdn.net/lingting12116/article/details/77613112