SQL过滤语句,高级数据过滤通配符过滤

01简介

WHERE是条件查询语句,也叫条件过滤语句,是SELECT查询语句中的一个WHERE子句。它的作用是将SELECT语句中所查询的数据根据指定条件进行过滤筛选。

由于数据库的数据是庞大的,并不是每次我们都需要查询所有数据,一般情况下我们只查询工作需要的某些数值,并不需要整表查询,整表查询会严重影响数据库的执行速度。所以使用WHERE字句是很有必要的!

02实例

现有一个学生成绩表,表名称是Prorate_a、表的字段分别有(id、Name、age、class、language、mathematics、English等字段)id后面的字段name开始分别对应(姓名、年龄、班级、语文成绩、数学成绩、英语成绩)

各字段中的数据如下面表格所示:

03常用操作符

04应用场景

1、查询单个列

SELECT显示列FROM表名WHERE字段名简单运算符数据

查询全年级英语成绩在75分以上的所有学生名单!

SELECT*FROMProrate_aWHEREEnglish85;

English为英语成绩的字段,后面的运算符是过滤条件,实验的目的是查找英语成绩在85分以上的学生名单,所以实验结果只有1条记录,所有学生当中只有黄小丽的英语成绩在85分以上。

2、不匹配检查

SELECT显示列FROM表名WHERE字段名简单运算符数据

查询不是五年级1班的所有学生名单!

SELECT*FROMProrate_aWHEREclass!=五年级1班;

class为班级的字段,后面的运算符!=是过滤条件,实验的目的是筛选掉五年级1班的学生,所以最终结果只有7条记录,另外3条记录是五年级1班的学生,所以没有显示。

■运算符!=和运算符用哪个都行,查询结果都是一样的;

■运算符后面如果是字符串要加上单引号’’,如果是数字可不加单引号;

3、BETWEEN操作符应用

SELECT显示列FROM表名WHERE字段名BETWEEN开始值AND结束值;

查询全年级数学成绩在70分至85分区间的所有学生名单!

SELECT*FROMProrate_aWHEREmathematicsBETWEEN70AND85;

BETWEEN主要是用来查找范围值的,在使用BETWEEN时必须指定两个值并且用AND关键字分隔,例如:BETWEEN70AND85,最终查询结果只有3条记录,因为数学成绩在70分到85分区间的只有3名学生。

BETWEEN关键字只能应用于数字字段查询,不能用于字符串字段查询;

4、ISNULL操作符应用

SELECT显示列FROM表名WHERE字段名ISNULL;

查询全年级数学成绩为空的学生名单!

SELECT*FROMProrate_aWHEREmathematicsISNULL;

ISNULL的作用是查询表中的空值数据,例如这个实验,数学成绩为空值的学生全年级只有两人,所以最终查询结果只显示2条记录。

■在数据库表中数值为空的行会显示NULL,但行中显示的NULL不一定是空值,NULL也可以是一个数值,所以需要获取某个列的空值数据时不能使用字段名=NULL或字段名=NULL,必须使用ISNULL关键字。

■ISNULL只能获取数据本身为NULL的值,但不能获取数据内容为NULL的数值,因为数据内容为NULL和0都不是空值。

5、AND操作符应用

SELECT显示列FROM表名WHERE字段名=数据AND字段名=数据;

查询五年级1班语文成绩满分的所有学生名单(满分成绩为分)!

SELECT*FROMProrate_aWHEREclass=五年级1班ANDlanguage=;

AND是并且的意思,要求两侧表达式为真,在这个实验中班级为五年级1班并且语文成绩满分的学生只有一人。两侧表达式都为真,所以返回查询数据。

■AND要求两侧的条件为真,数据才会被获取。

■AND的优先级比OR高,一个表达式拥有AND和OR,会先执行AND语句后再执行OR。

6、OR操作符应用

SELECT显示列FROM表名WHERE字段名=数据OR字段名=数据;

查询班级为五年级1班或者五年3班的学生名单!

SELECT*FROMProrate_aWHEREclass=五年级1班ORclass=五年级3班;

OR是或者的意思,两侧表达式一个为真即可,实验中班级为五年级1班或者五年级3班,只要其中一个条件为真即可返回查询数据。

OR两侧的条件一个为真即可,即一个条件满足后,不管第二个条件是否满足,符合的数据都会被返回,比如说五年级三班的班级即使不存在,五年级1班的数据也能返回,但使用AND的话则没有任何数据返回。

7、OR和AND操作符应用

SELECT显示列FROM表名WHERE(字段名=数据OR字段名=数据)AND字段名=数据;

查询班级为五年级1班或者五年3班并且英语成绩大于70分的学生名单!

SELECT*FROMProrate_aWHERE(class=五年级1班ORclass=五年级3班)ANDEnglish70;

实验中在OR语句处加了括号(),是因为AND的优先级比OR高,如果不加括号(),语句执行后逻辑会出现问题,SQL会先执行class=五年级3班ANDEnglish70然后再执行class=五年级1班。最终的结果是4条记录。

8、IN操作符应用

SELECT显示列FROM表名WHERE字段名IN(数据1,数据2,…);

查询班级为五年级1班或者五年3班的学生名单!

SELECT*FROMProrate_aWHEREclassIN(五年级1班,五年级3班);

IN主要用于获取一个字符的范围值,可以是任意范围值,只要满足其中一个即可返回数据。

■IN的底层业务逻辑规则与OR是相同的。

由于OR的运算速度比较慢,因此在实际应用时尽可的避免OR和IN的使用。

■IN和BETWEEN的区别在于一个是获取范围值,一个是获取区间值,IN是获取范围值。

9、NOT操作符应用

NOT表示取反的意思,必须配合ISNULL或IN一起使用才有效。

SELECT显示列FROM表名WHERE字段名NOTIN(数据1,数据2,…);

SELECT显示列FROM表名WHERE字段名ISNOTNULL;

查询班级不是五年级2班或者五年3班的学生名单!

SELECT*FROMProrate_aWHEREclassNOTIN(五年级2班,五年级3班);

IN表示查询一个范围的值,而NOT表示否认,组合的意思就是否认这个范围的值,结果只有五年级1班不在这个范围内,所以显示这个班级的学生名单。

查询各班级数学成绩不为空的学生名单!

SELECT*FROMProrate_aWHEREmathematicsISNOTNULL;

ISNULL为空值查询,加上NOT组合的意思就是查询不是空值的数据,结果第4行和第5行数据未显示,因为这两行的数学成绩都包含空值!

10、LIKE

前面介绍的操作符都是针对已知条件进行过滤的,但是,这种过滤方法并不是任何时候都好用,例如我要查找某个学生,但是我不记得这个学生的全名,这时就需要用到模糊搜索了,使用LIKE通配符即可找到相似的信息。

LIKE模糊查找匹配数据必须与(%)或(_)一起使用才有效。

有三种写法,分别是

SELECT*FROMProrate_aWHERE字段名LIKE%数据;#

SELECT*FROMProrate_aWHERE字段名LIKE数据%;

SELECT*FROMProrate_aWHERE字段名LIKE数%据;

查询五年级1班所有学生中,姓‘陈’的学生有多少人。

SELECT*FROMProrate_aWHEREclass=五年级1班ANDnameLIKE张%;

实验1的语句是获取学生姓名中以张为开头的数据,查询结果只有一条数据,因为五年级1班姓张的学生只有1人。

查询五年级1班所有学生中,名字中以‘英’关键字为结尾的学生有多少人。

SELECT*FROMProrate_aWHEREclass=五年级1班ANDnameLIKE%英;

实验2的语句是获取学生姓名中以英为结尾的数据,查询结果只有一条数据,因为五年级1班名字中以英为结尾的学生只有1人。

查询全年级姓名中包含‘明’关键字的所有学生名单!

SELECT*FROMProrate_aWHEREnameLIKE%明%;

实验3的语句是获取学生姓名中包含‘明’关键字的所有数据,查询结果有三条记录,因为全年级名字中包含‘明’的学生总共有3人。

SELECT*FROMProrate_aWHERE字段名LIKE_;#

一个_代表一个字符,如何要查询两个或者多个以上字符,可以用__或者________表示;

查询全年级姓名只有两个字的所有学生名单;

SELECT*FROMProrate_aWHEREnameLIKE__;

这个实验主要查询姓名中只有两个字符的学生信息,所有最终查询结构有三条记录,因为全年级姓名只有两个字符的学生一共有三人。




转载请注明:http://www.xcqg58.com/xxzl/xxzl/26847479.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了