mysql数据过滤

时间:2023-03-08 16:10:59

WHERE子句

在我们使用数据库时,通常只会根据特定条件提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filtercondition)。

SELECT name, age FROM tab1 WHERE age=18;

返回age=18的行

WHERE子句支持的操作符
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于

大于
= 大于等于
BETWEEN 在指定的两个值之间

eg:

SELECT name,age FROM tab1 WHERE age>10; //获取age大于10的数据
SELECT name,age FROM tab1 WHERE age BETWEEN 10 AND 18; //获取age在10到18之间的数据,包括10和18

另一个特殊子句
IS NULL用来返回为空的数据

SELECT name, age FROM WHERE name IS NULL;

组合WHERE子句

使用AND或者OR子句,组合WHERE子句

SELECT name,age FROM tab1 WHERE age=10 AND name='aaa'; //查询age=10并且name='aaa'的数据

SELECT name,age FROM tab1 WHERE age=10 OR age=19; //查询age=10或者age=19的数据

AND和OR可以同时使用,不过AND的优先级高于OR,所以会先处理AND操作符,另外可以用括号分组,明确的显示优先级.

IN操作符

指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。

SELECT name,age FROM tab1 WHERE age IN (18,19,20); //查询age在18,19或20的所有数据,功能与OR相似.

IN相比OR的好处:

  1. 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
  2. 在使用IN时,计算的次序更容易管理
  3. IN操作符一般比OR操作符清单执行更快
  4. IN的可以包含其他SELECT语句,使得能够更动态地建立WHERE子句

NOT操作符

否定它之后所跟的任何条件。

SELECT name,age FROM tab1 WHERE age NOT IN (18,19,20); //查询age不在18,19或20的所有数据,功能与OR相似.

使用通配符过滤

LIKE操作符

%通配符

%可以匹配表示任何字符出现任意次数

SELECT name FROM tab1 WHERE name LINK 'a%';  //可以匹配任何name以a开头的数据

_通配符

下划线(_)。下划线只匹配单个字符,用法同%

注意

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 尽量不要把它们用在搜索模式的开始处,因为速度会很慢