高级条件查询
组合WHERE 子句: ①AND 运算符 AND 运算符只有当两边操作数均为True时,最后结果才为True。人们使用AND 描述“与”(而且)的关系,即当满足第一个条件而且还要满足第二个条件时才会通过审核。 语法格式:
SELECT [DISTINCT|ALL] 字段名1[,字段名...]
FROM 表名
WHERE 条件表达式 AND 条件表达式 AND ...
ORDER BY 某一字段名 [ASC|DESC];
②OR 运算符 OR 运算符只有当两边操作数均为False时,最后结果才为False,只要一边是True则最后结果为True。根据OR 的这种运算规则,人们使用OR 描述“或”(或者)的关系,即当满足任何一个条件就可以通过审核。 语法格式:
SELECT [DISTINCT|ALL] 字段名1[,字段名...]
FROM 表名
WHERE 条件表达式 OR 条件表达式 OR ...
ORDER BY 某一字段名 [ASC|DESC];
③AND 与OR 的优先顺序问题 WHERE 子句中可以包含任意数量的AND 和OR 运算符,并且允许两者结合使用。
在表达式中,如果同时出现了AND 和OR 两种运算符,并非从左到右按顺序运算,而是优先执行AND ,然后执行OR 运算符。即优先级AND >OR
④IN 运算符 IN 运算符的运算规则是:当x在集合{Value1,Value2…ValueN}中时,表达式 IN (Value1, Value2,… ValueN)为True,而x不在集合{Value1, value2…ValueN}中时,上面的表达式为False。例: 8 IN (2,5,8,13)因为8在集合{2,5,8,13}中,所以表达式的值为True 7 IN (2,5,8,13)因为7不在集合{2,5,8,13}中,所以表达式的值为False 语法格式:
SELECT [DISTINCT|ALL] 字段名1[,字段名...]
FROM 表名
WHERE 字段名 IN 集合
ORDER BY 某一字段名 [ASC|DESC];
使用IN 运算符的优点: IN 运算符有如下优点: ?当条件很多时,使用IN 运算符会使语句更加简洁、清楚。 ?IN 运算符的执行速度要比OR运算符的更快。 ?IN 运算符最大优点是:其后条件列表集合中,可以放置其它SELECT 语句,即子查询。
⑤NOT 运算符 NOT 运算符的作用是对其后的表达式求反。 语法格式:
SELECT [DISTINCT|ALL] 字段名1[,字段名...]
FROM 表名
WHERE NOT 条件表达式
ORDER BY 某一字段名 [ASC|DESC];
NOT 运算符不仅可以对表达式求反,还可以和一些特殊运算符结合使用,例如IS NOT NULL 、NOT BETWEEN 和NOT IN 等就是结合使用的例子。
实现模糊查询: 结合使用LIKE 运算符和通配符可以对表进行模糊查询,即仅仅使用查询内容的一部分查询数据库中存储的数据。 ①LIKE 运算符 LIKE 运算符也可以单独使用,单独使用时,其功能与等于运算符(=)相同。不过,需要注意的是LIKE 运算符只支持字符型数据。 语法格式:
SELECT [DISTINCT|ALL] 字段名1[,字段名...]
FROM 表名
WHERE 字段名 LIKE 字段内容
ORDER BY 某一字段名 [ASC|DESC];
②% 通配符 在SQL语言中,使用百分号(%)通配符代表0个或多个字符。
百分号(%)通配符举例 | 说明 |
---|
a% | 代表开头字母为a的字符串 | %a | 代表以字母a结尾的字符串 | %a% | 代表含有字母a的字符串 | a%b | 代表以字母a开头,字母b结尾的字符串 | %1998% | 代表含有1998的字符串或者日期时间型数据 |
注意:在MySQL中,“%1998%”不可以写为“%1998”可写为“1998%”。但在SQL Server和Oracle中,“%1998%”既不可写“%1998”,也不可写为“1998%” 使用“%”通配符查询日期值中的某部分时,DBMS是将日期值转换为字符串进行匹配的。在不同DBMS及不同时区中,日期的表示有所不同
③_ 通配符 一个_ 代表一个字符。例:张_ 、 __辉 、 ___
④正则表达式 在WHERE 子句的条件中,还可以使用正则表达式,不同数据库环境中使用正则表达式的方式不同: ?在SQL Server中,可以直接用中括号“[]”括起来放在LIKE 后面的条件表达式中即可 ?MySQL则需要使用关键字REGEXP 语法格式:
SELECT [DISTINCT|ALL] 字段名1[,字段名...]
FROM 表名
WHERE 字段名 REGEXP 正则表达式
ORDER BY 某一字段名 [ASC|DESC];
?Oracle则需要使用REGEXP_LIKE 正则表达式函数实现
举例 | 说明 |
---|
[NR]% | 代表以“N"或”R“字母开头的字符串 | [a-d]%ing | 代表以”a“或”b“或”c”或“d”字母开头,且以“ing”结尾的字符串 | [c-emn]% | 代表以“c”或“d“或”e“或”m“或”n“字母开头的字符串 | N[^B]% | 代表以字母”N“开头,并且第二个字母不是”B“的字符串 | %1975[5-9]% | 代表数字1975或1976或1977或1978或1979 | [1][012]% | 代表数字10或11或13 |
⑤定义转义字符 在不同的环境下,定义转义字符的方法也不同。 ?SQL Server 如果运行环境为SQL Server,则使用ESCAPE 关键字定义转义字符。 例如,要查询最后两个字符为百分之五(5%)的所有字符串,其LIKE 语句为:LIKE '%5#%' ESCAPE '#' 其中,ESCAPE '#' 定义了转义字符“#”,它表示紧跟着“#”的“%”为普通字符,而并非是通配符。 注意:只有紧跟在转义字符后面的通配符才被看作转义字符,例如,上面的LIKE 语句中,第一个“%”仍当做通配符来使用,只有紧跟着“#”的“%”(第二个)才被当作普通字符。 ?MysQL、Oracle 如果运行环境为MySQL或Oracle时,则使用反斜杠()作为转义字符。 查询最后两个字符为百分之五(5%)的所有字符串,在Oracle中,编写其LIKE 语句为:LIKE '%5\%' 此时,需要注意,反斜杠作为转义字符时应当先将其激活。激活的方法为在SQL Plus中使用如下命令。set escape \; 定义了转义字符后,在使用有转义字符的LIKE 语句查询。
|