Mysql中的where子句

来源:互联网 发布:社交网络可视化 编辑:程序博客网 时间:2024/06/11 01:51
Mysql中的where子句
1、基本使用
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名( FROM子句)之后给出。例如:
SELECT * FROM book WHERE number=3
结果如下:


这条语句从book表中检索数据,但不返回所有行,只返回number值为3的行。
注意:在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后, 否则将会产生错误。
WHERE子句的限定条件可以有多种,其可用操作符如下:


需要注意的是,MySQL在执行匹配时默认不区分大小写,所以"JAVA"与"java"在mysql看来是匹配的。


2、范围限定
其中的between操作符稍显特殊,因为它需要两个操作符。使用示例如下:
SELECT * FROM book WHERE number BETWEEN 2 AND 4 ORDER BY number
结果如下:


在使用BETWEEN时,必须指定两个值来限定范围,这两个值必须用AND关键字分隔。 BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
3、空值检查
使用示例:
SELECT * FROM book WHERE number IS NOT NULL
上述语句返回number不为空的行。
注意:在进行匹配过滤时,因为NULL值得不确定性,数据库不知道它们是否匹配,所以在匹配过滤
或不匹配过滤时都不会不返回值为NULL的行。因此,在过滤数据时,如果需要显示相应的NULL数据,一定要给出空值检查的子句。
例如:SELECT * FROM book WHERE number IS NULL OR number>2
这条语句查询了number>2的所有数据,并且显示number为空的数据。


3、where子句之间的关键字
1)AND是用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。可以添加多个过滤条件,每添加一条就要使用一个AND。
2)OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。
3)WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。
注意: SQL在处理OR操作符前,优先处理AND操作符。
例如:where id=12 or number>3 and number<6
SQL把number>3 and number<6当作一个条件查询,把id=12当作一个条件。我们可以使用括号()来改变这个顺序。
例如:where (id=12 or number>3) and number<6。
推荐:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。


4、IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。 IN取合法值的由逗号分隔的清单,全都括在圆括号中。
使用示例:SELECT * FROM book WHERE number IN (2,4)
结果如下:


IN操作符有两个优点:第一:在使用长的合法选项清单时, IN操作符的语法更清楚且更直观。如
WHERE number IN (1,3,5,7,9)。
第二:IN是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。


5、NOT操作符
NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。例如:
WHERE number NOT IN (1,3,5,7,9)
SELECT * FROM book WHERE number NOT BETWEEN 2 AND 4
复杂的子句中, NOT是非常有用的。例如,在与IN操作符联合使用时, NOT使找出与条件列表不匹配的行非常简单。MySQL支持使用NOT对IN 、BETWEEN和EXISTS子句取反。


6、LIKE操作符
LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。
最常使用的通配符是百分号( %)。在搜索串中, %表示任何字符出现任意次数。
使用示例:SELECT * FROM book WHERE NAME LIKE 'Java%'
查询结果如下:


在执行这条子句时,MYSQL将检索任意以Java起头的词。%告诉MySQL接受Java之后的任意字符,不
管它有多少字符。
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。例如:
SELECT * FROM book WHERE NAME LIKE '%程序%'
注意:%代表搜索模式中给定位置的0个、 1个或多个字符。例如'%程序%'和‘程序’、‘java程序’都是可以匹配成功的。尾空格也可能会干扰通配符匹配。例如,在保存词'java'时,如果它后面有 一个或多个空格,即'java  '的形式, 则子句 WHERE name LIKE '%java'将不会匹配它们,因为在最后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个%,即'%java%'一个更好的办法是使用函数去掉首尾空格。还有就是%是不会匹配值为NULL的数据的。


另一个有用的通配符是下划线( _)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。
使用示例:WHERE NAME LIKE 'Java_'
'Java_'可以匹配'javax','javad','javas'等,但不能匹配'javaEE',因为'_'只匹配一个字符。


7、REGEXP关键字
REGEXP后可以跟正则表达式,这里不做详述。
0 0
原创粉丝点击