SQL语句过滤
使用SELECT语句的WHERE子句限定搜索
如
SELECT p_nam,p_age
FROM p
WHERE p_age = 20;
注:1.应用层过滤(?)容易影响应用的性能或者导致网络带宽的浪费。
2.WHERE应位于ORDER BY子句之前,否则会发生错误。
WHERE子句操作符
= | 等于 |
<> 或 != | 不等于 |
< | 小于 |
<= 或者 !> | 小于等于 / 不大于 |
> | 大于 |
>= 或者 !< | 大于等于 / 不小于 |
BETWEEN | 在指定的两个值之间 |
IS NULL | 为空值 |
注:不同的DBMS支持不同的操作符
SELECT p_nam
FROM p
WHERE p_age < 20;
SELECT p_nam
FROM p
WHERE p_age BETWEEN 10 AND 20;
SELECT p_nam
FROM p
WHERE p_id IS NULL;
注:过滤时需要验证被过滤列中含NULL值的行是否出现在返回数据中。
加入AND或OR子句(语法和一般程序操作一致),两者复合时需加()表明优先级
SELECT p_nam
FROM p
WHERE p_age < 20 AND p_id = '007';
SELECT p_nam
FROM p
WHERE p_age < 20 OR p_id = '007';
In操作符
制定条件范围
SELECT p_nam
FROM p
WHERE p_age in( 18, 20 )
ORDER BY p_name;
NOT操作符
SELECT p_nam
FROM p
WHERE NOT p_age = 20
ORDER BY p_name;
注:也可使用<>操作符完成
通配符过滤
利用通配符,可以创建比较特定数据的搜索模式
LIKE操作符
LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较
(?)
%通配符
在搜索串中,%表示任何字符出现任意次数。(?)
SELECT p_nam
FROM p
WHERE p_name LIKE 'L%';
上述语句可找出所有p_name中以L开头的数据。
注:有的DBMS会区分大小写。
SELECT p_nam
FROM p
WHERE p_name LIKE 'L%y';
上述语句可找出所有p_name中以L开头y结尾的数据。
注:用于搜索邮件地址很方便。
值得注意的是,许多DBMS都用空格来填补字段内容。如若某列有10个字符,而存储文本为Ley,则填满此列还需补7个空格。此举会使得上述语句不能识别Ley。解决办法:用函数去掉空格。
%不可匹配为NULL的行。
_通配符
_通配符用途和%一样,但只匹配单个字符。
SELECT p_nam
FROM p
WHERE p_name LIKE '_y';
注意:DB2不支持_。Access中使用的是?。
[ ]通配符
[ ] 用来指定一个字符集,必须匹配指定位置的一个字符。注:只用Access和SQL Sever支持集合。
SELECT p_nam
FROM p
WHERE p_name LIKE '[My]%';
上述语句,匹配的My任何一个字母都会返回。
否定:
SELECT p_nam
FROM p
WHERE p_name LIKE '[!My]%';