对数据进行过滤
使用WHERE子句~
WHERE子句应该在(FROM子句)之后给出。
当同时使用ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后。
输入▼
#从books表中检索author和price这俩列,但只返回price为24.99的行
SELECT author,price
FROM books
WHERE price = 24.99;
WHERE 子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
< | 小于 |
<= | 小于等于 |
!< | 不小于 |
> | 大于 |
>= | 大于等于 |
!> | 不大于 |
BETWEEN | 在指定的两个值之间 |
IS NULL | 为NULL值 |
WHERE 子句的组合过滤
通过引入逻辑操作符达到WHERE的组合使用。
逻辑操作符:
- AND
- OR
AND 只有左边情况满足才会看右边是否会满足
OR 在第一个条件满足时,不管第二个条件是否满足,相应的行都会被检索出
不存在括号的多个 AND 和 OR 组合使用时,根据优先级,将先组合 AND,后组合 OR
输入▼
#从books表中检索author和price这俩列,但只返回price大于24.99且author等于Thomas Down的行
SELECT author,price
FROM books
WHERE author = Thomas Down OR author = Thomas Schenk AND price > 24;
#SQL将理解成作者是 Thomas Schenk且价格大于24的,或者author是 Thomas Down的行
IN 操作符:
IN操作符用来指定条件范围,对范围内的每个条件都进行匹配。
IN功能类似OR
输入▼
#从books表中检索author和price这俩列,
#但只返回author等于Thomas Schenk或者Thomas Down的行
SELECT author,price
FROM books
WHERE author IN('Thomas Schenk','Thomas Schenk');
IN优点:
- IN操作语法更清楚直观
- 存在AND和OR操作符组合是使用IN将使得求职顺序更好进行管理
- IN一般比OR操作快
- IN中还可以包含其他的 SELECT 语句。
NOT操作符
功能是否定其后跟的任何条件。NOT关键字一般都是和其他操作符一起使用的。
NOT关键字可以加在要过滤的列前,而不仅是跟在其后
输入▼
#从books表中检索author和price这俩列,但只返回price不为24.99的行
SELECT author,price
FROM books
WHERE NOT price = 24.99;
NOT优势:
- 在复杂的语句中,NOT可以非常简单的找出与条件不匹配的行
用通配符过滤数据
通配符是用来匹配值的一部分的特殊字符。
通配符有
- 百分号(%)通配符
- 下划线(_)通配符
- 方括号([])通配符
搜索模式是由字面值、通配符或两者组合而构成的搜索条件。
使用通配符的技巧:
- 请勿过度使用通配符。~~开销大
- 确实需要使用通配符时尽量不要把他们用在搜索模式的开始处,因为这样是最慢的
- 必须仔细观察通配符的位置,避免出现奇怪的返回结果
LIKE操作符
%通配符
匹配任何东西(一个或多个字符),除了 NULL ~
输入▼
# 从books表中检索author和price这俩列,
# 搜索模式是'C++%'。及检索以C++开头的词。%告诉DBMS接受C++之后的任意字符,不管有多少个
# 只返回满足上诉搜索条件的行
SELECT author,price
FROM books
WHERE title LIKE 'C++%';
输入▼
# 从books表中检索author和price这俩列,
# 搜索模式是'%C++%'。及检索包含了 C++ 的词。%告诉DBMS接受C++之前和之后的任意字符,不管有多少个
# 只返回满足上诉搜索条件的行
SELECT author,price
FROM books
WHERE title LIKE '%C++%';
_通配符
只匹配任何的单个字符~
输入▼
# 从books表中检索author和price这俩列,
# 搜索模式是'_ C++'。及检索以C++j结尾。_告诉DBMS接受C++之前的一个字符
# 只返回满足上诉搜索条件的行
SELECT author,price
FROM books
WHERE title LIKE '_ C++';
[]通配符
该通配符用来指定一个字符集,它必须匹配指定位置(通配符位置)的一个字符。
# 从books表中检索author和price这俩列,
# 搜索模式是''[US]%''
# [US]匹配方括号中任意一个字符,但只能是匹配单个字符
# [US]之后的%则意味着匹配第一个字符之后的任意数量的字符
# 只返回满足上诉搜索条件的行
SELECT author,price
FROM books
WHERE title LIKE '[US]%';
# 返回所有以字符U或者S开头的字符串